From 8de4c860c8b36df9273d804f0e10c95296ea2126 Mon Sep 17 00:00:00 2001 From: Sean Whitton Date: Wed, 29 May 2024 10:59:06 +0100 Subject: [PATCH] Import git-annex_10.20240430.orig.tar.xz [dgit import orig git-annex_10.20240430.orig.tar.xz] --- .appveyor.yml | 141 + .codespellrc | 7 + .ghci | 3 + .gitattributes | 1 + .gitignore | 40 + .mailmap | 29 + Annex.hs | 471 + Annex/Action.hs | 105 + Annex/AdjustedBranch.hs | 680 ++ Annex/AdjustedBranch/Merge.hs | 167 + Annex/AdjustedBranch/Name.hs | 99 + Annex/AutoMerge.hs | 391 + Annex/BloomFilter.hs | 54 + Annex/Branch.hs | 1062 ++ Annex/Branch/Transitions.hs | 108 + Annex/BranchState.hs | 134 + Annex/CatFile.hs | 221 + Annex/ChangedRefs.hs | 111 + Annex/CheckAttr.hs | 74 + Annex/CheckIgnore.hs | 64 + Annex/Common.hs | 16 + Annex/Concurrent.hs | 113 + Annex/Concurrent/Utility.hs | 31 + Annex/Content.hs | 949 ++ Annex/Content/LowLevel.hs | 141 + Annex/Content/PointerFile.hs | 71 + Annex/Content/Presence.hs | 215 + Annex/Content/Presence/LowLevel.hs | 36 + Annex/CopyFile.hs | 179 + Annex/CurrentBranch.hs | 41 + Annex/Debug.hs | 35 + Annex/Debug/Utility.hs | 32 + Annex/Difference.hs | 60 + Annex/DirHashes.hs | 90 + Annex/Drop.hs | 131 + Annex/Environment.hs | 73 + Annex/Export.hs | 72 + Annex/ExternalAddonProcess.hs | 100 + Annex/FileMatcher.hs | 278 + Annex/Fixup.hs | 155 + Annex/GitOverlay.hs | 124 + Annex/HashObject.hs | 66 + Annex/Hook.hs | 88 + Annex/Import.hs | 1105 ++ Annex/Ingest.hs | 425 + Annex/Init.hs | 466 + Annex/InodeSentinal.hs | 112 + Annex/Journal.hs | 294 + Annex/Link.hs | 476 + Annex/Locations.hs | 727 ++ Annex/LockFile.hs | 113 + Annex/LockPool.hs | 17 + Annex/LockPool/PosixOrPid.hs | 93 + Annex/Magic.hs | 74 + Annex/MetaData.hs | 121 + Annex/MetaData/StandardFields.hs | 67 + Annex/Multicast.hs | 44 + Annex/Notification.hs | 108 + Annex/NumCopies.hs | 333 + Annex/Path.hs | 125 + Annex/Perms.hs | 374 + Annex/PidLock.hs | 131 + Annex/Queue.hs | 97 + Annex/RemoteTrackingBranch.hs | 96 + Annex/ReplaceFile.hs | 87 + Annex/SpecialRemote.hs | 135 + Annex/SpecialRemote/Config.hs | 301 + Annex/Ssh.hs | 480 + Annex/StallDetection.hs | 154 + Annex/TaggedPush.hs | 68 + Annex/Tmp.hs | 74 + Annex/Transfer.hs | 443 + Annex/TransferrerPool.hs | 300 + Annex/UUID.hs | 123 + Annex/UntrustedFilePath.hs | 77 + Annex/UpdateInstead.hs | 23 + Annex/Url.hs | 190 + Annex/VariantFile.hs | 45 + Annex/VectorClock.hs | 83 + Annex/VectorClock/Utility.hs | 33 + Annex/Verify.hs | 352 + Annex/Version.hs | 68 + Annex/View.hs | 636 ++ Annex/View/ViewedFile.hs | 112 + Annex/Wanted.hs | 75 + Annex/WorkTree.hs | 60 + Annex/WorkerPool.hs | 126 + Annex/YoutubeDl.hs | 410 + Assistant.hs | 194 + Assistant/Alert.hs | 460 + Assistant/Alert/Utility.hs | 129 + Assistant/BranchChange.hs | 19 + Assistant/Changes.hs | 47 + Assistant/Commits.hs | 32 + Assistant/Common.hs | 14 + Assistant/CredPairCache.hs | 53 + Assistant/DaemonStatus.hs | 273 + Assistant/DeleteRemote.hs | 89 + Assistant/Drop.hs | 30 + Assistant/Fsck.hs | 50 + Assistant/Gpg.hs | 38 + Assistant/Install.hs | 175 + Assistant/Install/AutoStart.hs | 41 + Assistant/Install/Menu.hs | 54 + Assistant/MakeRemote.hs | 184 + Assistant/MakeRepo.hs | 98 + Assistant/Monad.hs | 144 + Assistant/NamedThread.hs | 99 + Assistant/Pairing.hs | 97 + Assistant/Pairing/MakeRemote.hs | 98 + Assistant/Pairing/Network.hs | 132 + Assistant/Pushes.hs | 37 + Assistant/RemoteControl.hs | 21 + Assistant/Repair.hs | 162 + Assistant/RepoProblem.hs | 34 + Assistant/Restart.hs | 119 + Assistant/ScanRemotes.hs | 41 + Assistant/Ssh.hs | 412 + Assistant/Sync.hs | 287 + Assistant/Threads/Committer.hs | 505 + Assistant/Threads/ConfigMonitor.hs | 95 + Assistant/Threads/Cronner.hs | 225 + Assistant/Threads/DaemonStatus.hs | 29 + Assistant/Threads/Exporter.hs | 80 + Assistant/Threads/Glacier.hs | 44 + Assistant/Threads/Merger.hs | 131 + Assistant/Threads/MountWatcher.hs | 182 + Assistant/Threads/NetWatcher.hs | 202 + Assistant/Threads/PairListener.hs | 156 + Assistant/Threads/ProblemFixer.hs | 73 + Assistant/Threads/Pusher.hs | 50 + Assistant/Threads/RemoteControl.hs | 128 + Assistant/Threads/SanityChecker.hs | 274 + Assistant/Threads/TransferPoller.hs | 56 + Assistant/Threads/TransferScanner.hs | 196 + Assistant/Threads/TransferWatcher.hs | 108 + Assistant/Threads/Transferrer.hs | 27 + Assistant/Threads/UpgradeWatcher.hs | 109 + Assistant/Threads/Upgrader.hs | 85 + Assistant/Threads/Watcher.hs | 376 + Assistant/Threads/WebApp.hs | 136 + Assistant/TransferQueue.hs | 236 + Assistant/TransferSlots.hs | 321 + Assistant/Types/Alert.hs | 79 + Assistant/Types/BranchChange.hs | 20 + Assistant/Types/Changes.hs | 101 + Assistant/Types/Commits.hs | 19 + Assistant/Types/CredPairCache.hs | 18 + Assistant/Types/DaemonStatus.hs | 119 + Assistant/Types/NamedThread.hs | 21 + Assistant/Types/Pushes.hs | 24 + Assistant/Types/RemoteControl.hs | 16 + Assistant/Types/RepoProblem.hs | 28 + Assistant/Types/ScanRemotes.hs | 25 + Assistant/Types/ThreadName.hs | 14 + Assistant/Types/ThreadedMonad.hs | 40 + Assistant/Types/TransferQueue.hs | 29 + Assistant/Types/TransferSlots.hs | 34 + Assistant/Types/UrlRenderer.hs | 26 + Assistant/Unused.hs | 85 + Assistant/Upgrade.hs | 377 + Assistant/WebApp.hs | 74 + Assistant/WebApp/Common.hs | 17 + Assistant/WebApp/Configurators.hs | 44 + Assistant/WebApp/Configurators/AWS.hs | 213 + Assistant/WebApp/Configurators/Delete.hs | 121 + Assistant/WebApp/Configurators/Edit.hs | 329 + Assistant/WebApp/Configurators/Fsck.hs | 196 + Assistant/WebApp/Configurators/IA.hs | 194 + Assistant/WebApp/Configurators/Local.hs | 433 + Assistant/WebApp/Configurators/Pairing.hs | 321 + Assistant/WebApp/Configurators/Preferences.hs | 114 + Assistant/WebApp/Configurators/Ssh.hs | 674 ++ Assistant/WebApp/Configurators/Unused.hs | 80 + Assistant/WebApp/Configurators/Upgrade.hs | 37 + Assistant/WebApp/Configurators/WebDAV.hs | 100 + Assistant/WebApp/Control.hs | 78 + Assistant/WebApp/DashBoard.hs | 179 + Assistant/WebApp/Documentation.hs | 42 + Assistant/WebApp/Form.hs | 94 + Assistant/WebApp/Gpg.hs | 114 + Assistant/WebApp/MakeRemote.hs | 46 + Assistant/WebApp/Notifications.hs | 86 + Assistant/WebApp/OtherRepos.hs | 39 + Assistant/WebApp/Page.hs | 75 + Assistant/WebApp/Pairing.hs | 79 + Assistant/WebApp/Repair.hs | 35 + Assistant/WebApp/RepoId.hs | 40 + Assistant/WebApp/RepoList.hs | 266 + Assistant/WebApp/SideBar.hs | 109 + Assistant/WebApp/Types.hs | 197 + Assistant/WebApp/routes | 115 + Author.hs | 35 + Backend.hs | 121 + Backend/External.hs | 378 + Backend/Hash.hs | 310 + Backend/URL.hs | 43 + Backend/Utilities.hs | 84 + Backend/VURL.hs | 102 + Backend/VURL/Utilities.hs | 57 + Backend/Variety.hs | 39 + Backend/WORM.hs | 70 + Benchmark.hs | 47 + Build/BuildVersion.hs | 13 + Build/BundledPrograms.hs | 95 + Build/Configure.hs | 106 + Build/DesktopFile.hs | 89 + Build/DistributionUpdate.hs | 261 + Build/InstallDesktopFile.hs | 19 + Build/LinuxMkLibs.hs | 200 + Build/MakeMans.hs | 15 + Build/Mans.hs | 65 + Build/NullSoftInstaller.hs | 224 + Build/OSXMkLibs.hs | 206 + Build/Standalone.hs | 240 + Build/TestConfig.hs | 130 + Build/Version.hs | 74 + Build/collect-ghc-options.sh | 12 + Build/mdwn2man | 58 + BuildFlags.hs | 96 + BuildInfo.hs | 16 + CHANGELOG | 8332 +++++++++++++++ COPYRIGHT | 840 ++ CmdLine.hs | 199 + CmdLine/Action.hs | 348 + CmdLine/AnnexSetter.hs | 36 + CmdLine/Batch.hs | 227 + CmdLine/GitAnnex.hs | 282 + CmdLine/GitAnnex/Options.hs | 582 ++ CmdLine/GitAnnexShell.hs | 171 + CmdLine/GitAnnexShell/Checks.hs | 84 + CmdLine/GitAnnexShell/Fields.hs | 33 + CmdLine/GitRemoteTorAnnex.hs | 67 + CmdLine/Option.hs | 95 + CmdLine/Seek.hs | 633 ++ CmdLine/Usage.hs | 108 + Command.hs | 152 + Command/Add.hs | 271 + Command/AddUnused.hs | 43 + Command/AddUrl.hs | 610 ++ Command/Adjust.hs | 63 + Command/Assist.hs | 42 + Command/Assistant.hs | 140 + Command/Benchmark.hs | 58 + Command/CalcKey.hs | 35 + Command/CheckPresentKey.hs | 84 + Command/Config.hs | 216 + Command/ConfigList.hs | 53 + Command/ConfigRemote.hs | 64 + Command/ContentLocation.hs | 32 + Command/Copy.hs | 97 + Command/Dead.hs | 44 + Command/Describe.hs | 36 + Command/DiffDriver.hs | 149 + Command/Direct.hs | 21 + Command/Drop.hs | 259 + Command/DropKey.hs | 59 + Command/DropUnused.hs | 82 + Command/EnableRemote.hs | 159 + Command/EnableTor.hs | 152 + Command/ExamineKey.hs | 83 + Command/Expire.hs | 117 + Command/Export.hs | 554 + Command/FilterBranch.hs | 195 + Command/FilterProcess.hs | 89 + Command/Find.hs | 128 + Command/FindKeys.hs | 49 + Command/FindRef.hs | 27 + Command/Fix.hs | 106 + Command/Forget.hs | 59 + Command/FromKey.hs | 142 + Command/Fsck.hs | 756 ++ Command/FuzzTest.hs | 277 + Command/GCryptSetup.hs | 39 + Command/Get.hs | 122 + Command/Group.hs | 46 + Command/GroupWanted.hs | 32 + Command/Help.hs | 71 + Command/Import.hs | 403 + Command/ImportFeed.hs | 655 ++ Command/InAnnex.hs | 29 + Command/Indirect.hs | 21 + Command/Info.hs | 829 ++ Command/Init.hs | 90 + Command/InitRemote.hs | 171 + Command/Inprogress.hs | 64 + Command/List.hs | 109 + Command/Lock.hs | 104 + Command/Log.hs | 529 + Command/LookupKey.hs | 62 + Command/Map.hs | 289 + Command/MatchExpression.hs | 98 + Command/Merge.hs | 68 + Command/MetaData.hs | 183 + Command/Migrate.hs | 207 + Command/MinCopies.hs | 39 + Command/Mirror.hs | 90 + Command/Move.hs | 600 ++ Command/Multicast.hs | 256 + Command/NotifyChanges.hs | 44 + Command/NumCopies.hs | 53 + Command/OldKeys.hs | 104 + Command/P2P.hs | 314 + Command/P2PStdIO.hs | 50 + Command/PostReceive.hs | 58 + Command/PreCommit.hs | 88 + Command/Proxy.hs | 23 + Command/Pull.hs | 17 + Command/Push.hs | 17 + Command/ReKey.hs | 154 + Command/ReadPresentKey.hs | 31 + Command/RecvKey.hs | 42 + Command/RegisterUrl.hs | 90 + Command/Reinit.hs | 41 + Command/Reinject.hs | 137 + Command/RemoteDaemon.hs | 38 + Command/RenameRemote.hs | 59 + Command/Repair.hs | 87 + Command/Required.hs | 17 + Command/ReregisterUrl.hs | 79 + Command/ResolveMerge.hs | 41 + Command/Restage.hs | 25 + Command/RmUrl.hs | 68 + Command/Satisfy.hs | 17 + Command/Schedule.hs | 53 + Command/Semitrust.hs | 21 + Command/SendKey.hs | 64 + Command/SetKey.hs | 52 + Command/SetPresentKey.hs | 58 + Command/Smudge.hs | 335 + Command/Status.hs | 71 + Command/Sync.hs | 1160 +++ Command/Test.hs | 29 + Command/TestRemote.hs | 460 + Command/TransferKey.hs | 76 + Command/TransferKeys.hs | 142 + Command/Transferrer.hs | 139 + Command/Trust.hs | 54 + Command/Unannex.hs | 103 + Command/Undo.hs | 90 + Command/Ungroup.hs | 35 + Command/Uninit.hs | 177 + Command/Unlock.hs | 72 + Command/UnregisterUrl.hs | 38 + Command/Untrust.hs | 20 + Command/Unused.hs | 345 + Command/Upgrade.hs | 51 + Command/VAdd.hs | 40 + Command/VCycle.hs | 42 + Command/VFilter.hs | 31 + Command/VPop.hs | 53 + Command/Version.hs | 83 + Command/Vicfg.hs | 348 + Command/View.hs | 133 + Command/Wanted.hs | 59 + Command/Watch.hs | 35 + Command/WebApp.hs | 252 + Command/WhereUsed.hs | 170 + Command/Whereis.hs | 167 + Common.hs | 36 + Config.hs | 101 + Config/Cost.hs | 82 + Config/DynamicConfig.hs | 47 + Config/Files.hs | 36 + Config/Files/AutoStart.hs | 49 + Config/GitConfig.hs | 41 + Config/Smudge.hs | 82 + Creds.hs | 241 + Crypto.hs | 306 + Database/Benchmark.hs | 120 + Database/ContentIdentifier.hs | 194 + Database/Export.hs | 330 + Database/Fsck.hs | 111 + Database/Handle.hs | 338 + Database/ImportFeed.hs | 211 + Database/Init.hs | 64 + Database/Keys.hs | 517 + Database/Keys/Handle.hs | 69 + Database/Keys/SQL.hs | 160 + Database/Keys/Tables.hs | 38 + Database/Queue.hs | 113 + Database/RawFilePath.hs | 95 + Database/Types.hs | 131 + Database/Utility.hs | 27 + Git.hs | 185 + Git/AutoCorrect.hs | 73 + Git/Branch.hs | 270 + Git/BuildVersion.hs | 21 + Git/CatFile.hs | 422 + Git/CheckAttr.hs | 101 + Git/CheckIgnore.hs | 71 + Git/Command.hs | 149 + Git/Command/Batch.hs | 19 + Git/Config.hs | 341 + Git/ConfigTypes.hs | 53 + Git/Construct.hs | 294 + Git/Credential.hs | 126 + Git/CurrentRepo.hs | 96 + Git/DiffTree.hs | 138 + Git/DiffTreeItem.hs | 25 + Git/Env.hs | 52 + Git/FileMode.hs | 21 + Git/FilePath.hs | 96 + Git/FilterProcess.hs | 170 + Git/Fsck.hs | 172 + Git/GCrypt.hs | 133 + Git/HashObject.hs | 98 + Git/History.hs | 112 + Git/Hook.hs | 115 + Git/Index.hs | 64 + Git/LockFile.hs | 80 + Git/Log.hs | 115 + Git/LsFiles.hs | 376 + Git/LsTree.hs | 155 + Git/Merge.hs | 78 + Git/Objects.hs | 55 + Git/PktLine.hs | 154 + Git/Queue.hs | 267 + Git/Quote.hs | 122 + Git/Ref.hs | 220 + Git/RefLog.hs | 33 + Git/Remote.hs | 138 + Git/Remote/Remove.hs | 22 + Git/Repair.hs | 657 ++ Git/Sha.hs | 74 + Git/Ssh.hs | 72 + Git/Status.hs | 79 + Git/Tree.hs | 465 + Git/Types.hs | 199 + Git/UnionMerge.hs | 116 + Git/UpdateIndex.hs | 169 + Git/Url.hs | 72 + Git/Version.hs | 32 + Key.hs | 108 + Limit.hs | 676 ++ Limit/Wanted.hs | 55 + Logs.hs | 291 + Logs/Activity.hs | 61 + Logs/AdjustedBranchUpdate.hs | 84 + Logs/Chunk.hs | 57 + Logs/Chunk/Pure.hs | 62 + Logs/Config.hs | 73 + Logs/ContentIdentifier.hs | 54 + Logs/ContentIdentifier/Pure.hs | 75 + Logs/Difference.hs | 42 + Logs/Difference/Pure.hs | 27 + Logs/EquivilantKeys.hs | 31 + Logs/Export.hs | 140 + Logs/Export/Pure.hs | 119 + Logs/File.hs | 192 + Logs/FsckResults.hs | 63 + Logs/Group.hs | 99 + Logs/Import.hs | 37 + Logs/Line.hs | 38 + Logs/Location.hs | 224 + Logs/MapLog.hs | 128 + Logs/MetaData.hs | 164 + Logs/MetaData/Pure.hs | 111 + Logs/Migrate.hs | 203 + Logs/Multicast.hs | 43 + Logs/NumCopies.hs | 66 + Logs/PreferredContent.hs | 206 + Logs/PreferredContent/Raw.hs | 84 + Logs/Presence.hs | 86 + Logs/Presence/Pure.hs | 144 + Logs/Remote.hs | 56 + Logs/Remote/Pure.hs | 108 + Logs/RemoteState.hs | 49 + Logs/Restage.hs | 96 + Logs/Schedule.hs | 74 + Logs/SingleValue.hs | 42 + Logs/SingleValue/Pure.hs | 60 + Logs/Smudge.hs | 46 + Logs/Transfer.hs | 343 + Logs/Transitions.hs | 112 + Logs/Trust.hs | 86 + Logs/Trust/Basic.hs | 36 + Logs/Trust/Pure.hs | 52 + Logs/UUID.hs | 72 + Logs/UUIDBased.hs | 94 + Logs/Unused.hs | 112 + Logs/Upgrade.hs | 53 + Logs/View.hs | 160 + Logs/Web.hs | 139 + Makefile | 239 + Messages.hs | 366 + Messages/Concurrent.hs | 138 + Messages/Internal.hs | 118 + Messages/JSON.hs | 256 + Messages/Progress.hs | 225 + Messages/Serialized.hs | 111 + NEWS | 232 + P2P/Address.hs | 98 + P2P/Annex.hs | 269 + P2P/Auth.hs | 66 + P2P/IO.hs | 394 + P2P/Protocol.hs | 623 ++ README | 7 + Remote.hs | 447 + Remote/Adb.hs | 496 + Remote/BitTorrent.hs | 416 + Remote/Borg.hs | 418 + Remote/Bup.hs | 343 + Remote/Ddar.hs | 239 + Remote/Directory.hs | 604 ++ Remote/Directory/LegacyChunked.hs | 126 + Remote/External.hs | 929 ++ Remote/External/AsyncExtension.hs | 132 + Remote/External/Types.hs | 486 + Remote/GCrypt.hs | 529 + Remote/Git.hs | 771 ++ Remote/GitLFS.hs | 549 + Remote/Glacier.hs | 367 + Remote/Helper/AWS.hs | 86 + Remote/Helper/Chunked.hs | 580 ++ Remote/Helper/Chunked/Legacy.hs | 121 + Remote/Helper/Encryptable.hs | 322 + Remote/Helper/ExportImport.hs | 389 + Remote/Helper/Git.hs | 68 + Remote/Helper/Hooks.hs | 98 + Remote/Helper/Http.hs | 93 + Remote/Helper/Messages.hs | 32 + Remote/Helper/P2P.hs | 80 + Remote/Helper/Path.hs | 19 + Remote/Helper/ReadOnly.hs | 75 + Remote/Helper/Special.hs | 265 + Remote/Helper/Ssh.hs | 327 + Remote/Helper/ThirdPartyPopulated.hs | 85 + Remote/Hook.hs | 183 + Remote/HttpAlso.hs | 232 + Remote/List.hs | 119 + Remote/List/Util.hs | 24 + Remote/P2P.hs | 173 + Remote/Rclone.hs | 31 + Remote/Rsync.hs | 414 + Remote/Rsync/RsyncUrl.hs | 53 + Remote/S3.hs | 1383 +++ Remote/Tahoe.hs | 310 + Remote/Web.hs | 273 + Remote/WebDAV.hs | 540 + Remote/WebDAV/DavLocation.hs | 92 + RemoteDaemon/Common.hs | 71 + RemoteDaemon/Core.hs | 178 + RemoteDaemon/Transport.hs | 30 + RemoteDaemon/Transport/GCrypt.hs | 28 + RemoteDaemon/Transport/Ssh.hs | 88 + RemoteDaemon/Transport/Ssh/Types.hs | 32 + RemoteDaemon/Transport/Tor.hs | 206 + RemoteDaemon/Types.hs | 112 + Setup.hs | 13 + Test.hs | 2119 ++++ Test/Framework.hs | 868 ++ Types.hs | 31 + Types/ActionItem.hs | 115 + Types/AdjustedBranch.hs | 64 + Types/Availability.hs | 11 + Types/Backend.hs | 49 + Types/Benchmark.hs | 26 + Types/BranchState.hs | 42 + Types/CatFileHandles.hs | 38 + Types/CleanupActions.hs | 27 + Types/Command.hs | 145 + Types/Concurrency.hs | 25 + Types/Creds.hs | 14 + Types/Crypto.hs | 77 + Types/DeferredParse.hs | 57 + Types/DesktopNotify.hs | 31 + Types/Difference.hs | 136 + Types/Direction.hs | 25 + Types/Distribution.hs | 80 + Types/Export.hs | 66 + Types/FileMatcher.hs | 108 + Types/GitConfig.hs | 525 + Types/Group.hs | 38 + Types/Import.hs | 105 + Types/IndexFiles.hs | 11 + Types/Key.hs | 356 + Types/KeySource.hs | 30 + Types/Link.hs | 13 + Types/LockCache.hs | 18 + Types/Messages.hs | 92 + Types/MetaData.hs | 375 + Types/Mime.hs | 12 + Types/NumCopies.hs | 200 + Types/ProposedAccepted.hs | 38 + Types/RefSpec.hs | 52 + Types/Remote.hs | 415 + Types/RemoteConfig.hs | 72 + Types/RemoteState.hs | 19 + Types/RepoVersion.hs | 11 + Types/ScheduledActivity.hs | 68 + Types/StallDetection.hs | 58 + Types/StandardGroups.hs | 109 + Types/StoreRetrieve.hs | 52 + Types/Test.hs | 26 + Types/Transfer.hs | 99 + Types/Transferrer.hs | 162 + Types/TransferrerPool.hs | 59 + Types/Transitions.hs | 19 + Types/TrustLevel.hs | 51 + Types/UUID.hs | 109 + Types/Upgrade.hs | 10 + Types/UrlContents.hs | 20 + Types/VectorClock.hs | 31 + Types/View.hs | 69 + Types/WorkerPool.hs | 166 + Upgrade.hs | 139 + Upgrade/V0.hs | 58 + Upgrade/V1.hs | 260 + Upgrade/V2.hs | 150 + Upgrade/V3.hs | 12 + Upgrade/V4.hs | 16 + Upgrade/V5.hs | 170 + Upgrade/V5/Direct.hs | 144 + Upgrade/V6.hs | 24 + Upgrade/V7.hs | 139 + Upgrade/V8.hs | 23 + Upgrade/V9.hs | 107 + Utility/Aeson.hs | 126 + Utility/Android.hs | 28 + Utility/Applicative.hs | 20 + Utility/Attoparsec.hs | 21 + Utility/AuthToken.hs | 102 + Utility/Base64.hs | 25 + Utility/Batch.hs | 87 + Utility/Bloom.hs | 40 + Utility/CoProcess.hs | 103 + Utility/CopyFile.hs | 96 + Utility/DBus.hs | 91 + Utility/Daemon.hs | 194 + Utility/Data.hs | 22 + Utility/DataUnits.hs | 197 + Utility/Debug.hs | 102 + Utility/DebugLocks.hs | 43 + Utility/DirWatcher.hs | 165 + Utility/DirWatcher/FSEvents.hs | 97 + Utility/DirWatcher/INotify.hs | 205 + Utility/DirWatcher/Kqueue.hs | 269 + Utility/DirWatcher/Types.hs | 28 + Utility/DirWatcher/Win32Notify.hs | 67 + Utility/Directory.hs | 129 + Utility/Directory/Create.hs | 105 + Utility/Directory/Stream.hs | 119 + Utility/DiskFree.hs | 24 + Utility/Dot.hs | 75 + Utility/DottedVersion.hs | 45 + Utility/Env.hs | 67 + Utility/Env/Basic.hs | 25 + Utility/Env/Set.hs | 49 + Utility/Exception.hs | 120 + Utility/FileMode.hs | 187 + Utility/FileSize.hs | 51 + Utility/FileSystemEncoding.hs | 150 + Utility/Format.hs | 242 + Utility/FreeDesktop.hs | 147 + Utility/Glob.hs | 81 + Utility/Gpg.hs | 484 + Utility/Hash.hs | 353 + Utility/HtmlDetect.hs | 67 + Utility/HumanNumber.hs | 25 + Utility/HumanTime.hs | 106 + Utility/IPAddress.hs | 143 + Utility/InodeCache.hs | 310 + Utility/LinuxMkLibs.hs | 100 + Utility/LockFile.hs | 23 + Utility/LockFile/LockStatus.hs | 13 + Utility/LockFile/PidLock.hs | 333 + Utility/LockFile/Posix.hs | 128 + Utility/LockFile/Windows.hs | 91 + Utility/LockPool.hs | 34 + Utility/LockPool/LockHandle.hs | 92 + Utility/LockPool/PidLock.hs | 159 + Utility/LockPool/Posix.hs | 75 + Utility/LockPool/STM.hs | 179 + Utility/LockPool/Windows.hs | 48 + Utility/LogFile.hs | 69 + Utility/Lsof.hs | 113 + Utility/MD5.hs | 24 + Utility/MagicWormhole.hs | 177 + Utility/Matcher.hs | 342 + Utility/Metered.hs | 546 + Utility/Misc.hs | 147 + Utility/Monad.hs | 91 + Utility/Mounts.hs | 21 + Utility/MoveFile.hs | 83 + Utility/Network.hs | 24 + Utility/NotificationBroadcaster.hs | 96 + Utility/OSX.hs | 51 + Utility/OpenFd.hs | 27 + Utility/OptParse.hs | 49 + Utility/PID.hs | 30 + Utility/PartialPrelude.hs | 79 + Utility/Path.hs | 279 + Utility/Path/AbsRel.hs | 86 + Utility/Path/Max.hs | 38 + Utility/Path/Tests.hs | 81 + Utility/Path/Windows.hs | 47 + Utility/Percentage.hs | 33 + Utility/Process.hs | 325 + Utility/Process/Shim.hs | 3 + Utility/Process/Transcript.hs | 97 + Utility/QuickCheck.hs | 89 + Utility/RawFilePath.hs | 125 + Utility/ResourcePool.hs | 94 + Utility/Rsync.hs | 188 + Utility/SafeCommand.hs | 113 + Utility/SafeOutput.hs | 36 + Utility/Scheduled.hs | 362 + Utility/Scheduled/QuickCheck.hs | 51 + Utility/Shell.hs | 58 + Utility/ShellEscape.hs | 72 + Utility/SimpleProtocol.hs | 151 + Utility/Split.hs | 39 + Utility/SshConfig.hs | 164 + Utility/SshHost.hs | 29 + Utility/StatelessOpenPGP.hs | 207 + Utility/Su.hs | 122 + Utility/SystemDirectory.hs | 16 + Utility/TList.hs | 103 + Utility/Tense.hs | 60 + Utility/Terminal.hs | 44 + Utility/ThreadLock.hs | 23 + Utility/ThreadScheduler.hs | 67 + Utility/TimeStamp.hs | 72 + Utility/Tmp.hs | 116 + Utility/Tmp/Dir.hs | 72 + Utility/Tor.hs | 196 + Utility/Touch.hs | 45 + Utility/Tuple.hs | 21 + Utility/Url.hs | 743 ++ Utility/Url/Parse.hs | 64 + Utility/UserInfo.hs | 74 + Utility/Verifiable.hs | 46 + Utility/WebApp.hs | 204 + Utility/Yesod.hs | 38 + Utility/libkqueue.c | 74 + Utility/libkqueue.h | 3 + bash-completion.bash | 44 + debian/NEWS | 1 + debian/changelog | 1 + debian/compat | 1 + debian/control | 149 + debian/copyright | 1 + debian/create-standalone-changelog | 17 + debian/doc-base | 9 + debian/patches/series.standalone-build | 1 + debian/patches/standalone-build | 76 + debian/rules | 44 + debian/source/format | 1 + debian/tests/basics | 4 + debian/tests/control | 4 + doc/Android.mdwn | 77 + ..._37aa87a451d4390ed367402eec740855._comment | 12 + ..._7f0caccd085a541b117c8583133e94dd._comment | 10 + ..._ff03ae378da71c6637959779139ecb12._comment | 11 + ..._c7591d06fc444a4462267b000be8d688._comment | 9 + ..._9118997c7e892ce163c33a0de963fa11._comment | 17 + ..._e9559029d8f2c482a482f7343ffa99a4._comment | 22 + doc/android/DCIM.png | Bin 0 -> 95786 bytes doc/android/appinstalled.png | Bin 0 -> 16805 bytes doc/android/webapp.png | Bin 0 -> 64097 bytes doc/assistant.mdwn | 38 + doc/assistant/addsshserver.png | Bin 0 -> 31740 bytes doc/assistant/archival_walkthrough.mdwn | 32 + doc/assistant/brokenrepositoryalert.png | Bin 0 -> 5806 bytes doc/assistant/buddylist.png | Bin 0 -> 4347 bytes doc/assistant/cloudnudge.png | Bin 0 -> 7332 bytes doc/assistant/combinerepos.png | Bin 0 -> 10677 bytes ..._f2c4857b7b000e005f0c19279db14eaf._comment | 8 + ..._befa1f48e5a43a7965060491430a6bc4._comment | 9 + ..._9bd3b532a5c026a1d664c898f8e335e6._comment | 8 + ..._c546a24459ca29025f00e424353c40d2._comment | 8 + ..._d17de359cdd46659170d373cd09c0979._comment | 8 + ..._70193bbaa5d60b829d7636748c641104._comment | 8 + ..._831a529c92951f70a27721210204e46b._comment | 7 + doc/assistant/connection.png | Bin 0 -> 3181 bytes doc/assistant/controlmenu.png | Bin 0 -> 8863 bytes doc/assistant/crashrecovery.png | Bin 0 -> 6594 bytes doc/assistant/dashboard.png | Bin 0 -> 41061 bytes doc/assistant/deleterepository.png | Bin 0 -> 22780 bytes doc/assistant/downloadnotification.png | Bin 0 -> 4513 bytes doc/assistant/downloadupgrade.png | Bin 0 -> 9071 bytes doc/assistant/encryptdrive.png | Bin 0 -> 42725 bytes doc/assistant/example.png | Bin 0 -> 110994 bytes doc/assistant/fsckconfig.png | Bin 0 -> 59050 bytes doc/assistant/genkey.png | Bin 0 -> 27854 bytes doc/assistant/iaitem.png | Bin 0 -> 34868 bytes doc/assistant/inotify_max_limit_alert.png | Bin 0 -> 12583 bytes doc/assistant/konquerormenu.png | Bin 0 -> 27159 bytes doc/assistant/local_pairing_walkthrough.mdwn | 90 + .../addrepository.png | Bin 0 -> 2259 bytes ..._b33deed054d3aa8cfa6c9e3958643f16._comment | 8 + ..._39f1162b4d43b61e957e7497df4b9e2b._comment | 8 + ..._588869692b290483f58f3a7aa2bfb55f._comment | 17 + ..._f6bf82c263fefe38701709d9dbd974cc._comment | 10 + ..._bada601ea4b7104f162a3e00def4be2b._comment | 19 + ..._01ba0f9bfa0ed066c4b73d2d6028eecc._comment | 8 + ..._17d44229e4fa46c50815672b96a9735a._comment | 10 + ..._b9d4c29cf2cca0427808df6af08fb789._comment | 8 + ..._bf313e490076a4676a632e3ec6129189._comment | 9 + .../local_pairing_walkthrough/pairing.png | Bin 0 -> 6771 bytes .../local_pairing_walkthrough/pairrequest.png | Bin 0 -> 5383 bytes .../local_pairing_walkthrough/secret.png | Bin 0 -> 5132 bytes .../local_pairing_walkthrough/secretempty.png | Bin 0 -> 9575 bytes doc/assistant/logs.png | Bin 0 -> 33631 bytes doc/assistant/makerepo.png | Bin 0 -> 32061 bytes doc/assistant/menu.png | Bin 0 -> 22921 bytes doc/assistant/nautilusmenu.png | Bin 0 -> 59867 bytes doc/assistant/osx-app.png | Bin 0 -> 2604 bytes doc/assistant/preferences.png | Bin 0 -> 22815 bytes doc/assistant/quickstart.mdwn | 30 + doc/assistant/release_notes.mdwn | 422 + ..._bd8f376c9d0c1d5ed07fb013907a60ee._comment | 14 + ..._75e0774ad042717fbd059a8a9ec2db1e._comment | 12 + ..._b3bfd8e547e20c51f7c32c6c9424e936._comment | 10 + ..._c6caa2b521b456bb4ce594d64919cffe._comment | 8 + ..._e9faf88a8eeb9aa8714c8c0514792815._comment | 13 + ..._53c2b479dbb53236000b4b3caad8ed04._comment | 13 + doc/assistant/remote_sharing_walkthrough.mdwn | 12 + doc/assistant/repairrepository.png | Bin 0 -> 31791 bytes doc/assistant/repogroups.png | Bin 0 -> 15636 bytes doc/assistant/repoinfo.png | Bin 0 -> 7603 bytes doc/assistant/repositories.png | Bin 0 -> 63405 bytes doc/assistant/rsync.net.encryption.png | Bin 0 -> 40504 bytes doc/assistant/rsync.net.png | Bin 0 -> 61465 bytes doc/assistant/running.png | Bin 0 -> 24664 bytes .../share_with_a_friend_walkthrough.mdwn | 40 + .../enabletor.png | Bin 0 -> 39694 bytes .../pairing.png | Bin 0 -> 6892 bytes .../wormholepairing.png | Bin 0 -> 59760 bytes doc/assistant/thanks.mdwn | 1 + doc/assistant/thumbnail.png | Bin 0 -> 3491 bytes doc/assistant/unused.png | Bin 0 -> 49957 bytes doc/assistant/upgradecomplete.png | Bin 0 -> 4817 bytes doc/assistant/xmpp.png | Bin 0 -> 27753 bytes doc/assistant/xmppnudge.png | Bin 0 -> 6156 bytes doc/assistant/xmpppairingend.png | Bin 0 -> 34379 bytes doc/automatic_conflict_resolution.mdwn | 25 + ..._307898855f91a2a189d4fa5eae62cce1._comment | 10 + ..._0a8ea42764dde1a33d2112197b961c51._comment | 8 + ..._5c587c6633cae1c8547ca970d55ee97e._comment | 8 + ..._80539e11e36a0b64cee83b6b373bd843._comment | 17 + ..._00ac9e4a47ce9a886dbf573480f151bd._comment | 10 + ..._8a0860fee88f5954918305f055a39d8d._comment | 10 + ..._3d2250cc26036b8532faa980065e20d0._comment | 23 + ..._ef474c258ce8e0ebc6485c1366ae6315._comment | 8 + doc/backends.mdwn | 115 + ..._920cd139dfec8adb1089f5acf26de4d2._comment | 8 + ..._f0f6316bbdc971a9ab157de9bbb9f74c._comment | 14 + ..._da76dff5fe712318d7d4313f1d827883._comment | 10 + ..._578423935bc71cdbdc23c3db06d1e870._comment | 8 + ..._57154dcd1041a33f220f9105b709be89._comment | 8 + ..._b3445fd1f379346c642a27211c6c798b._comment | 14 + ..._c68dfaeee2ef18f420f7e11ff5f604b9._comment | 15 + ..._557a622b3304eb86fed52896e0b6cbda._comment | 7 + ..._784b29b086503a2b4913558350526ee1._comment | 12 + ..._cfcaeea6fdded241f5d36ef251ef8010._comment | 12 + ..._375bb1fb5973e8fa67b763f2dd6e404b._comment | 13 + ..._29e500adf7e8614a938b3b714c9bd112._comment | 36 + ..._7f9cc5f966b28b7461e8ec42ceeb7165._comment | 9 + ..._be75c669ed8e127de8b6364961a5c0cb._comment | 9 + ..._8c8b08d7e6409756da4f9f3b21d5ad01._comment | 12 + ..._f90b8eeae8d150eca6a91416f20eb223._comment | 10 + ..._f6a697ac069ab018ccacf8f16b09bc7e._comment | 10 + ..._9e9e0f3631c60b0cdcaa9c6dd4ae0d4e._comment | 8 + ..._c311551741a671bcb1f32b80431c1d66._comment | 17 + ..._44e8d93b1f0a88c36543438d6e33d702._comment | 9 + ..._9e14c32713b5607b245972b400286a45._comment | 24 + ..._1f2626eca9004b31a0b7fc1a0df8027b._comment | 24 + ..._bea2a3f4f673e6e9d5ee99cf10d39460._comment | 12 + ..._32df8ec41dd8a6516b88b1871c998eb9._comment | 10 + ..._b0a375dcd0932aa380ce01d693462f5e._comment | 14 + ..._4c5f9c75cbb8a546e8325b206369aba1._comment | 10 + ..._3782e7561607c8ccf1741bd039c2c648._comment | 7 + ..._8ac9d37cc2a7b0b361cf686fe27192dd._comment | 9 + ..._fdcbf8727fdefb9942a54689234b9698._comment | 12 + ..._46591a3ba888fb686b1b319b80ca2c22._comment | 9 + ..._2210c7ff2d5812fb3b778ac172291656._comment | 8 + ..._82f239b58680a2681bd8074c7ef9584d._comment | 8 + ..._4aa8cfaec1090f79fed530720e4ddad4._comment | 18 + ..._c40d2c2c929ad3239ee5d529e307c746._comment | 8 + ..._5bef7f76f5e5b73a8e404fe6172b4368._comment | 12 + doc/bare_repositories.mdwn | 53 + ..._148e1da70d37d311634a0309a4ff8dcd._comment | 22 + ..._c88216da0588562c851c2ceabbfebc0a._comment | 28 + ..._26ba93bddb0cd1bb4e1799311f3ca750._comment | 11 + ..._7cf6103709a7a2710686681a6f406214._comment | 8 + ..._6328134497c0de6a088087fc9cb0e59e._comment | 31 + ..._bf227861ec3cb2ea474c143218c68133._comment | 12 + ..._9e065a2d8aaf7371ab7c0bb4f0c724b0._comment | 13 + ..._d4dff0d6265be941af9f66ba09f36ebe._comment | 12 + doc/bugs.mdwn | 11 + ...-dir_and_--work-tree_separation_issue.mdwn | 99 + ..._fa97996b85c0f949bbd720204db8ed46._comment | 61 + ...cannot_probe_for_untrusted_remote_key.mdwn | 26 + ..._e35bef8fb0b9a40938022c43c87df597._comment | 15 + ..._7z_or_tar_archive_builds_for_windows.mdwn | 5 + ..._70480ffd417788f18cd75a9b625ecf3b._comment | 19 + ..._afa6a131999feda67876859cd85ebcfc._comment | 15 + ...st_--unlock_not_using_--reflink__63__.mdwn | 20 + ..._c42743828ddc62f7df7f612c713ee309._comment | 18 + doc/bugs/Always_identical_UUIDs.mdwn | 89 + ..._1223fe5e635d771848d7054f0492920f._comment | 15 + ..._6c44232cac847f6160f5bec7c8f1434b._comment | 10 + ..._cdb2eec514bcf125b7f79c7be5ed810a._comment | 14 + ...ndroid__44___unable_to_start_browser_.mdwn | 24 + ..._1fc9d5168fec0b277b5ab5321c07385f._comment | 14 + ..._8db1f505c02fd6d4e8acc1b6bbded03f._comment | 10 + ..._93e260d1cb9de25fe4e2a6a973f05da6._comment | 10 + ...everal_error_messages___47___warnings.mdwn | 38 + ..._85da61d3dfb528fef17366effe123ff5._comment | 16 + ..._97ddaba23e91a903f69cf00931627444._comment | 21 + ..._b4ea7ff7deb9626a02dfd0eb459f22a2._comment | 12 + ..._5edddd7e90b8f11c52a44abfb891ce25._comment | 20 + ..._b38b675a2862d527fad28b7477f7ddde._comment | 8 + ...no_such_protocol_name__58___tcp__41__.mdwn | 34 + ..._be30193f501c530bd99e97992a9c08ad._comment | 13 + ...IM__47__Camera_not_being_configurable.mdwn | 16 + ..._1fe5f8c68a430b2436649cf4ba8f4987._comment | 10 + ..._files_with_utf-8_characters_in_names.mdwn | 36 + ..._bcc3ce19cf26731057a7f3189fcbae19._comment | 10 + ...ux_install_fails_with_Bad_system_call.mdwn | 16 + ...unable_to_use_external_special_remote.mdwn | 34 + ..._17b13329db6fb4788240428ed1e2b212._comment | 13 + ..._c235675c07faaecf8e7df2d77fdac3ea._comment | 8 + ...__40__git_add__41___to_git-annex_file.mdwn | 57 + ...and_only_SHA_instead_of_file_content_.mdwn | 307 + ..._f88d08035baf75efa1dbbddc296b591a._comment | 35 + ..._c1b86731f0e2fe8ce70931fe4a0d1656._comment | 40 + ...shes_with_handle_issues_-_never_works.mdwn | 51 + ...en_merging___40__another_report__41__.mdwn | 37 + ..._27d96b639bc386132b9e74170532d749._comment | 9 + ..._b9a39f172115fc39fee21c8987843faa._comment | 26 + ..._324213fb62c67dc9565f0e812500e046._comment | 8 + ..._271c48d2cf4b09c27cf47ecba7fe1a64._comment | 8 + ...stant_does_not_update_adjusted_branch.mdwn | 90 + ...t_doesn__39__t_sync_directory_remotes.mdwn | 34 + ...m_remote_repos_that_it_shouldn__39__t.mdwn | 39 + ..._5e7d5b0b996a171c641fa560a613d319._comment | 19 + ..._2015dfc648d26d6dfabe6ad4f4754034._comment | 13 + ..._8f394437982cebeaf878f5b3871afaf3._comment | 18 + ..._ccd108a53a9fb747539e269becfb3e05._comment | 9 + ..._7ee571496c6d7cd57a206e6356dc2be3._comment | 166 + ..._6c88b218b8186242a6106fc3e7b3edf5._comment | 29 + ..._fbbf9d1a63fc61a5fd288fd308b24ca1._comment | 13 + ..._fe2498f60b02104a8a044c79cb5bea63._comment | 66 + ..._c46cdba62da4f5ccfdc42dfc33aec600._comment | 34 + ..._created_155_semitrusted_repositories.mdwn | 191 + ..._c5508b476fc48e7a0002b6ecb8d5eac0._comment | 18 + ..._cb49edcc8a13928c171a2acdde32dce9._comment | 12 + ..._a86c8347526e7b0a6f7633f3aea528bb._comment | 8 + ..._a26c2b49ee7746be06f4772aa838d5aa._comment | 21 + ..._b958da97a69091d283918e0d5a658da5._comment | 26 + ..._169b24b34cce3f5c8446c2150beb6827._comment | 8 + ..._6acd6f38297772a07d8d5fb999bd2eaa._comment | 183 + ..._6a4118e5c5fbe5e84d27094ac72b741b._comment | 22 + ..._04daa20d5d7c74bb34ec48e752ed9fe8._comment | 8 + ..._11af8ab2587e6eeb671051ba8191995b._comment | 11 + ..._26236cdc2bce532017854791bcd727d1._comment | 8 + ..._3c532dd5b8a01ecdeda1300b49aba675._comment | 12 + ..._119142c5ebc499f0ee0926dbca265308._comment | 10 + ..._0651071ee1654eeaa9aa9369873fdf6a._comment | 8 + ...er_and_over_and_using_a_lot_of_memory.mdwn | 520 + ..._edb2428552cf98bfb1735c2d6daf2b20._comment | 8 + ..._ac8c39e362e6c806b9d68befc0199ccd._comment | 10 + ..._b2941bf7901a1b2237b7210c8f0af2a5._comment | 22 + ..._1429ca784a03bc424b3537cbe0449421._comment | 23 + ..._f9e65cf5598b4b14eeee1f41f46d4084._comment | 12 + ..._044ecac2d2e670e1ef69809c944093d1._comment | 19 + ..._6f4f51e1583bed5e7e601e4f30f4207b._comment | 8 + ..._683a0a3d4caea0ee625e41ae8a6c7c06._comment | 81 + ..._03dd76b01f46a7cc66eddac3e054c8ad._comment | 8 + ..._5f4444f03cbebaa44628288095383679._comment | 89 + ...nt_is_stuck_with___39__fuzztest__39__.mdwn | 23 + ...tant_only_watches_one_repo_on_startup.mdwn | 29 + ..._4606e5c7159e8e9f2f12e010cbd22e6a._comment | 12 + ...t_temporary_delete_and_recommit_files.mdwn | 606 ++ ...to_repair_repository_almost_every_day.mdwn | 5 + ...repair_greatly_slows_down_the_machine.mdwn | 21 + ..._d46c6314bff75a0ae679bc2358b28c2b._comment | 8 + ..._1c2c3adfbccd2b14a7d1c4618800e735._comment | 8 + ..._a52e4ef04209d0a2449165e2b4cb9ccc._comment | 10 + ..._9f5340ab1012f335af0c246b82c1a777._comment | 16 + ..._67bfccf0934075559d439b1deafc001e._comment | 9 + ..._5fa785aa759d1a1917f2a292324fe5ec._comment | 8 + ..._9fe529034ad0115792b58d7da99c167e._comment | 8 + ..._93ed991ef2a74c18575073ca72e06185._comment | 8 + ..._4649fa11745ff668e43833209811d005._comment | 10 + ..._6138a48f0b7e8be2bb66430397afdf5a._comment | 8 + ..._3da5940bb2e9689b00239eec9a073f1c._comment | 8 + .../Bootstrap3_icons_missing_on_Android.mdwn | 7 + ..._da4e26c77376a8171493a815bdb51ff1._comment | 10 + ..._506e26de284a6429366def33b007bc0c._comment | 8 + ..._a77477951576fc657d693811f11f9975._comment | 24 + ..._c3ef67bded8ed3c511a8ea85b8bd81a5._comment | 8 + ..._97cf233d8401d642337d5fe9dd525e2b._comment | 8 + ..._4981a0a894b77e94a3bffec82b0f6e51._comment | 16 + ..._dbe960392aaa0839886381820754814a._comment | 10 + ..._cdf9621fe3e9f8eb8b7af88f779a7116._comment | 8 + ..._a2318f094b30f58fefc072807896c099._comment | 8 + ..._7c2f1d914793798708ca13b6ac3dd474._comment | 29 + ..._a24b5165590b5d58919da1003cd20c54._comment | 8 + ..._71ed14b8e5a898b1643d5e37591c2476._comment | 8 + ..._15357e33c2431080d45f7cef5f4f1209._comment | 8 + ...inks_in_directory_remote_causes_crash.mdwn | 37 + .../Button_to_cancel_conistency_checks.mdwn | 21 + ...PRESENT_could_check_file_size_as_well.mdwn | 7 + ..._7bbba896da745a8a6b69ec62bf71fc89._comment | 13 + ...perability_Win-Ux__58__..post-receive.mdwn | 64 + ..._a9501e2f347b957e7dc53a06fe59cff4._comment | 17 + ..._e4cac0d18fd6cde1084e93d0fe997f40._comment | 25 + ..._a3a702176a316d6b599eb2a149a293ad._comment | 17 + ..._82103077cde68c3b6a70dcf70c4ed837._comment | 22 + ..._c22f9e3c5e438b2cc05008bc3f91b7fc._comment | 11 + ...epo__47__.git__47__X__34___for_many_X.mdwn | 39 + ..._5d23b1f02c6a0db0b43939210c427994._comment | 8 + ..._6ede677f8113fcd6215ecd68de237f06._comment | 8 + ..._3377120e8e246f5ec74d372015590a6c._comment | 8 + ...remote_in_webapp__58___gcrypt_backend.mdwn | 15 + doc/bugs/Cannot_clone_an_annex.mdwn | 69 + ..._b40a2652361a79c6c6eab0fc21be8e46._comment | 8 + ...not_delete_remote_when_ssh_sync_fails.mdwn | 8 + ..._3c8e8fae688a9db8e18e869a187fb4eb._comment | 8 + ..._e189617c4ac23df50f02af8c517fa399._comment | 14 + ..._35a08daa2776c648d5ee010b77e72bd4._comment | 11 + ...ing_sync_to_include_content_breaks_UX.mdwn | 68 + ..._ec80bdff87c7b70e4235cd5b2ba6ed05._comment | 51 + ..._82e32aca2c23a1e27553bcd9708870b2._comment | 25 + ..._4e0746d00d8a596d878c1fe12ec68849._comment | 48 + ..._80ba2e4241372ff3ce1505900e17c22f._comment | 32 + ..._08f3c3d26d13fd44ae9c26791b90a8fc._comment | 17 + ..._38a0eafe91e05a7784dd5e305f38a8f3._comment | 18 + ..._ee529ac7b3d27f1cdc7edf5154c0da8f._comment | 12 + ..._d60adea3f0c0030a403c33c57f27abda._comment | 24 + ..._594ae4ce426c7fd9963a22def58904d8._comment | 12 + ..._bdc211b026d3b05de127f6ed5a3d19b0._comment | 21 + ..._1541a9323009b20f527501ebedc9d395._comment | 12 + ..._c06017f123f1ee34c7310f923086d09a._comment | 21 + ..._c03b45321728155eae9470cd8bb2cc93._comment | 17 + ..._bb6972e9870a68a98d90c6847228ab31._comment | 22 + ..._da9812dd37de7bba4fe2b1785bdca1ae._comment | 14 + ..._bc8154b171c460b4590d2b32401f24a2._comment | 16 + ..._20febad4aa06d5b39668a858d2b118b1._comment | 33 + ..._84d31b8fdde0f0ab0355a5d30760e90d._comment | 43 + ..._17a75fa68bf3718230d1d523b7eb0250._comment | 12 + ...om_.git_under_Windows__44___get_fails.mdwn | 292 + ..._0d619c1a4c9645a6b76619b05b3d518c._comment | 17 + ..._0bc5932c037002dac6b096f97d12584c._comment | 10 + ...es_Containing_Non_Ascii_Char_on_OS_X_.mdwn | 46 + ..._81a4647a9b51bed8c230a2a16990915d._comment | 14 + ..._f8e97dded9ba6d2305de1278025924fe._comment | 23 + ..._eb34061429cb8c7d0b155825e84b657b._comment | 35 + ..._8cf5dc85a94c60b9c88c8e8354f19772._comment | 32 + ...pace_exhaustion_from_syncing_metadata.mdwn | 26 + ..._93e3deab54b34e9ad608fd549119e221._comment | 26 + ..._9401be5e6af886edadaf3ad7ba6a071d._comment | 12 + ..._3309c51dbd251cc46a25557a0d25e946._comment | 9 + ...any_files_to_bup_remotes_is_very_slow.mdwn | 81 + ..._d81f94dfdb1b15b8bc0d9c243ef748db._comment | 15 + ..._0f5ff10d84450a6df35cb974cdb4739e._comment | 15 + ..._7150178b47a15857d5eece0fbe57a971._comment | 10 + ..._d2896b544d6d26663b532735c3924134._comment | 11 + ...nex__47__index_when_running_assistant.mdwn | 658 ++ ..._f2102da5822a35e1600d67326954e059._comment | 7 + ..._656986cdc4831a8d2f80432acaf8a884._comment | 25 + ..._fa94d1b008a6c1663e40854edcd5504d._comment | 9 + ..._5a26a33c34594ec6eb50bd675d68801a._comment | 17 + ..._81e2f37e7adbd8f24734b67a1dd209f9._comment | 7 + ..._f0999dbd00e06ab2cbf68b58527c2b9b._comment | 16 + ...eleted_and_deletes_them_elsewhere_too.mdwn | 36 + ..._80ca50f5305eda71fe32f2b0bc922c34._comment | 21 + ..._e6bc6d1c0eb8c469e9e00b37bbcc9b86._comment | 9 + ..._0d0f6b6b46d0153433fead2bbd1bbe64._comment | 12 + ..._6058a22b733cb02126286af950074ed4._comment | 10 + ..._593a49669e2fadfb91773f8c84fbb031._comment | 8 + ..._5a348c5f327f16e1192ef6bd7f2880bb._comment | 15 + ..._but_not_annex__41___controlled_files.mdwn | 102 + ..._48f15b40bf3a7cd3beb7cabd4e706337._comment | 15 + ...Could_not_read_from_remote_repository.mdwn | 28 + ..._da842a9d146bcd5c7773b58364c25597._comment | 8 + ..._82746a0cf989d884cd0fd796db092b3c._comment | 36 + ..._95d16045dc238dba19a98808de2eeedf._comment | 11 + ..._when_disabling_syncing_in_the_webapp.mdwn | 25 + ..._e25dd80370820782f9c6a877101d8703._comment | 10 + ..._4031c16362137747717e9595cb5c8a15._comment | 10 + ..._0667f39f60bdaba6670f5b8304a8a77c._comment | 12 + ...S3_does_not_check_for_presence_of_GPG.mdwn | 19 + ..._copying_files_with_running_assistant.mdwn | 26 + ..._51e7afb030dfb3052044b0fa95e08bed._comment | 8 + ..._b9cc9ae227a6dd883a2324b6d70b88ad._comment | 111 + ..._15f4fc02d574a2ed55e683dd99e9b72c._comment | 8 + ..._c16ecf8fabd0c63a7b59927fe0bb6e2c._comment | 94 + ...p_ssh_keys_after_removing_remote_repo.mdwn | 18 + ..._88fbf70eae48484988dbb433a437c717._comment | 14 + ..._read_eachother__39__s_S3_credentials.mdwn | 66 + ..._e307e5d0ec02ed76dc7c3f0894770539._comment | 28 + ...g_when_a_special_remote_fails_to_fsck.mdwn | 72 + ..._203ebe6fa1bb8d3c6e7c0b948fc7dd6b._comment | 33 + ...sitories_still_use_symlinks_sometimes.mdwn | 36 + ...rectory_remotes_with_same_mount_point.mdwn | 55 + ..._351063bf8fb7779a9a7ecd21bef8b801._comment | 9 + ..._90351193c14f4c68f9b92640dae82f13._comment | 23 + ..._6b7727db8e2487394a80fc061d76868e._comment | 9 + ..._5a4b3daa0f8a0d7f330f5a1d922d0f6a._comment | 15 + ..._fb21865b36819a54a23e1ccb7f377fa1._comment | 11 + ...ing_remote_auto-enabling_not_possible.mdwn | 65 + ..._136c0fa106347bd0474f8298fde227f5._comment | 18 + ..._f6b1d513e664d1a5ee51b90f49731eeb._comment | 10 + ..._c2c7144fa74bdc455e1bd36b594902c1._comment | 12 + ..._4f3e9f15fcc96cd98c6915ec68cc471f._comment | 14 + ..._ccb5b6960da43a93ff0b7404190c51de._comment | 33 + ..._5b6359663efb608b9a78ab17c02be9ee._comment | 18 + ..._995b88efc83f76f14ccb22bc2a6ef4bd._comment | 7 + ...name_extensions_with_more_than_4_char.mdwn | 55 + ..._ecc9ff2bca0638797f358d5ff0d9e363._comment | 8 + ...te_descriptions_cause_confusing_error.mdwn | 46 + .../Empty_files_make_git_status_slow.mdwn | 28 + ..._67662686361d345b3b82d1c80adc2452._comment | 15 + ..._39876be38934e9056e9aa2a9fcdeaedf._comment | 8 + ..._17b400bc03eb176f63009b9e01a862f4._comment | 13 + ..._d3a05649e8d7d5d62cc3e80ce0f45fe4._comment | 20 + ..._e2c9b041388685bb2ada57244c1735fd._comment | 11 + ..._d107491ed7ac97c4732dc96707defaf0._comment | 10 + .../Empty_folders_don__39__t_get_remove.mdwn | 4 + ..._9f41638299c214b2ee13f23ab41349da._comment | 10 + ..._35f59adc30fe743221f29bbfecff639b._comment | 15 + ..._ccc703f8667805ce2886719c57e76ef8._comment | 7 + ..._ssh_server_with_multiple_directories.mdwn | 19 + ..._e8affeca873c2ef73255f8f77e0ac16f._comment | 10 + .../Enabling_useConfigOnly_not_honored.mdwn | 67 + ..._4f0e4da06d8c9a9db771e593be1e2608._comment | 17 + ..._5dede8445ba1c20e9750a30fe29de0b0._comment | 11 + doc/bugs/Encoding_error_in_webapp.mdwn | 24 + ...r_needs_to_escape_spaces_in_user_name.mdwn | 18 + ..._6b289221a65a750444b1b5850df3386c._comment | 10 + doc/bugs/FTBFS_for_the_2nd_day.mdwn | 27 + ..._b7278de8f98c9fd96219281d61284461._comment | 29 + ..._05c93396766cb9ac6a596db679519718._comment | 8 + ..._0037f0e43383f32b22ee1ba2c98d78f8._comment | 15 + doc/bugs/FTBFS_on_OSX__47__Windows.mdwn | 42 + ..._04e4ec83077eec6af8ce50d6f1b2c71e._comment | 10 + doc/bugs/FTBFS_since_yesterday_on_linux.mdwn | 28 + ...ted_branch_update_after_error_in_drop.mdwn | 56 + ..._08b3eafdabe5f60ec2206584dff5d230._comment | 11 + ..._a947f8afde3d7f63fd33b0b7e5998e43._comment | 42 + ..._c8ce6c9fc35fa6ad5165ecf9a3592c9d._comment | 23 + ..._2a4de8981ced7894148ca9a68e5ef60b._comment | 15 + ..._7b989f777b211f21ca0e9ca681869bff._comment | 15 + ..._f9ef22fcfabc6445060b964f08080c76._comment | 13 + ..._f679af07b798cb4bfae75565dd46e8ed._comment | 19 + ..._c7c210961b51a87770932f40a9563622._comment | 22 + ...move__47__get_over_ssh_in_new_version.mdwn | 97 + ..._13252610f5b05251d1dcdf81f295ae7c._comment | 19 + ..._ae1807997fe2098f8534d23130039ae4._comment | 22 + ..._fcb4b6a62bcee4d2f70c58fb7f270b7a._comment | 23 + ..._f2fe8462292a4e80b5df4adeac20ee72._comment | 9 + ..._a769702d5d203eb435677bbd423857a6._comment | 10 + ..._8b18048e0ba4341ecef60787855cdac3._comment | 9 + ..._5c8ac4f42293240cacfb2edceada1a0b._comment | 9 + ...nect_to_newly_added_remote_on_Windows.mdwn | 22 + ..._on_windows___40__Access_denied__41__.mdwn | 132 + ..._fdad38ba9decc434e0d04a446f0a02e5._comment | 52 + ..._cdedb5512dc9c27a88632e963a27a389._comment | 39 + ..._to_get_small_files_over_P2P_protocol.mdwn | 120 + ..._72a8b9b6ed582dad36301cb9beece2f8._comment | 34 + ..._53970994816f1de9816e3496fdf0ef71._comment | 15 + ..._4c359c12d5c61351484dfcb2f5547222._comment | 9 + ..._1e286c1506fc542df85c6158a8ec3d1c._comment | 9 + ..._c667e4d4899925a5484c94256044f6ee._comment | 10 + ..._5ed6591954aeafe6c99ae152f4f4ad67._comment | 24 + ..._247db3d1c03b207296e97975a3554756._comment | 13 + ...om_locally_paired_annexes_when_edited.mdwn | 36 + ..._bdc97db9dc9954331e4c400baf9e5541._comment | 10 + ...rded_with_other_file__39__s_checksums.mdwn | 102 + ..._05e3e33e1ca2361546dbe08c6bd476d6._comment | 8 + ..._0735ed4187e23ddea6bd0aa408451942._comment | 8 + ..._06b7be9e651e528440a054ef43f7142f._comment | 12 + ..._bc9cf721f8087cb91954cc2435376bc2._comment | 8 + ..._8f0bbd819b95dfa97e2f4848e08a787a._comment | 10 + ..._17a0864cec6f28a0445998f3c5fc7f10._comment | 35 + ..._d480e85683f0418441f26c7d61c4af02._comment | 15 + ..._80763c1c40acdf0915134182d15e4fd8._comment | 8 + ..._7c3180616e40b49fc5ddf398d23d0201._comment | 8 + ...__41___views_on_a_crippled_filesystem.mdwn | 80 + doc/bugs/FreeBSD_patches.mdwn | 25 + ..._3473c3d4207a8387d962366dd1aa88b1._comment | 33 + ..._ba8df081ebf5cbbb5561aa48343e4fcd._comment | 16 + ...cognized_as_a_git-annex_enabled_repos.mdwn | 16 + ..._8a27545e11b3d9e4e45aea4c9a5c9af4._comment | 42 + ..._3e2f01eaaf717710a08ba092856af193._comment | 75 + ..._07460def4969896c87e8696955740fa9._comment | 75 + ..._f97de485f97d8016a5ab4e276799d230._comment | 36 + ..._cf4130cb932d3d884e605d7c6447e61e._comment | 15 + doc/bugs/GPG_passphrase_repeated_prompt.mdwn | 25 + ..._6ef1c9725befc84ad57bce196ef630ef._comment | 16 + ...hen_remote_contains_non-english_chars.mdwn | 107 + ...Get_gpg_subkey_id_used_for_encryption.mdwn | 20 + ..._2cbdc33f22d18b8ea25473d361e591eb._comment | 15 + ..._81f2725bf6cfbef43cd9253a61eb7cfa._comment | 11 + ..._efae569e57322f263f626e330c64aac5._comment | 13 + ...ex_and_Microsoft_Office_files_on_OS_X.mdwn | 28 + ..._0cf11096ceeb6cf93db5609a42a70641._comment | 41 + ...kout_fails_using_--recurse-submodules.mdwn | 83 + ..._571703fc4e1e2f4e34f54db7a7da7080._comment | 31 + ..._9fe6b56ffda6d0c77ce65786514cd79d._comment | 20 + ..._fce2467a0442f98194fa11caffa466ad._comment | 19 + ...fails_with_absolute_path_on_mavericks.mdwn | 12 + ..._2f0c74aba502533b85b922ea81ded70d._comment | 23 + doc/bugs/Git_repos_corrupt_themselves.mdwn | 109 + ..._74e6d17a1b14b2fdc7eddf4ee1895733._comment | 601 ++ ..._d1f454482feef0350a6fa61bdf7673cc._comment | 8 + ..._5a13945d6bec6fa5fac84555f7ef8e21._comment | 21 + ..._6715bc3370f115f90627cfc4b06cf0e8._comment | 20 + ..._6234b04455acc0b2b2f22a1d8c2ab475._comment | 11 + ..._586e591a1e3cc53fd0108da91492c5c2._comment | 19 + ..._7a1cdfba17f129f6bf87a71549bbaab6._comment | 10 + ..._faaa433ba8df649771469fdbcd9bb69e._comment | 52 + ..._238bbbcabd626c33acc14f930a7d536c._comment | 17 + ..._c7fbc3da4404fb33a4b0babf068dc4d3._comment | 22 + ..._f2368358a0ccdd36a551a2c833cb9c9a._comment | 13 + ..._f7d921256107773dcb294747cdc38ebd._comment | 73 + ..._cf152fccbdb281dcbeb02cb398686ac0._comment | 85 + ..._652928a8f8bd0250973f19fa28cbb029._comment | 36 + ..._315606cfa07d2c4b20a6c9ec477c83d1._comment | 13 + ..._54aed251ddb9df1c8164a25240e1533f._comment | 8 + ..._a1131917149dd07ec73367e7cbc3b3f2._comment | 8 + ..._033def91d2a30f1cee498fabbfe5d37f._comment | 8 + ...de_archive_directory_at_the_same_time.mdwn | 18 + ..._e8bb3d6a2318402b985caed08282d473._comment | 12 + ..._ead9fa75a12ef36be9a92637b144e74f._comment | 14 + .../Hard_links_not_synced_in_direct_mode.mdwn | 130 + ..._aaa781664ae0c62c4f6530cb075ed367._comment | 17 + ..._213aa10909d1fd0f20ed078a7ed93e79._comment | 8 + ..._e6b783d9aaae20c0d35e9888d878716a._comment | 10 + ..._b008ae7b1cf8685d92c9a87a7609de1e._comment | 18 + ..._949c891209713a2c0a5e66af11ed4c79._comment | 14 + ..._12379a8e89ce8505123f5b24f3dbbaca._comment | 8 + doc/bugs/Homebrew_build_broken.mdwn | 3 + ..._c30517144c98faaf592b0e8e2bcc7db4._comment | 14 + ..._d3f253a12a77fe4a354144880d0a4935._comment | 7 + ...on_Android_when_adding_RSync.net_repo.mdwn | 234 + ..._a7a613c3fa1bee42442a446366027381._comment | 8 + ..._97bf976e0e04fb27916e245eb9c7709d._comment | 13 + doc/bugs/How_to_git_union-merge__63__.mdwn | 24 + ..._58b6c9712d7c209248d9ef87bcc0e110._comment | 13 + ..._22701b82e8d53acff66ddea5bf9448bf._comment | 8 + ...rate_the_right_key_after_moving_files.mdwn | 118 + ..._bbc1e7205d7701afd405c6e62a1c0aa3._comment | 13 + ..._52a1800537f1244ad6cf417c5f25ebe0._comment | 29 + ..._414bd487619e46b25e8d9a57d9aef1f6._comment | 17 + ..._81abd2627672911ba6367effbf5c487b._comment | 9 + ..._ce0342e38a87017ad58c9a79b17d759a._comment | 26 + ...an_existing_gcrypt_repo_in_the_webapp.mdwn | 23 + ..._17814787e333d15da3ab4e57c7d31d4b._comment | 12 + doc/bugs/Incompatibility_with_git_2.37.mdwn | 55 + ..._c24657bb9d3b3072698572c4e75ccb5d._comment | 44 + ..._4d5eb77736e8512affc25e7bdd5190f1._comment | 11 + ..._889ece8b2168b20019253ab6dd5b0e48._comment | 16 + ..._95b8ea35cd10ac80e1d01b658e24d7a9._comment | 30 + ..._d0e60d224dd48d7c31adb6b250f662df._comment | 9 + ..._3bb6424838d4f8a971f3dce6d1b8dbfb._comment | 16 + ...ntent_has_changed__34___on_duplicates.mdwn | 54 + ..._b9491e9cb432ca3b8bdb08a00c89b346._comment | 37 + ..._cf9ce09377da2eae63ff41d07cb222d7._comment | 18 + ..._a99df351ed700f908b6aaf3f52d245b4._comment | 9 + ..._d370abe891d554577a9af7f959c9e3f0._comment | 47 + ..._68a3936700a02a17d0379d96880eea15._comment | 31 + ..._4d05a896fd57b55388fb21638ed02233._comment | 24 + ..._4a1248ea257c04f1afe233891a606eea._comment | 7 + ..._37eb9d35191bcfc0e7e4496f5720cbed._comment | 8 + ...n_synchronizing_between_many_machines.mdwn | 27 + ..._6d8f42446749f3e697af20626f22cf8b._comment | 8 + ..._3b4e529564488e732dd62569247b3d56._comment | 11 + ...address__62____41___not_allowed__34__.mdwn | 43 + ..._267b252368dca4803d706c70a3ef3244._comment | 29 + ...ia_the_command_brew_install_lib_magic.mdwn | 29 + ..._43614460d92cfac8a40ad2d6654926b9._comment | 9 + ...gument_saving_FreeSurfer_file_on_NTFS.mdwn | 95 + ..._181a319138cc10742bc8676d77e8a614._comment | 16 + ..._--time-limit__61__1m__39___with_pull.mdwn | 46 + ..._limit_uploads_to_an_S3_backend__63__.mdwn | 20 + ..._ef97e735ce308f7bcc03f5d9fda588bf._comment | 10 + ..._539b89de8743e435386b86119d1e982f._comment | 8 + doc/bugs/Issue_fewer_S3_GET_requests.mdwn | 9 + ..._59a6b87d01c003bf55cde4c882e1778c._comment | 18 + ..._8fdeb3352ac00a76625ec9c007e5b76a._comment | 14 + ..._6ccbb1cff7bc6b4640220d98f7ce21c3._comment | 12 + .../Issue_on_OSX_with_some_system_limits.mdwn | 27 + ..._5fc1eedb5231edc37c87a2d9b91313b9._comment | 12 + ..._b14e697c211843163285aaa8de5bf4c6._comment | 12 + ..._18ddf8b5934dd6fb1676cd6adc7d103b._comment | 19 + ..._c25a8eb369e546f65e1a72d89f43066f._comment | 12 + ..._6407a3e7aa0316cba2994bfef0e3c633._comment | 37 + ..._f01887695e8b8386e125464c6d401565._comment | 8 + ..._c7776d5b2d073e0d2ae36515185c25aa._comment | 17 + ..._easy_to_turn_git-annex_into_a_zombie.mdwn | 25 + ..._d5fba6c061fb21795021ea83070dbfa2._comment | 8 + ..._12cba707239018989e8d5b6f456fa754._comment | 10 + doc/bugs/J1_display_issue.mdwn | 13 + ...tadata_--batch_can__39__t_parse_UTF-8.mdwn | 91 + ..._1765400777911cc61eb591b76c84ae89._comment | 45 + ...40__ssh__41___fails_to_pair__47__sync.mdwn | 177 + ..._bab9cd5bdcffec3c48b9e8657cd9bbf7._comment | 14 + ..._104898dce3c67c082a9f2b36e2f45ff8._comment | 10 + ...Location_change_of_remote_DNS_ignored.mdwn | 28 + ..._449bfb3a594f99cf5e71a6e18d6d3dbc._comment | 8 + ..._b097dec73d4965f62c61003ed27e4209._comment | 9 + doc/bugs/Low_disk_space_corrupts_state.mdwn | 61 + ..._d8235498e2206c3b5284455e5c4182b9._comment | 20 + ..._0e47c63a48e10ae760754df0ce165388._comment | 17 + ...chive_folders_not_working_as_expected.mdwn | 126 + ..._c8ce2a1978fc1bfa5f31cff9f48690f6._comment | 57 + ..._cf9a679c7e6ec5cae4109e748b20b8f9._comment | 14 + ..._4026607087a9da2759f841e59aadfcdc._comment | 9 + ..._45c1e00e64f916ef8a5f9200144861eb._comment | 37 + ..._9501e259e7d813545ff9cfdac22748f6._comment | 37 + ..._6c42b7b4c53d2bd547d5ba8d2a3b4c9e._comment | 9 + ..._660bf8f60d340feca469cfd4e28b7e43._comment | 10 + ..._06c95f066ffc844b0e1e4b4c16d30da8._comment | 9 + ..._ab4b7a243f9d1dfddf1c2c2609863d99._comment | 10 + ...ot_picked_up_by_the_assistant_on_OS_X.mdwn | 24 + ..._75c14b405929a8f771a7c261dcc4b7a2._comment | 42 + ..._f52483415c623ea0649c3805728ce761._comment | 35 + ..._fd73fbeef61df106f084ac235fca904a._comment | 8 + ..._c5e9843a956984efd22bad629930f6bd._comment | 8 + ..._40__can__39__t_even_HEAD_files__41__.mdwn | 69 + ..._2a1c20b432dd839e0153827e151fbbc0._comment | 17 + ..._c227071f23a96ed9928f128e7f77e503._comment | 17 + ..._5ac676877feaa7cdb9e05d6b71b1a4c3._comment | 11 + ..._3853bebdfcb7dac647edefd6f55ba8d5._comment | 20 + .../No_viable_build_plan_for_ghc_9.2.2.mdwn | 86 + ..._8e7f9605f05880899eba7eae4e6f7ea0._comment | 13 + ..._e30befdadfd7989de2e214b8e1f6ed07._comment | 9 + ...ge_conflicts_while_on_adjusted_branch.mdwn | 74 + ..._77c241c5d61b62b1fae552145c6c94ef._comment | 12 + ...ed_files_being_annexed_and_not_stored.mdwn | 18 + ..._ef6c2dee191e80a46e348c78ba054fc2._comment | 19 + ..._6d73b11c55e7b2ed4003e1908558426d._comment | 10 + ...Assistant_will_not_automatically_drop.mdwn | 172 + ..._9a3a594f983048a9035f385101b394cf._comment | 20 + ..._7901e1211ab86429ef8bd95c72ed89f5._comment | 10 + ..._1ba89b95a028ba4a84b22dfd983049fd._comment | 16 + ..._704ef9c0ed78a00030f7d4d151ecbe5b._comment | 12 + ..._47aa5de003b409d3d2a4c58a0f08a14a._comment | 45 + ..._69781b2f00afe6150bc5997335b8af90._comment | 17 + ...ant_leaves_repo_in_inconsistent_state.mdwn | 151 + ..._0dfd9eedccb48f1f3d7939677dc96446._comment | 9 + ..._5c5e7356cae8ddf8d2c8964fb69000f5._comment | 11 + ..._1e0841d71c33fd3919310f1711b6e0b4._comment | 12 + ..._eb5b0f8259d861000510fcfd58f66617._comment | 16 + ..._4343ee35e4091fc50268f9fc611f5148._comment | 10 + ..._58___Pushed_changes_are_autocommited.mdwn | 88 + ..._ff7fc340c34297beb913e8cba5af052b._comment | 8 + ..._fb72d7dc7b56c6166c557aa03b951eb1._comment | 10 + ..._8420ed892366eb78a874eec793eaa38d._comment | 24 + ..._5def2bf7430c4cba0c6ed154e75c967b._comment | 12 + ..._72c7566677b4c2f212bddeca49262181._comment | 10 + ..._13ad56d86b5bdbaaacdad5b31347551c._comment | 12 + ..._download_new_file_after_initial_pass.mdwn | 119 + ..._3feba4ba84efb77bd4f8f46b6b4600f1._comment | 8 + ..._a33fcd088e419d8e6c459e42f21f8bbe._comment | 10 + ..._47196f7e781137751ebd1a1d7083838a._comment | 18 + ..._672d98ee06e051430f8e01faa93bb4cf._comment | 28 + ..._06fb3031b838cd443326f4ecd689b600._comment | 10 + ..._42d447400c15acf6ca031d165b2c781c._comment | 8 + ..._edd7d5d5c761ff665840f0ef7bea50c9._comment | 10 + ..._18e5334ab89efcf89ba8847436d55065._comment | 13 + ..._35b2bbdc24a7bd686527cd1839dee7d0._comment | 10 + ..._a771c6b453e6a4b3895dd69a53093440._comment | 246 + doc/bugs/OSX_case_insensitive_filesystem.mdwn | 56 + ..._2e81165ac03e1d0566c81016e7728ee6._comment | 29 + ..._4472d5db7a1cf7242077184912e32e17._comment | 10 + ..._4be758c2b70c0aadfe4fc9ecff8e4522._comment | 10 + ..._0b0c95a902718dd4e0976bf4e2cf265b._comment | 8 + ..._2123944418123c3aaf187d34df5c11e0._comment | 11 + ..._f82c803d725829722842c6d54e388719._comment | 8 + ..._45e0178ce9598d086f34a89701536eb5._comment | 43 + ..._3384bca070d84220efe166a398eed8a4._comment | 17 + ...droid_removes_files_and_creates_links.mdwn | 45 + ..._a15eb9cd1a7bcdfa4b16459ef978a019._comment | 19 + ..._1c061621f0abe435182d763cd871f405._comment | 15 + ..._package_update_from_2014-06-30__41__.mdwn | 93 + ..._7508685b6f676c72e316642b80e40ee8._comment | 10 + ..._c4dd12ea578d1f07464e1b9d68ec96cf._comment | 20 + ..._8687c1d1c44d88a8ac13208273565d6c._comment | 37 + ..._62be3dd4092b15cdf85cf9a231b2863a._comment | 8 + ..._cca4905426a3e01da6e12be855c7a418._comment | 27 + ..._ae2ca07169321c4a51b7e8e581fda5e2._comment | 72 + ..._ae5c434a9c94aa000b604095f52e3d3c._comment | 14 + ...use_a_USB_disk_annex_created_on_Linux.mdwn | 18 + ..._f224f4155d857a59595658357f97dac1._comment | 12 + ..._a_unix-style_local_remote_configured.mdwn | 22 + ..._95655915ff6ba9fb5d873358ff047496._comment | 10 + doc/bugs/One_Client_Not_Syncing_Content.mdwn | 54 + ..._b8c8a9d10a12b72ea828b6b35d87fa5e._comment | 14 + ..._59921abb184bffb5ac1656cc50054e11._comment | 8 + ...-from-anywhere_not_recognized_in_copy.mdwn | 48 + ..._92bb18a7a50cf3dcbca75f544d7a0acf._comment | 21 + ...ch_digest__58___gcrypt_with_assistant.mdwn | 24 + ..._9d4fdddd7ab05de9dfa4cc90f1051ef5._comment | 17 + ..._bbd8b537e277d24df254ed058ad40e24._comment | 9 + ..._5090e41cf96dfe542d1d2326aebc556c._comment | 20 + ..._2bfa76c4083ff9c1d2a4adfe38ced2f0._comment | 10 + ..._2274479a1eef9ffc6a53ffb65e2c3511._comment | 52 + ..._e8deee63316c8af39d7cf0996d26ecba._comment | 34 + ..._2139bcb34591be137ff3da959f08bc76._comment | 23 + ..._7fcd45354f94756c34b2f3f912972c19._comment | 32 + ..._bf61defadd3be9bc867be961b3149be6._comment | 19 + ..._8a8ead857917e7b843f1bdfe07b5d52d._comment | 7 + ..._2432df64f920f3962b6ba02adaa9b61d._comment | 15 + ..._536fbc38a7f2e7ab42188b5a8700e2cf._comment | 7 + ..._f45d09939527be362c586ae1d470afe4._comment | 7 + ..._88178fa312f351a7667b3b2c48335b02._comment | 7 + ..._cd6a850119dd1aa0d9bb34c6d8fe560c._comment | 11 + ..._39139e25175ae265a4dc15f0b6b7b618._comment | 9 + ..._16c004fe7c77cbbba113787ce6410c9e._comment | 9 + ...mment_in_ssh_public_key_ssh-rsa__34__.mdwn | 23 + ...tive_symlinks_in_repo_don__39__t_work.mdwn | 123 + ..._d7ca8767953e1ec06740727a0eda4697._comment | 8 + ..._c4e6ab98e88add01eefe545551b12929._comment | 23 + ...lename_encoding_breaks_Android_client.mdwn | 34 + ..._1bb8e3f3a3d190ed557302df8b8e0335._comment | 16 + ...n_Android___47___Termux_not_permitted.mdwn | 38 + ..._093b92c3a751d32600958f34c3f2122d._comment | 24 + ...ide_of_git-annex__41___shared_pgp_key.mdwn | 387 + ..._c8e7be58222afff2a4c1df60f657d2ed._comment | 35 + ..._720dbf9d959a0050a159713cd1386913._comment | 11 + ...pecial_remote_includes_unwanted_files.mdwn | 26 + ..._a9d43aaca191a2ea464d13bcba6cd31d._comment | 10 + ..._44143f10ac80a979513477fbac2637f3._comment | 15 + ...peration___40__handle_is_closed__41__.mdwn | 42 + ..._ab1e86667225a0174a4e19210778f97c._comment | 63 + ..._cc207e43757c44b4e749488b563fdc87._comment | 15 + ..._7cdef9cf264f1b11cef7cea3accf112a._comment | 9 + ...tween_watch__47__assistant_and_addurl.mdwn | 195 + ..._8f56b8661a600729d7a9d569e8a0ba70._comment | 55 + ..._46dc67bdcd174cd50ccc421ec56735ad._comment | 14 + ...dition_or_double-locking_with_pidlock.mdwn | 59 + ..._bd92615c640ff017cd8a2ebfcc117a37._comment | 27 + ..._6db20a7c8ddde72cba76240b3f7faddd._comment | 11 + ...eating_remote_repository__39__s_annex.mdwn | 34 + ..._9fffb1329a4a06111cf2afd8552aea62._comment | 8 + ..._b7f5634e136294ea1a3d4ce6de58fc5d._comment | 12 + ...ote_in_the_filepath_with_rsync_remote.mdwn | 49 + ..._53d3e78c0fb4d4c398dd47498e6348aa._comment | 10 + ...positories_have_to_be_setup_encrypted.mdwn | 28 + ..._95f73315657bc35a8d3ff9b4ba207af0._comment | 8 + ...bapp_on_debian_stretch_not_responding.mdwn | 16 + ..._e2a0d0f458d263eae15640f36d59f071._comment | 59 + ...e_cannot_be_reactivated_by_the_webapp.mdwn | 30 + ...ipulation_breaks_git-annex_drop_--all.mdwn | 58 + ..._22fb9214e6e31d04b0ffe3266d26ea69._comment | 28 + ..._fac648fb7550f0c3c433ce423e3ea7f6._comment | 8 + ...bility_to_specify_pull_commit_message.mdwn | 26 + ..._6d581ea36afab3829cd56d6d6b83c6f3._comment | 23 + ..._bdb4b0200ab9d7c15454a2f3fcae474c._comment | 8 + ...19.16_still_causes_trouble_with_Win32.mdwn | 94 + ..._7fc0ffa7787353cf40fff0bc8da43c1d._comment | 10 + ..._0b96112c5d57886add62d79e7bf6044e._comment | 9 + ..._79cafc76eb23e54ff70c72c2f528e724._comment | 18 + ..._07f1b2eacf7e9e58809ee44fc1d6b574._comment | 17 + ...19.33_still_causes_trouble_with_Win32.mdwn | 426 + ..._dcc2067ea1bc26510d013ca52096513f._comment | 17 + doc/bugs/Resource_exhausted.mdwn | 45 + ..._bccf9528ffe963154c92ce49762e7ea6._comment | 10 + ..._24ad3a76a25a787ac59e2c5270709e72._comment | 12 + ..._1943ff77f3bccf885229ecc10c82399d._comment | 12 + ..._c3cac0717232e04e89df62efa1db0870._comment | 8 + ..._a5ef7a62d4ed9365f9448520bb17e3b5._comment | 9 + ..._cdba2015e603f3c21f3e1697dd6fafcd._comment | 18 + ..._747d16d050fdcf69dd3d2bc5ca469a2e._comment | 39 + ..._1e9b74e60da57c3d5f08c1eb3801c1d2._comment | 10 + ..._f55d933bce77fd2185ebd0cc46fe57ec._comment | 64 + ..._26c98fca45b029a527f9684873db4be5._comment | 18 + ..._8bab413b472f900e04977db2bc3951b6._comment | 8 + ..._e9bec0b80179b1229b6af0979a21c727._comment | 9 + ..._419e24e0b91f569294ece28c42daa246._comment | 15 + ...unavailable_when_running_enableremote.mdwn | 23 + ..._14a5135c2e822129972feb570e453bc8._comment | 10 + doc/bugs/S3_ACL_deprecation.mdwn | 158 + ..._07d0d382b88426180e77bac962306f44._comment | 9 + ..._63b541a937cb34cc4c68504e00dc3fb8._comment | 29 + ...ote___8212___un-embedding_creds__63__.mdwn | 34 + ..._336e1c2a5c2a367cba0ad74896b3895b._comment | 19 + ..._282aaaed5e95e8062460f94ac3a68dea._comment | 14 + ..._07fb8558238285883d11d8805884bdae._comment | 9 + ...S3_remote_errors_with_garage_endpoint.mdwn | 33 + ..._ea7a56193439eb63ad45074bd40f4ff5._comment | 42 + ..._1d5b499a0cea623aadebf7e3b7fd9752._comment | 8 + ..._ca7ffa315cfa49e028fe6ff2d5c3133b._comment | 10 + ..._ae9308a3bab8904dd0f501cbe2f09de0._comment | 43 + ..._f17018fbc7a8205a3ef0bdea74069fb9._comment | 53 + ..._fb7a448a2a4231b08277741805c12c76._comment | 42 + ..._513bdbb6595612432fd4f33bd8e4e737._comment | 45 + ..._131eb46d499d29b124c576653796e270._comment | 16 + ..._d8cdf46fb8de877ea167d14a055813e0._comment | 17 + ..._3d2033edcd49e62045339e341996fd28._comment | 10 + ...emote_support_for_DigitalOcean_Spaces.mdwn | 33 + ..._12fd9dfb47e157e1d38c5e88a543498b._comment | 20 + ..._3bbdf23c8a4a480f4f6b8e8a2f8ddecd._comment | 13 + ...led_when_copying_to_remote_repository.mdwn | 82 + ..._4578b04c1cfc46849e9440f257f49303._comment | 17 + ..._a953d5506f30cf19fe97c6ece155b45e._comment | 22 + ..._5b2956522ce9c9cdc0c704e63efe8dac._comment | 10 + ..._3966cce3267fe134f5c9c6b05e1149b5._comment | 16 + ..._0c0aec23302afafffc0f69d1bd89ad8f._comment | 19 + ..._031f049fdc2c284303e9db42071ebda7._comment | 10 + ..._3d4a7d330d80060275c34d0a13416fb7._comment | 78 + ..._1501223d25a03c27a7ceffc6b0ea32a3._comment | 8 + ..._192c219b32c95954ec6400367474dd78._comment | 13 + ...L_repos_does_not_show_up_in_Assistant.mdwn | 27 + ..._5a8e599d6e22e7c1960bd1715666657b._comment | 17 + ..._2ad5098c5e2ac9b8651cb464adb974c1._comment | 8 + ...rtificates_with_jabber_fail_miserably.mdwn | 26 + ..._13d27ba41d9ef78c8db534b6bc26314e._comment | 12 + ..._018eed99e71680be9e7c0844020419bb._comment | 8 + ..._1e7578dd1321f399b12197056495b0b6._comment | 8 + ..._a1948b7cd6ea990c8f1be5e483c835fa._comment | 14 + ..._293b333134c97dc666a825cc7a8b2b62._comment | 12 + doc/bugs/Share_with_a_friend_fails.mdwn | 52 + ..._d3ba5f786c45e677ea9a7b4a7b36e1a9._comment | 9 + ..._1d5568c00a9b11a05b7fde0d2d3bc327._comment | 9 + ...en_network_fails___40__esp._DNS__41__.mdwn | 50 + ..._dd792bd98a48554a65150c06401ed3e5._comment | 12 + ..._function_throws_error_with_git-annex.mdwn | 43 + ..._6fd91f615e8d5212674a9748d1b4135b._comment | 12 + ..._3dbaf39065c2f0941f8f7092c27fd4cb._comment | 16 + ..._996139be157e23e17ece9f131b17240a._comment | 12 + ...git-annex_with_encrypted_rsync_remote.mdwn | 61 + ..._4038261a4d49694374c37ff029d3540f._comment | 20 + doc/bugs/Stress_test.mdwn | 45 + ..._1694e990eab6592159309c231c6dcc16._comment | 12 + ..._ab4cb6eefd279e6c1f229e089f703581._comment | 25 + ..._c4c764488ac082f5c48d3a6b4b5fba42._comment | 17 + ..._42125bba09a0ea9821cda7183e458100._comment | 47 + ..._8240e61106b494d3600ad91f16eb5b1c._comment | 20 + ..._c38d84e0dcc834931804c44bce7f7b7a._comment | 11 + ..._60ce20ee255451c4ea809ba475561adb._comment | 15 + ..._1371562e201393986cd41597f6f288cb._comment | 14 + ..._a14be7699da224a8f6c9b34f1b911219._comment | 8 + ..._a01995bdca7ade7dde9842b53fbc4e0c._comment | 57 + ..._9f7efe81b7e40aaa04a865394c53e20f._comment | 52 + ...l_configuration_of_tor_hidden_service.mdwn | 23 + ..._643a8e22d6ffd27a5497c077e4ce3bcd._comment | 17 + ..._90deb38d083cfac454bf364884ce06c6._comment | 17 + ..._59fe23f38b4bb70e629b0c7c698d1438._comment | 17 + ..._20c00e22eff7cb5a5f907895bf4b0b44._comment | 11 + ..._7e6e7c0ce27504273be3e5bc27685d93._comment | 13 + ...0_Creators_Update_with_Developer_Mode.mdwn | 26 + ...ails_when_borg_remote_is_inaccessible.mdwn | 83 + ..._5e83630a60aa0242969bd1279a70628a._comment | 17 + ..._eff73163e8a7ae09ceeb596fca04c507._comment | 8 + ...__t_work_after_using_watch_on_Windows.mdwn | 93 + ..._e197b8dc0eae0dd6dea4febdc2ecce53._comment | 11 + ...n_in_recent_versions_of_the_assistant.mdwn | 134 + ..._8100505a7ac74646e0767d03fe643a45._comment | 8 + ..._9833e8f77c6148db9572316066a67eee._comment | 8 + ..._1504f8767f1f4415222d8c315c734e81._comment | 9 + ...__timer__95__create__58___Bad_address.mdwn | 58 + ..._8ce2cbdf5b5c31fd42b0ed270c54a824._comment | 23 + ..._1316ea67dc7df8d3d6f681ac3caf6d3c._comment | 12 + ..._0e098ee460a0ad70dbe34d74c5e9bf3b._comment | 44 + ..._64fd17f3537fec02f8356e535a1d0bb4._comment | 21 + ..._dacfb426f7e67e984bb9281a40427e85._comment | 26 + ..._c85f2c69aa2cff05859e92afc95e9ccf._comment | 45 + ..._e8c76f8b9645733a793676dc274744ef._comment | 14 + ..._902afcef5ad9c3f2a80d5df1ce99e1d5._comment | 62 + ...k__95__gettime__58___Invalid_argument.mdwn | 22 + ..._5277a05a17b348a1be80845e697c018c._comment | 10 + ...ompat.User_removed_in_unix-compat-0.7.mdwn | 60 + ..._cd573b785b7d7feec72387cb0dafdcab._comment | 10 + ..._6b15d11b6e25689e2430663a4aa90168._comment | 10 + ..._locked__58___rsync_remote__58___FAIL.mdwn | 43 + ..._809ca8b986ccadbc3940cc795d1823e8._comment | 15 + ..._0327663314d2a8b2f0cab7536fdaa6bd._comment | 32 + ...__59__58___hGetLine__58___end_of_file.mdwn | 50 + ..._a1392b92efdff82783a4b0cc2c3c7f2f._comment | 14 + ..._5e153b7c59c474988fe551a505e545bc._comment | 8 + ...ansfers_continue_after_daemon_stopped.mdwn | 5 + ..._39eb527d64367e6762281246f1d49b1f._comment | 12 + ...oad_to_remote_although_remote_is_dead.mdwn | 51 + ..._108b3984891f82429430b503cddfb3c1._comment | 10 + ..._fa5b1bc26ed3e5bfe48441490c94fe3a._comment | 8 + ..._0a785b5dfbf4eef30854d6bedb12b7d1._comment | 10 + doc/bugs/URL_key_potential_data_loss.mdwn | 32 + ..._a921dab2c4335f690df4d5189fe4e4c2._comment | 8 + ..._0c9e7b8e00db92e8d638328f0390f6e9._comment | 29 + ...le__58____47____47____47___on_Windows.mdwn | 68 + ..._c4cfa1d0f90193b127722711285e1210._comment | 12 + ..._ff71a541b3df8bb272e576c856b3aa9d._comment | 7 + ...iving_files_with_git-annex_to_glacier.mdwn | 43 + ..._f68d5ad86d67aa73074389cf9a21469e._comment | 22 + ..._f0f1f18265ebb83caf4e6f1fb23ec876._comment | 7 + doc/bugs/Upgrade_impossible_om_Mac_OSX.mdwn | 22 + ..._8c1487635f724d017ebe2f8b7bc10e8d._comment | 8 + ..._84e52a4d1502fd622bdb25e04b459292._comment | 13 + ..._f2b109f6cf92f101d7f0afeb91605240._comment | 24 + ..._df9b111aefea82b9d108495b79d7ffb4._comment | 24 + ..._e3b5bc815376383bbd1f312cc1c32a41._comment | 12 + ..._cd9b77e6670840a9902f5be80e1e658a._comment | 87 + ..._4584393333d377532d8607b42319abd9._comment | 8 + ..._d9d36ff62267dde98a27c5981951df7f._comment | 10 + ..._5b26711c737eeb0b302060f098cb320b._comment | 8 + ..._1bf050056dcac7c1e0f497ee6e87a95a._comment | 10 + doc/bugs/Upload_to_S3_fails_.mdwn | 59 + ..._b7e912bac673bdffa5775b71d5d39937._comment | 8 + ..._65cb9b1dd69cd657f2cfde036eb60417._comment | 11 + ..._398c014921f9af957fb5e9a92ed0ef4d._comment | 10 + ..._f33ce058c9460cf7d151e739bff0440a._comment | 10 + ..._cd1e768fe1e67daf08b5afd460620922._comment | 8 + ..._0cdd2e8d6e83c03de717ecd3253e753d._comment | 8 + ..._020c055f6c06860dda27c1debb123742._comment | 43 + ..._8bc023fca8cedfc517856cdcd20b7f10._comment | 10 + ..._32685258748a7cdd177e7af2105f128e._comment | 10 + ..._841fd94d0f599c71a76fd22b07944366._comment | 8 + ..._dd837a1cb2146224b9c000cbeea4f3b3._comment | 8 + .../User-Agent_not_sent_with_S3_remote.mdwn | 3 + ..._68fd5b6a69d90bb9623740752a918657._comment | 12 + ...s_to_build_on_Win___40__imports__41__.mdwn | 96 + ...y_limit_on_max_filenames_in_directory.mdwn | 2 + ...S3_tree_does_not_unexport_git_objects.mdwn | 399 + ..._70428ebc4027538253edc483dc5cb971._comment | 50 + ..._059b9beb31d9cbc97ea4a59f47d2e63d._comment | 19 + ..._176cbc137afb5cf8841ff9114b111fef._comment | 17 + ..._a6490af0427bbe4363bea824d55a7593._comment | 9 + ...t-annex-add_fails_in_DrvFs_filesystem.mdwn | 123 + ..._6b54cc0a268885570170620222b774d7._comment | 9 + ..._5634af4cef0d0fe0d2affe40d9c0d5ea._comment | 9 + ..._816bae469b0341c6dae2316050a95ad5._comment | 23 + ..._ab64e43330e466482f30487b8bd13bbf._comment | 24 + ...ite_thread_crashed_-_locking_protocol.mdwn | 125 + ..._93c9d3ea6d7a1f2d035f8a52c81790ad._comment | 71 + ..._94d00ed84dfebebd7889fa861172df61._comment | 46 + ..._76f765e3befd5e263a8863b56cad139b._comment | 45 + ..._5e08dcb7e40e7fbcb22425b3ff8b0610._comment | 42 + ..._45b1da34ec60d6322477edfd6a3a2bba._comment | 9 + ..._0bcbce94586ef96c2dcbe5ef9da4ac6f._comment | 19 + ..._bdb3cadf29facd4729120a6cd057b8a8._comment | 18 + ..._2a9f0396df93d9500306b3d7039803a2._comment | 8 + ..._da42c839f96314ed8c5ad646b614b75d._comment | 26 + ..._f8ee3d06a79bdc429a114b5256290206._comment | 17 + ..._b7a3837fd6af236e9ecf6d5bae077fd0._comment | 25 + ..._276be047d18b2e20a8e3114abe3132ee._comment | 36 + ..._cb7ce88ae3d77b9ba0a4e33c2321a3e1._comment | 20 + ..._b0700fdf101f6cc883857b293cd35267._comment | 23 + ...8___openTempFile__58___does_not_exist.mdwn | 10 + ..._9892f6b80597f0b637aeb96d212164d9._comment | 7 + ..._687a9fd1c0b760dd2bef9647cd16175c._comment | 11 + ..._1ef917c10f944e6c874aa40affae7602._comment | 11 + ..._47__storage__47__sdcard1_-_bug__63__.mdwn | 45 + ..._71b052be40fbdaca09ca3ede8c59ac7a._comment | 8 + ..._0f7cc02e0193c969c9b6ceb27e71af8a._comment | 20 + ..._1a7542249b9c37507126e97441057c12._comment | 12 + .../Webapp_won__180__t_start_on_MacOS.mdwn | 315 + ..._0a8b46efd3f6b7c9f818fc64af9a5f4f._comment | 12 + ..._7eb9cf2b8c7192ae654831cdc0c00253._comment | 283 + ..._069b107437b6456d027c8d97bc708d48._comment | 12 + ..._1e944c517796ca29f8870fcf76c9a0d4._comment | 20 + ..._2c7d2e81cbe943fe9154830fdf958181._comment | 16 + .../When_--git-dir_is_not_in_--work-tree.mdwn | 52 + ..._handle_files_with_2_dots_in_filename.mdwn | 29 + ..._43f6de166d1811e9f9bd6e6d8b152e05._comment | 9 + ...e_it_is_being_used_by_another_process.mdwn | 56 + ..._79c57a6a8c0b100c07d014d8d2b862cb._comment | 13 + ..._6242b7aded8b221aba8a5e3e4374238a._comment | 61 + .../Windows__58___git_annex_get_failed.mdwn | 90 + ..._0866038e64aa20c3b9ba3b3190074293._comment | 20 + ..._22809831226478bac7f9361ad8d0c79d._comment | 10 + ..._8a19ca100d44ab8131e40932f1bcdf29._comment | 10 + ..._b70fa3da7e776a6cd6d8467df30839c9._comment | 35 + .../Windows__58___support_NTFS_symlinks.mdwn | 28 + ...ailed_to_read_sha_from_git_write-tree.mdwn | 46 + ..._5829b551f5e1413ee236055eb3345760._comment | 15 + ..._535016130f3307c8104168e6bb8a583d._comment | 7 + ..._79c66569c22a1280b807a3c21c2cdc4f._comment | 20 + ..._2e5791aa8f568f86d0185a553227afa8._comment | 7 + doc/bugs/Windows_build_test_failures.mdwn | 1234 +++ ..._ea7523fdbafdc8be2971df52d9038826._comment | 10 + ..._and_wget__44___but_not_required_DLLs.mdwn | 17 + ..._a7bf0f027f2209e5632e292afd7214d0._comment | 10 + ...rmission_when_using_shared_repository.mdwn | 68 + ..._bfcb858bfd1c5377c2b15961b59a835a._comment | 10 + ..._e3c9e3b9004f1fe964b23d955083089b._comment | 11 + ...__58___resource_busy__34___after_copy.mdwn | 44 + ..._b05e0060d503a1d58c972796c5be151b._comment | 87 + ..._399dcbe7f3772526efbe13bd5b13156d._comment | 11 + ..._201c7dcd0e809cb2c22ab4b621079c71._comment | 62 + ...on__34___with_partsize__39__d_uploads.mdwn | 29 + ..._b3b767b3ab4a73590bf7e2af8640f906._comment | 25 + ...when_trying_to_cconnect_to_ftp_server.mdwn | 54 + ..._db2b9e26bc01abbc3312731b95cf770f._comment | 18 + ...4___during___34__git_annex_sync__34__.mdwn | 52 + ...34___special_remote_leaves_empty_dirs.mdwn | 116 + ..._8cef8650103d118fbbe56d20a4f59f96._comment | 16 + ...___44___after_add__59___cannot_commit.mdwn | 24 + ..._8abfe7417167df54b686960319465a65._comment | 8 + ..._7776659e257a97c9a3855c8ad008207a._comment | 10 + ..._e8bbfb4eb26dae31f90a5fa53b4dc948._comment | 9 + ..._aee32c53d2198ba1e82acd0c617d517c._comment | 10 + ..._f41116524fb7b423ff03c9440b5f278b._comment | 8 + ..._0f61544accba5002edef2bcd4131e69f._comment | 8 + ..._9dc2f74dc69ccf867ac4e68cc502fda4._comment | 8 + ..._0525b887cd75c183a34de0f486ec022c._comment | 8 + ..._fd55979b686b5f83ba2b95300abd1852._comment | 8 + ..._bdd9e29413f4407207efa01283ad68ad._comment | 17 + ..._2a64a2da445a64149da7335f35142a08._comment | 35 + ..._f12f7f14ef09fa765c78dbeef809da7d._comment | 10 + ..._3f2ce7b851392ad5285e95f3857d0959._comment | 16 + ..._94dc1d1485c3a380fe19dabe8f95aac2._comment | 17 + ..._decb1689b8cc2541077e2d0ae273b5e7._comment | 30 + ..._1f6443e495cc16a13e2e4175e73dc8f1._comment | 27 + ..._522020e71393434834def6c80b82e39e._comment | 16 + ..._cc4cba022869b32d298cdafed9545a34._comment | 8 + ..._e71b251db2ff1f52a40fec40303cdefc._comment | 15 + ..._0b6413f9ca403be3d83bb3306d1e7f8f._comment | 8 + ..._f951981f0bf8cbaecfc46e7b9c903d70._comment | 8 + ..._7c98c8b291fdf28a09ccb6c7e4001d5a._comment | 22 + ...spect_utf8_in_the_commit_author_field.mdwn | 11 + ..._6708d83b96b791e4cd829bb0a65cda6d._comment | 11 + ..._d28894bc233987f68159e8d1a7a97096._comment | 34 + ...ked_indefinitely_in_an_MVar_operation.mdwn | 44 + ..._a63994b33b651dccfd4d4cf946ab7170._comment | 9 + ..._2166a985e48a31c1b86cb77263f72ce2._comment | 34 + ..._17b96f95f44a04063f5a52d690d96b32._comment | 32 + ..._df73b69e651c728943a404223f350ebf._comment | 15 + ...valid_object__34___errors_cropping_up.mdwn | 91 + ..._d146a64ef8d76c2a7e45bf85d8943456._comment | 17 + ..._6585b15aa7ae63175482d08b2b5b79fc._comment | 11 + ..._973d90a6fde1c6f26fcf594610693fad._comment | 17 + ...it-remote-gcrypt_syncing_files_anyway.mdwn | 69 + ..._30a0a715fb9d8738e5ec53296375c1b3._comment | 8 + ..._b91f9337b7ed536539bb3236b7552d82._comment | 8 + ..._79268506a1653220ddfbb45f9c61d8a7._comment | 19 + ..._9c2410c55154bc8d9f733377cde58eb9._comment | 9 + ..._rename__58___permission_denied__34__.mdwn | 69 + ..._19de24208042d09572c114bca80f4854._comment | 20 + ..._e70c8b8192eb0f8868e52dc7a287e526._comment | 9 + ..._doesn__39__t_pass_testsuite_on_Win32.mdwn | 783 ++ ..._7ac6938faef9111da701080a62c4d7e9._comment | 67 + ..._max_cpu__44___long_run_and_huge_repo.mdwn | 40 + ..._3233c29405da296360d57af7d5eb418d._comment | 46 + ...ssist__39___doesn__39__t_honor_--jobs.mdwn | 36 + ..._96b3c705c7c83b153cde2e8bb16ed380._comment | 7 + doc/bugs/__47__exe__47__git-annex.mdwn | 51 + ..._8a9e9d83a3dcf07ed76a22f03636f6d1._comment | 9 + ..._381ac4e8b27343cdc470584c05edec76._comment | 7 + ...eta__93___ikiwiki_is___42__slow__42__.mdwn | 3 + ..._3afce2aadeb2221c66f397e631d0e4a6._comment | 8 + ..._220b3ed61dfcce4d6d33fa8516cd1ec1._comment | 20 + ..._8fb126d6583014d3e16137e9c18057e6._comment | 8 + ..._72204d0647ec808145b6838d5e621107._comment | 8 + ...adds_files_unlocked_instead_of_locked.mdwn | 55 + ..._58abf8693ed90fc8c6e3f750310c17e4._comment | 12 + ...o__96___hangs_with_git_special_remote.mdwn | 84 + ..._e3bc14a173600b86c5875d90228aea8b._comment | 25 + ..._9274223b32601ead9a508aa9852e4933._comment | 12 + ..._8f46a9d4a7ceae80e378149d88dd1f19._comment | 11 + ..._c3130a2595fc35525dfdbcc6cec57713._comment | 8 + ..._eeb4f35b7609cb36fdcece9b8cb94430._comment | 14 + ..._ee21d4d8b276a32b227199175ea30721._comment | 15 + ..._9104e12c57bc47cfd0a6c109ad085de1._comment | 21 + ..._c5b96e6c35c8969062489d6e03066f34._comment | 10 + ...__62____96___swallows_network_failure.mdwn | 68 + ...96__lookupkey__96___unexpectedly_slow.mdwn | 25 + ..._13003e3b46c5cfab60b6e34fb18731d7._comment | 14 + ...nger_to_get_file_than___96__get__96__.mdwn | 728 ++ ..._43f5ed4a319fcf63387395f32a345852._comment | 38 + ..._d485bbc1c0f2fceaaa2e4142dccdc1f7._comment | 17 + ..._b0132b0f846e4882a5511b53694a1fa2._comment | 8 + ..._fa2fb2493ea1244f334b54e6af2b553b._comment | 73 + ..._ccd90a2ad9cb9c896a47d62ecdfc5304._comment | 121 + ..._c7e71722379431789f26b5e743e13d9c._comment | 13 + ..._f730f3593ab5aeac34e74ec48f943949._comment | 9 + ..._934ee22209920f8429c0ac71002bab1e._comment | 8 + ..._1611ef71978eeb61da4c42cffcff2411._comment | 8 + ..._6700aabc3b4cb02a5b370cf4c71c6a0c._comment | 11 + ..._a0b287e187396b7072e4d7bab3664621._comment | 31 + ..._0b4e0acecbcc6a8736849801446a189c._comment | 52 + ...branch_subtree_regression__58___FAIL_.mdwn | 14 + ..._2b2040240fe8f01a6348eb68959d9319._comment | 11 + ...6____47__gitlabname__47__reponame.git.mdwn | 36 + ..._60db0d6bfc71a62b3c1021527a8d2d60._comment | 23 + ..._49682a91147990a578929678880bd226._comment | 26 + ..._bf0fa06596338444a3772d1865b17e26._comment | 7 + .../acl_not_honoured_in_rsync_remote.mdwn | 59 + ..._aa6fe1d7b029eae7ee71c97e0f0937a6._comment | 8 + ..._ffb9424e966ee10a4fe2d446b3042cb2._comment | 10 + ..._f93177593a2d90627672647fd5f065c9._comment | 7 + ...tes_empty_commits_on_import__47__sync.mdwn | 42 + ..._87efdd2a9c7091f92a6bc96e87a59e18._comment | 14 + ..._206d98a17319292d4de4c475a7b8d091._comment | 11 + ..._522c68d019e5db592e140db9501435ba._comment | 20 + ..._5000af944e3a7917a97b65fb7d1c5c3e._comment | 49 + ..._a9b3e07f180ab97f5025d7ce9ca58c05._comment | 18 + ..._4e9e55d54d9afb2dbb48320156757f11._comment | 24 + ..._d500b9ae8e3f57a2f8dcd2314c0022dd._comment | 73 + ..._aafa4a00a9579e54c3080586c1b7bb3e._comment | 29 + ..._f1e37aa68778408629c53c09f0a0857f._comment | 16 + ..._0a7f24a4567ff934cee37a4c0224f000._comment | 16 + ..._9b4d104a7255a7618221f9dbb410fdcb._comment | 16 + .../adb_pull_does_not_preserve_timestamp.mdwn | 44 + ..._b695826d1f948249b496c055b4d745df._comment | 17 + ..._2d49693c5f8d826f9a4b1cf2f8dca2c5._comment | 39 + ..._cf555d2f0f93248a913014f30ce513b2._comment | 25 + ..._9d5cbd2479a07d778bacfdfe0aaaa524._comment | 8 + ..._244a5803178b4e44f3ec4460c5daf258._comment | 9 + ..._77416807482416c552922d39a0319a65._comment | 49 + ..._216316d2db3a728837fd059587ad1928._comment | 23 + .../adb_remote_fails_to_import_treeish.mdwn | 75 + ..._8012368012cf53e8552d7670b9b8315d._comment | 24 + ..._54867d63c04ee18c76b1d769db71bc00._comment | 9 + ..._5e819d0b5f3101e86f0f95a7ab725ad4._comment | 16 + ...replaces_symlinks_by_plain_text_files.mdwn | 30 + ..._bcc12b77c5069769ab04e448b23b3d85._comment | 11 + ..._f5db61aa7efb7a916d0ffebd563cc2c7._comment | 18 + ..._7346adcffb3d9056dc880dcf1e2ab03f._comment | 11 + ...te_fetches_but_does_not_add_all_files.mdwn | 21 + ..._31142cacafa0c975cd33a76c22f60bf3._comment | 22 + ..._09f5982e930a04c25ea3ce8caac449c4._comment | 13 + ..._3b4100037ee9180346ffc2240a34064e._comment | 12 + ...y_treats_files_in_dotdirs_as_dotfiles.mdwn | 103 + ..._263bfea4cae5a612de1761b3c3fc32b8._comment | 19 + ..._6fbd20761f9388c04fa13b38af2354d9._comment | 19 + ..._e8636243a3c98b11e54b6fa8617f9e32._comment | 20 + ..._27bf6cfce4f73a1d29a753e33c1e871a._comment | 12 + ...g_var_preventing_adjusted_branch_mode.mdwn | 62 + ..._d7ca1f4ccb4bc8a72788f6dcf8af9439._comment | 15 + ..._0c064717d0b85ff4b9df1bada7c6e7ad._comment | 13 + ..._1f4b1f2a32f11da4c9bba95f25dd45c1._comment | 8 + ..._0fb992fe4ef5ec14876d2d1912dca4c5._comment | 11 + doc/bugs/add_overwrite_race.mdwn | 59 + ...kes___39__git_annex_unused__39___slow.mdwn | 87 + ..._d350c39c67031c500e3224e92c0029ea._comment | 19 + ..._b2d2b1caa51ffec3d87c36b373cb8d4a._comment | 20 + ..._12b20cbbc2b4cd1ab8af7e3eec9589b4._comment | 30 + ..._a50b43c15d2650df90f0fa1ced47f532._comment | 10 + ..._7328bc51bd001f2b732a92a2ae175839._comment | 114 + ..._880ef2ee797221332dbb629b2d55522f._comment | 10 + ..._826fd82cdf9b1c79c9b555ca26c2c176._comment | 8 + doc/bugs/adding_a_remote_server_fails.mdwn | 27 + ..._cf7ea9171f002c5793a882b42d33a77d._comment | 10 + ...metadata_on_Windows_doesn__39__t_work.mdwn | 39 + ..._831dc2185919865d418b29cd06ef42be._comment | 42 + ..._88b7db5434a56c25c75772caa37bc14a._comment | 8 + ...ors_with__git-annex__58___user_error_.mdwn | 73 + ..._996a54315c21e1dcb94cca9576d1d5f7._comment | 20 + ...ve-filename_still_modifies_file_names.mdwn | 41 + ..._88c0a762e2a37f680f6a4419582eddac._comment | 32 + ..._386891c1effda6cae17d88eacbfa0daf._comment | 16 + ...cause_special_remote_is_not_available.mdwn | 1 + ..._7caf2377477495c08378755cdf45dec8._comment | 8 + ..._83a864a73f9c1c6bf86dc60b47a965fe._comment | 15 + ..._b0e9f373c3439b15a28fd20e9b0e24a6._comment | 51 + ...addurl_unittest_failing_under_windows.mdwn | 56 + ..._8f723e986d80754a8b68308ab8b15c20._comment | 10 + ..._e0bbb72af2852b2210bb1ce520e88f1d._comment | 10 + ...cked__41___does_not_honor_addunlocked.mdwn | 43 + ..._unlocked__41___not_syncing_with_main.mdwn | 65 + ..._e5ebc1cf8621761b559d53884731d0e3._comment | 23 + ..._149502c4d8fa2c50507e7e6e312f9703._comment | 16 + ...lot_of_files_are_reported_as_modified.mdwn | 57 + ..._8a355d509fb2005cfd9da8f2d4bb560e._comment | 23 + ..._ee707efce9c5537a1f7d0ffded952af8._comment | 12 + ..._0fcdba2f621c8c32f09b2633c11266ee._comment | 8 + ..._4719510b78d347f28a0fe8910c086982._comment | 10 + ..._05f178a19b8949efc5c6e189ff8fa5e0._comment | 10 + ..._ad4621b602e7632d74d58f1728b80cda._comment | 12 + ..._fcb259337b70b0d5c5e50c8facb845e4._comment | 8 + ..._1df979b8e222dd135a10046c51f0dc0b._comment | 19 + ..._5e3482024e20759f8d42e14598d4dc26._comment | 10 + ..._4e9f342281b01ecb9354a08200c04ab0._comment | 8 + ..._63af8f32512ce8ec07c48361317ce51d._comment | 15 + doc/bugs/android_sync_messes_tree.mdwn | 39 + ..._a90afb9011c760843836728d03353619._comment | 14 + ..._90d589053c4d1b646edd07978999d001._comment | 45 + ..._f964c18aced83ba02d3436941dbcbacc._comment | 30 + ..._1f819796ec13f83e56917332efffe54d._comment | 22 + ..._7fda943808cc1b7155c1223fea08e8df._comment | 15 + ...utocommit_seems_ignored_for_new_files.mdwn | 39 + ...upt___40__not_just_missing__41___data.mdwn | 11 + ..._d02a1e53cb95b0cb3c4330c668bcb15b._comment | 28 + ..._a6806787dc0163f67dc141415c951add._comment | 20 + ...s_before_moving__58___stopped_working.mdwn | 70 + ..._b3c780a6f888c8afc3bd5cd7d436527c._comment | 29 + ..._97df39b9fed0e9bb716b1940c0641140._comment | 11 + ..._db0070d2b601e66aca3059248cc24bbb._comment | 22 + doc/bugs/annex_get__stalls_over_ssh.mdwn | 31 + ..._335a8901b7992c2041eabed3785a25e0._comment | 18 + ...does_not_account_for_versioning_on_S3.mdwn | 16 + ..._a04fbb936785456ed99512ea4c29fd53._comment | 10 + ..._6015c5488e69307424a3c0281b50a49e._comment | 9 + ...nex_remotedaemon_100__37___cpu_hungry.mdwn | 81 + ...lently_resets_master_to_previous_sync.mdwn | 26 + ..._84346dcb210b86e86bd474820bb5f494._comment | 33 + ..._c420c76e5aebb1339f4c478b4d56d5de._comment | 11 + ..._80d241b2654856669d82d1ab5de40c00._comment | 8 + .../annex_tries_to_start_old_binaray.mdwn | 45 + ..._209c36b737a48a6136eeb85d1f3d01b3._comment | 10 + ...nnex__47__uninit_should_handle_copies.mdwn | 20 + ..._c896ff6589f62178b60e606771e4f2bf._comment | 10 + ..._9249609f83f8e9c7521cd2f007c1a39e._comment | 8 + .../apparent_hang_in_git-annex-smudge.mdwn | 31 + ..._80e24b74572d50f648d8aaae228b8827._comment | 20 + .../aria2c_display_broken_in_git-annex.mdwn | 147 + ..._770e1d657bba2a3f5782eac2e8bdca57._comment | 14 + ..._2f26037c5a67f6f8928204ab0b7b7965._comment | 7 + ...autostop_stops_after_nonexistant_repo.mdwn | 25 + ..._41___commited_unlocked_link_to_annex.mdwn | 106 + ...adding_encrypted_usbdrive_repo_on_mac.mdwn | 53 + ..._4ea192e57f86a33087997746722e6acf._comment | 10 + ..._622ad5b34780fc8468c5c515ad9f27fa._comment | 8 + ...not_sync_files_to_empty_indirect_repo.mdwn | 281 + ..._af9b44674bafb63de05b888b90878325._comment | 21 + ..._789149eb53162a11cbafde399215e40e._comment | 8 + ...committer_crashes_due_to_missing_file.mdwn | 71 + ...oes_not_allow_adding_an_existing_repo.mdwn | 10 + ..._87e84d56d56abefe8cac8a52b76c9003._comment | 8 + ..._55fcf44eefe6abac3f61a14e9ce9206c._comment | 34 + ...epo_cost_info_when_queueing_downloads.mdwn | 18 + ...__t_notice_changes_to_gitignore_files.mdwn | 41 + ...t_doesn__39__t_sync_empty_directories.mdwn | 32 + ..._78a3bde607f43c0f518bd2d3d7196022._comment | 8 + ..._83777384b72732b1d0a19b32686d3d1f._comment | 8 + ..._f9b2a700c060707fae1bcb2ec0e4e4dc._comment | 9 + ..._014d213a959dd7993bdd247722a8817e._comment | 8 + ..._440f349781d7d9ca2d1ed81386f7dd26._comment | 8 + ...nt_doesn__39__t_sync_file_permissions.mdwn | 47 + ..._fc8d3ea209a2ab39c1aeff52452d4c58._comment | 10 + ..._1a364c422e0dd7418f74e1cc3d543a3c._comment | 8 + ..._4d5ae51b4c7e6177d934d7c9f21b912c._comment | 8 + ..._ec7b491ad3c9a1f253d886682bff8b82._comment | 11 + ..._e04ddcd7a3d260c1dac54e41911bb4bc._comment | 10 + ..._13db3474113b157b7431eb1c835e5814._comment | 14 + ..._3cc6eeb8eae14ac3727b1e420f96ee7d._comment | 10 + ...nsive_scan_unnecessarily_queues_files.mdwn | 65 + ..._bc874e077009b81ab36a6d43d793030a._comment | 10 + ..._a7e9d8ec500399dd6794e168f85e6a5c._comment | 40 + ..._a0824e00f04f95c39823f29d6c76e7fe._comment | 10 + doc/bugs/assistant_locked_my_files.mdwn | 30 + ..._74ee7ea12df7bfbb44c9d0485f787b73._comment | 8 + doc/bugs/assistant_memory_leak.mdwn | 22 + .../assistant_not_synching_with_content.mdwn | 97 + ..._remotes_using_the_standalone_tarball.mdwn | 21 + ...es_does_not_merge_changes_from_remote.mdwn | 12 + ..._43bae1f11621232a9133cdef21d1f063._comment | 19 + ...etimes_removes_and_re-adds_whole_file.mdwn | 73 + ..._52a4748fda6682e6e667501726fd05c6._comment | 9 + ...ace_miscomputed_on_large_macOS_volume.mdwn | 78 + ..._cb1e92ef1412e68c12f6a1c9a10a7414._comment | 16 + ...option_for_init_is_in_no_effect__63__.mdwn | 77 + ..._6b40b5ea277d8e28f0b632701a776587._comment | 10 + ...ot_automatically_synced_to_local_repo.mdwn | 15 + ..._66ffaa679ba0fe86bba114fd9cdc5a53._comment | 9 + ..._a7617cc63584dafb16bdc9373fb1e304._comment | 7 + ..._ecb57e72c0bf583d1c3461313a83c4f2._comment | 13 + ..._bf0e16f9181438c2050521c5ff5bb7d0._comment | 14 + ..._aeea3ff59c8493c87c313fbaf7614f20._comment | 36 + doc/bugs/bare_remote_safe_directory.mdwn | 15 + ...journalled_changes_made_while_running.mdwn | 12 + ...g_http__58____47____47___with___58___.mdwn | 36 + ..._c41e4999eb41846eb841b6ce9802b77b._comment | 26 + ...d___40__No_space_left_on_device__41__.mdwn | 62 + ..._644835e95676da0aa38737b3419022e2._comment | 8 + doc/bugs/blake3_hash_support.mdwn | 377 + ..._723a531dad2df722514a7cbf1b8e0d8a._comment | 9 + ..._7be0932328ba4f49c33b0ab14429a283._comment | 18 + ..._a28c55a1d6158e301cc63d6087d8ab0e._comment | 23 + ..._3ef2af8eb62a81299e49a3b7dccd337e._comment | 30 + .../broken_repo_when_inodes_exhausted.mdwn | 62 + ..._8ccfac4cea4c54029b96b436ac2114ed._comment | 12 + ..._4c6ced0d3163735c7f4bd5a4a7053159._comment | 9 + doc/bugs/build_for_OpenBSD_is_outdated.mdwn | 16 + ..._59d9f99747cd3ba93a87ba634824d4ca._comment | 14 + ..._cb4f3d710b0c46b27bebed48bd2e9a21._comment | 8 + ..._99e6c86785c91b8320ec1e7df1e02e2c._comment | 13 + ...bup_often_errors_out_when_-J___62___1.mdwn | 44 + ..._1731cfb2662890299ca6daeacdd4bb47._comment | 22 + ..._f0f87b7a2c60afba609072566b0048ac._comment | 190 + ..._ca2b909c54a772e1eea58b7cbc07bf39._comment | 15 + ..._d7156224245542f5468783c1b5763154._comment | 13 + ..._90d280582d71f77d75aeedcd30c7c437._comment | 12 + doc/bugs/cabal_builds_without_assistant.mdwn | 14 + .../can__39__t_build_without_assistant.mdwn | 39 + ..._41b96b4e7f01b79a2e942b8098faa534._comment | 20 + ...jabber_with_custom_google_apps_domain.mdwn | 21 + ..._6537e928a0d6d5c41b55370f112f4afb._comment | 10 + ..._b639ad750a4635d95f6ad16a1aa39a3e._comment | 8 + doc/bugs/can__39__t_get.mdwn | 81 + ..._ef32287828481c161bd913c9db9052a5._comment | 27 + ..._31fe400f4bac516a5c1101612cb06a54._comment | 32 + ..._87d123c04815d38abb92f967829c3a23._comment | 16 + ..._b99cff87dbe38f08f888200dfe7e2436._comment | 14 + ...ace_in_its_path_via_annex-ssh-options.mdwn | 32 + ..._d773dee03276e9b0e0b75d0709b76278._comment | 18 + ..._01cb7ba7d3c19863d39f6fac0d45d235._comment | 25 + ...nnot_add_a_files_with_an_accent_in_it.mdwn | 43 + ..._d465d7f88c8f11b4b636fba56711d745._comment | 23 + ..._b6886a5c38725d93630562a3172d1a5c._comment | 20 + ..._7c34ada3c7b413f2b622149b60757f6e._comment | 37 + ...ocal_readonly_repo_through_the_webapp.mdwn | 98 + doc/bugs/cannot_ungroup_a_repository.mdwn | 55 + ..._5476ceb9af2fa2d862a868824e5865e4._comment | 39 + ..._0be32bc80e98c0e10b2eb949b20b18dc._comment | 16 + ..._16f1b5ce3830f9d26df4b14ed666e189._comment | 9 + ..._bc93a6cb01e7d5d43cccb0eca81b5f33._comment | 8 + doc/bugs/chunks_not_deduplicated.mdwn | 27 + ..._3890af3669ac6b37b88dac938ed79d16._comment | 7 + ...gument___40__invalid_character__41__2.mdwn | 24 + ..._b56c847c5eda432a4330b4d853a25519._comment | 27 + ..._processes_can_lead_to_locking_issues.mdwn | 53 + doc/bugs/confirmed.mdwn | 5 + ...63____41___test_stalls_on_an_occasion.mdwn | 40 + ..._ab2c1db51a42a146708b28f4cb3309a6._comment | 34 + ..._e7da4a54b27f459d528a7651fd615913._comment | 28 + ...me_of_file_on_windows_breaks_original.mdwn | 49 + ..._c6e8e3e76185b6ca25067c2a7e5cd8fc._comment | 19 + ..._7e2604bad32225682513b51c1be6f571._comment | 10 + ..._--from_--to_checks_destination_files.mdwn | 88 + ..._2a2997e6f914afb0477f2baa69b174fc._comment | 13 + ..._f7bf30e8cc2d1995976bde723dfbfe01._comment | 7 + ...-from_--to_does_not_adjust_avail_info.mdwn | 55 + ..._d6a1dd2e039dcb6dafcf4675b9244617._comment | 11 + ...--to_does_not_copy_if_present_locally.mdwn | 93 + ..._ae76f27d9ef4ebac7ad57e6aef9a7586._comment | 57 + ..._e857c1d89b350517fcb9829e52d6c6db._comment | 9 + ..._492d7c932fe5663aab916aacc829fb5d._comment | 27 + ..._8cfb9f2c14559a7574edd29b161cf7c7._comment | 19 + ..._fd23d0559018c531595cd06f81290258._comment | 12 + ..._c374eb44ea08f220dbcce5ecb88403fb._comment | 16 + ..._git_remote_does_not_run_concurrently.mdwn | 36 + doc/bugs/corrupt_backend_upon_sync__63__.mdwn | 78 + ..._9f248d82f93040b739b56515d18458c7._comment | 24 + ...y_where_a_mountpoint_should_have_been.mdwn | 29 + ..._41cfd5e48426a6ef52bef70a06a6f46a._comment | 11 + ..._bd584ccbe128427fca99e61d66d301c9._comment | 18 + ..._5bb0347215b321444643646f25a35759._comment | 10 + ..._73848a9c783ecf3d9fccdd41b20fbe36._comment | 56 + ..._64bf56f2b0ff206c3caf5cadebfd0cda._comment | 20 + .../creating_a_remote_server_repository.mdwn | 24 + ..._de1a370347428245bcfca60eaca96779._comment | 10 + ..._482ac9b0f881099910f9bd9f7cda184d._comment | 8 + ..._b7c7f684d0eef14fcc00cb2ac0566703._comment | 10 + ...orktree_configuration_from_submodules.mdwn | 58 + ..._ca12be107b7a7dc36cb71595e347ce28._comment | 15 + ..._b7f03cbb85862ed294ecd0f8cbbd2086._comment | 15 + ...eads_to_git-annex__58___SQLite3_error.mdwn | 115 + ..._aaea812a8f2b04d9b17d1ba9c6fad39f._comment | 60 + ..._c55f2d95f7f08e6f6439f36790e5a538._comment | 16 + ..._b49a3df3b13f564e588824910a07bc43._comment | 11 + ..._a9e6e37dbaa1664d825bdbd64de4fbdd._comment | 9 + ..._3a5eaa2492e4c62a15b4fcee7f96d9dd._comment | 8 + doc/bugs/cygwin.mdwn | 406 + ..._88b6c7d1f50d0f17443ee74b5886649c._comment | 16 + ...mark_repo_with_empty_description_dead.mdwn | 13 + .../describe_what_git-annex_actually_is.mdwn | 14 + ..._25fc9ffb24fc4c96b81a6393427bbe95._comment | 8 + ..._1f6ec7cedf56863b261bad0e3f3c80de._comment | 8 + ..._as_boolean_true_value_for_autoenable.mdwn | 70 + ..._2f13e023228fa4938dd314e040a8ec10._comment | 37 + ..._01985a25dbdcfe487e28aaeb5823fded._comment | 25 + ..._136e937bdeda3dec080b49d4755d1fba._comment | 90 + ..._aa4ae6db181b1261a36ad06f223ec28f._comment | 8 + ..._ea204e2190c5a34cfcb3dc0e0710a4e3._comment | 10 + ..._2f998fab7d88a9ade53354d1820248ea._comment | 17 + ..._bfbc9a9fbae3715fea0f4a11549ec8a9._comment | 40 + doc/bugs/done.mdwn | 4 + ...lustre__58___SQLite3_returned_ErrorIO.mdwn | 52 + ..._49e8920ad09ae71874686f50f566b77c._comment | 32 + ..._5f5de9dc70bf61c8a369841b24a5ec2a._comment | 13 + ...pecial_hybrid_encryption_remote_fails.mdwn | 57 + ..._09e26fdacfb5c159997671680dc95ab7._comment | 13 + doc/bugs/dropkey_-z_does_not_drop_etc.mdwn | 45 + ..._278595e3bb8fe54357ea3ee78f780ccf._comment | 13 + ..._d387dff8a99f9733db7856c4b216beff._comment | 20 + ..._52f21e094853f787c18f4b9737d9771f._comment | 8 + ..._a2f221d36d538c89fa5786a3ff12bbfa._comment | 15 + ..._46d527889606595da1a6b00b631ee2b7._comment | 15 + ..._d6377ddfb9d907d56c70141b0c3a8a32._comment | 11 + ..._57b63abb8ccb7fbbd71afd599cb9ef5c._comment | 18 + ..._c537d9ff75804fe4afc174791c427df4._comment | 9 + ..._f3bcf33b3b3882073765250c2d113180._comment | 13 + ...urns_ok_but_doesn__39__t_delete_files.mdwn | 55 + ..._61fc9ee219d3042e1e32e35b5086ef4e._comment | 13 + doc/bugs/duplicate.mdwn | 1 + doc/bugs/enable-tor_failing_on_Android.mdwn | 109 + ..._7592b563c0ddb338e1f39ff6cf5fa1f0._comment | 24 + doc/bugs/enable-tor_unsupported_on_osx.mdwn | 30 + ..._with___34__wrong_reason__34___stated.mdwn | 46 + ..._c23de4c4ff536a214c795a805957c9f1._comment | 24 + ..._c75d3a033b1b8699e512df4641a38548._comment | 13 + ..._39e13618336181485175dddc7185160a._comment | 8 + ..._c7a5c3dfaca25fad2edf9575f65629e8._comment | 18 + ...ing_fatal_error_on_auto_annex_upgrade.mdwn | 96 + ..._041e664be0a5ae635cf5848d9fee380c._comment | 9 + ..._b0deace2dcadbd50c0e0cb155041b255._comment | 16 + ..._60f745051264fcacdce882eb8646b3fe._comment | 56 + ..._9e32aa105bbf11a6d2610a62bfa9517b._comment | 13 + ..._28d35ef30f76ec326363d86ab2948ad3._comment | 32 + ...e_doesn__39__t_work_with_enableremote.mdwn | 44 + ..._ce62150a3bb8c6be05b9f2ddbe64ae8b._comment | 39 + ...nnex_filter-process_died_of_signal_15.mdwn | 101 + ..._02da33e41e4f4471d1ae08e9fede229a._comment | 17 + ..._5ebfc18008cf4bc21ffce57067314fc0._comment | 85 + ..._c74018853a4da8e609da1803051a6893._comment | 14 + ..._0a80393f055ead9a3a62da0aa4ec3298._comment | 54 + ..._8b27c6099afea7011717492f53fcdac4._comment | 7 + ...ting_internet_archive_item_via_web_UI.mdwn | 47 + ..._4047d926154b444f33674f4db52be04d._comment | 9 + doc/bugs/error_during_copy_to_S3.mdwn | 40 + ..._14740dc386510409a8fbda5635eee831._comment | 14 + ..._157d4bfcb593cf380445caae0523dbbb._comment | 11 + ..._0e1ed01fc34a5a98c67dd290cb58481f._comment | 15 + ...rror_on_only_repository_copy_deletion.mdwn | 16 + ..._af394ac0956ab33a77256bcb02ef2a0f._comment | 14 + ...file_size_0_from_external_spec_remote.mdwn | 90 + ..._6af7ba08e93349b2c6176f91ba25a06f._comment | 11 + ..._1d78459554bc12d0423a317bd9f466d1._comment | 17 + ..._aa083a54e0c77cdba9939a061b509488._comment | 11 + ...95__subdir_started_to_fail_some_times.mdwn | 36 + ..._cae9d3f611a2b08d47466e5e5c6e80ed._comment | 18 + ..._8cfd20ada49f2441ad305b2225a738bb._comment | 8 + ..._6b3e21c80fd75d153282cd4170f4b9d2._comment | 20 + ..._e49f6175def95abcd353708acbfc3519._comment | 16 + ..._45a95910d34d602a916282e4e8ec9a08._comment | 9 + ..._78b6f81f900fb4d28808005d223a9da8._comment | 20 + ...oesn__39__t_copy_from_adjusted_branch.mdwn | 35 + ..._5ff140be453458e84bd6072594e70d8a._comment | 16 + ...tree_interaction_with_adjusted_branch.mdwn | 9 + ...l_remote_export_sent_to_wrong_process.mdwn | 87 + ..._831bdc33451de9ef5c54592a7455683f._comment | 46 + ..._8ff0638891c38f423d792f5c3cbfb64f._comment | 16 + ..._d774a7319bd1a1778adb2004229f057e._comment | 12 + ..._db89603335995755d145141705ac4584._comment | 13 + ..._48656a34262fce77ac50836d1d38b9fe._comment | 9 + ..._e38b776c73affdbb06f3debdddb07e59._comment | 9 + ..._6a85fcfa3eb0b4974733a62bcc0bbab2._comment | 12 + ..._c4610009f691ce60940979b73bef4d78._comment | 14 + ...mote_protocol_unable_to_parse_command.mdwn | 33 + ..._a10012aa7df76a2366ea40da8c37b798._comment | 10 + ..._a4556ce5c5f40ca022385cfb3a97ddac._comment | 8 + ...enticate_into_S3_for_initremote__63__.mdwn | 32 + ..._a7fcd34cf9376e900db832a8010df7d7._comment | 11 + ..._on_git-lfs_remote___40__gcrypt__41__.mdwn | 246 + ..._ba5b0ed901c99a23ff72d68b83c0d2fa._comment | 18 + doc/bugs/fat_support.mdwn | 13 + ..._04bcc4795d431e8cb32293aab29bbfe2._comment | 12 + ..._bb4a97ebadb5c53809fc78431eabd7c8._comment | 14 + ..._df3b943bc1081a8f3f7434ae0c8e061e._comment | 11 + ..._90a8a15bedd94480945a374f9d706b86._comment | 10 + ..._64bbf89de0836673224b83fdefa0407b._comment | 8 + ..._a3b6000330c9c376611c228d746a1d55._comment | 8 + ..._a0ac7f2c44efc8116940c7b94b35e9d0._comment | 7 + ..._acc947643a635eb10a1bff92083a3506._comment | 10 + ...al__58___Cannot_handle_files_this_big.mdwn | 96 + ..._e4f03a86a7adc6c5421d1e70c37659e0._comment | 17 + ..._546782c644230741470f9a9de23bd019._comment | 24 + ..._151e7cf96c7d168e1397d111aa47f279._comment | 20 + ..._3b47ce467eee2b903c0ed40e251d4bc1._comment | 88 + ...d_omitted_from_import_--json-progress.mdwn | 37 + ..._bea5a95e6fe120e1ee8c87ce6c55f161._comment | 10 + ..._stored_in_exactly_one_metadata_field.mdwn | 10 + ..._7fef3484f3019539c0a305d5f4a801ce._comment | 15 + ..._32285971869ec56460b3f0eee4edfa23._comment | 30 + ..._7bf423111829ec6b358c6925d012a3e2._comment | 11 + doc/bugs/filemanager_integration_broken.mdwn | 44 + ..._aa5afe9af21e534a6c0683064296d9e6._comment | 30 + doc/bugs/find_by_metadata_is_slow.mdwn | 19 + ...___40__repository_not_available__41__.mdwn | 87 + ..._70e050ef94ab57e74b45b18f3f9ca1f3._comment | 49 + ..._35df3798ddb3424fb26e11df53420d2d._comment | 13 + ..._584fce9a8a501e380426c123505bfdf9._comment | 10 + doc/bugs/forwarded.mdwn | 2 + ...ls__58___hPut__58___invalid_argument_.mdwn | 33 + ..._6b2c645f9ca440f4707c671a94566bb7._comment | 20 + ..._52185ae4ebdfcb61840444e3ef1e0404._comment | 25 + ...sck_--json_incomplete_error_reporting.mdwn | 53 + ..._979d52131fe94a9e800f939da88b369e._comment | 17 + ..._71fd5ede0aa24fcc6522a03010ccec5c._comment | 8 + ...does_not_detect_corruption_on_yt_vids.mdwn | 72 + ..._e7f61f04af8cc4c7ff9125fa37b90f4f._comment | 11 + ..._8f26d11cbfceb6928648fe40b890c49b._comment | 28 + ...es_--json-error-messages_when_--quiet.mdwn | 76 + ..._a23d96af8c0e418350a73cbce5bc24be._comment | 23 + ..._for_a_file_that_is_not_in_the_remote.mdwn | 47 + ..._ce9085e6330625dabf479e6e3beeeb47._comment | 9 + ..._59e89c065a3cd8f7c80cfdb3c2c2808d._comment | 8 + ..._264a1b39c1677545af4c02901dd23d22._comment | 15 + ..._f08e305e39953c5c1906df0fb2eb113b._comment | 10 + ..._39__ok__39___also_if_no_file_present.mdwn | 77 + ...ING__58___Remote_ID_has_changed__33__.mdwn | 50 + .../gcrypt_remotes_using_relative_paths.mdwn | 39 + ..._b4523baf0cdfc2ad70cded93b1629eca._comment | 30 + ..._45281c947992c2ab124efd0f109255d6._comment | 36 + ...phrase_ask_for_the_2nd_ssh_invocation.mdwn | 60 + ..._66386390af02c67c2e5bace223251f53._comment | 15 + ..._f818dadfa541520ac7ad2409b9174776._comment | 18 + ..._18e194d53646cb6049058635ad54fe1f._comment | 22 + ..._2766d9082373c11628006f14262509ad._comment | 8 + ..._a15a47b120c0c1c1c8ee5050d6105bb1._comment | 13 + ..._72f08e454aad5092acc609a6597d9872._comment | 8 + ..._81f23cf6fe835358c9b88af50eab22a5._comment | 14 + ..._bbcf4c05813adc2239c1f6017425f1c9._comment | 11 + ..._23715781fb5fd3ece5e042be069812ab._comment | 7 + ..._a037b7da3c4f2e04b23706592f04b0ac._comment | 9 + ..._6efb1a75b236b4384d1d2fccc3ab30b8._comment | 12 + doc/bugs/get_is_busy_doing_nothing.mdwn | 83 + ..._10fea4ce67f5f9c6c33ba2a23a185f8a._comment | 14 + ..._36dd4a0dba9e544d18376013e879b9c2._comment | 8 + ..._795ffef1e6a9f1acbd4394c1fca3818e._comment | 18 + ..._afae18b8b3a17f376b9a345059d9dbd4._comment | 11 + ..._bdfbcb8b6052a3c904e46678fce6adeb._comment | 14 + ..._9f6fde051e877638a56094d3179dc550._comment | 12 + ..._4d375d35a0d05d99c7becf591823d6b8._comment | 25 + ..._f687c46fb89009712247fe480f0f9566._comment | 41 + ..._0e5796c55c76dc8b37f9fd875d87eff0._comment | 41 + ..._216aefa4a78d13cc0c46780161921a36._comment | 22 + ..._ea9363fac84619b72d6c9f2a3a5c2d6d._comment | 15 + ..._981cc786be798a612046d207c0f85955._comment | 28 + ..._eabe406ab0d6e71c3f5f30908016a592._comment | 29 + ..._711bf1ba8688bdc3bf33e7103340bc11._comment | 11 + ..._3671d133d18f6722901ed01a1fa38164._comment | 30 + ..._054db0e62994590631737b9bd768d901._comment | 7 + ..._4766362f74f135887d5b6103db9a8a06._comment | 42 + ..._d02b310b007b304e0eda23bd5e565851._comment | 16 + ..._45168f110bded2f8c8f9777e1edda945._comment | 13 + ..._8b11e01481065814d2b35f9d728df9f7._comment | 61 + ..._f06b9085e1d48298c6c1739afb17d2bb._comment | 84 + ..._422aed4fc2729483e1479cadd54f45e1._comment | 15 + ..._28da709b2152b1ce1d0c926b099febad._comment | 15 + ..._c9594a39c44f7fd6649c418dbb5d2c59._comment | 97 + ..._7a7f6e9793817884a309632e4ebaba1b._comment | 18 + ..._0b507f49b6c23d9a9e1557fe96ad58b1._comment | 24 + ..._6209db4f931bced0f6782d231aa45452._comment | 40 + ...nning_on_OSX_with_HOME_on_crippled_FS.mdwn | 32 + ...efinitely_in_an_STM_transaction__34__.mdwn | 56 + ..._c9d7057b9c7b7811a29dcc59b98f97d0._comment | 27 + ...mote_with_same_name_as_special_remote.mdwn | 13 + ..._7f28aecc6ecefd7d47979f73330759d2._comment | 18 + ...x-import_imports_outside_of_directory.mdwn | 31 + ..._30dab036949bd35e026a31974c4e5164._comment | 16 + ..._376302b0bac94ee81c0dfdcb647f3b3b._comment | 25 + ..._e74c71a5574a8e99503ac83a27d48533._comment | 17 + ..._778e176a44aa57e9223aab1a45c931f3._comment | 19 + ..._3406ba56525cb59b8b1b366e2b3dc291._comment | 26 + ..._5b41c061786fd49c75d49aa2cc70bb9f._comment | 21 + ..._6d559ba943ef2a8fed285c463eb2a641._comment | 9 + ..._d6aaa0519faa596fa42d22fba405cbff._comment | 11 + ..._4f9816f7c9a61289bef98820b1ec25cc._comment | 16 + ..._372c44296c1a03778e201a47ec45bee6._comment | 9 + ...ort_stalls_and_uses_all_ram_available.mdwn | 66 + ..._ca22165fc77a57979ad6e19c60693b21._comment | 25 + ..._2025b1662067bbfaab14576d9e20a6ab._comment | 11 + ..._5943379450c860b2885121e7f0abd42a._comment | 14 + ...Android_crashes_on___34__arm7el__34__.mdwn | 90 + ..._af1de40a3c83f8632f98ecde5a5271f5._comment | 15 + ...nnex-move_not_using_parallelism__63__.mdwn | 15 + ..._1080a771213dc524cbd072591030c98c._comment | 16 + ..._a83e833b329df094e1bc7945db9686b0._comment | 8 + ..._bdd1aabe7120c4e6b5999aaf396067bc._comment | 8 + ...ex-repair_claims_success_then_failure.mdwn | 52 + ..._de8dfda0bc321e573ab9d17aec1ecb84._comment | 19 + ..._3d2c3827de34509c0a5595eda07dd18f._comment | 13 + ...k__44___while_git-annex_expects_it_to.mdwn | 29 + ..._b0a4f459d40bca7a0b24d1bec1e0f4a8._comment | 8 + ..._335fea47cef83b6dfad7ce8c53193f82._comment | 12 + ..._abaeb3d5c0322deeec790d80b2948549._comment | 9 + .../git-annex-shell_fails_to_run_true.mdwn | 166 + ..._7573eb95bdecc3ecc9b31599bd309d3d._comment | 31 + ..._5be34b5ffaee39013d24daf83a8dd437._comment | 17 + ...annex-sync_not_quite_idempotent__63__.mdwn | 90 + ..._d90a0f326840137872f551e54c2d2a53._comment | 31 + ..._ba60267d8b34ae9e277ae992dcfcde96._comment | 8 + ..._2381583c924561cbe46186fbd8fbf654._comment | 120 + ..._44c082a9321806ca2a60debf829f9c39._comment | 22 + ..._86187583d3128f2d64d1c5d58b31283c._comment | 63 + ..._-__62___assistant_requires_s3_bucket.mdwn | 14 + ..._5ec1d63e8f2896876fc88d53b6170b74._comment | 18 + ...d___40__Operation_not_permitted__41__.mdwn | 46 + ..._2d68f1f5019621bccfd59be5066fdcbe._comment | 18 + ..._89b9f0cabdfac72ce6b0b9461672705f._comment | 11 + ...urce_vanished___40__Broken_pipe__41__.mdwn | 18 + ..._e962317a939bf76097ae1a3b53b146e6._comment | 14 + ..._b32472b4c9b61e7a33dca802ecafb05b._comment | 11 + ..._fcfea3216831df9afbd855fbd842c27e._comment | 20 + ..._30d0b40efa59eeecb8a4be6d1baa1520._comment | 10 + ..._4af107f3184bc2abd2c9693167018628._comment | 8 + ..._f96027f1e3c405809fae42ce8533c6d1._comment | 8 + ..._b6fe89deb468a7e4f63f7faab147e3fb._comment | 12 + ..._ebec5d9266604f03959dc16d933ff4a4._comment | 13 + ...__14__58___hGetLine__58___end_of_file.mdwn | 51 + ..._36756f5d9d591cc52113c5cc0c1eae91._comment | 8 + ...eadDirStream__58___inappropriate_type.mdwn | 33 + ..._1b988c92ae79e6d9ddc487bea358dec1._comment | 22 + ...t_being_pushed_after_git-annex_forget.mdwn | 30 + ..._babea9a16f25b471026732ea63dd78a8._comment | 14 + ..._dd24434631ae3898e8f5c1f878d1965f._comment | 9 + ..._70f2b9e61e90528fdbef4d8a6e8dd972._comment | 13 + ..._11e9ceb40aa5492a1a3e9ebfbd246832._comment | 7 + ..._20ee285d62c35e18b78b121d8e4de81b._comment | 35 + ...ch_shows_commit_with_looong_commitlog.mdwn | 74 + ..._b83888a98075125dd043f323c99da03b._comment | 25 + ..._4a7d824b6e75693cf47f6efbf2c99e2e._comment | 10 + ..._cbbeaa691d102bd7d29f5e9bad9d6f53._comment | 32 + ..._094191b806ac76b2aef325733fe37136._comment | 8 + ..._c97926b15ba320f57a6441f9844cb139._comment | 7 + ..._3b70a60ef1c47871a3933176eac38174._comment | 40 + ..._fc56ec87725c7427794b70ee2ba2822a._comment | 12 + ...t_to_freenet_cloud___40__webdav__41__.mdwn | 36 + ..._db7b584c1e932d24e0dcf464b023a659._comment | 41 + ..._72e9ecc6acdc555e36f5588120d070fa._comment | 39 + ..._b2ef283a3933e22542e05ce9a1acef7d._comment | 38 + ..._7a139eb2c11ab2e32d22ca0f8bb648a5._comment | 17 + ...ied_of_signal_11_when_syncing_content.mdwn | 30 + ..._e982f985e5ca57454725e9e9a482e30c._comment | 12 + ..._e920f624ccf2e3a9c71a00105ebc3595._comment | 16 + ..._373e63d55e07cb5cdecc4e01d5d52b79._comment | 13 + ..._678a0136f143d2d7874226b3fc744eb2._comment | 24 + ...stall_on_windows_without_admin_rights.mdwn | 24 + ..._2533800ab5a95c5d71c3b47a630e751a._comment | 10 + ..._5b71785acf16a8d9ea457726599daef3._comment | 8 + ..._63e4ff79bc683a70dd9a85c66e26e56a._comment | 8 + ...7____47____47___target_URL_on_Windows.mdwn | 31 + ..._f0d30a953f072f8d9a929a4a6ba69914._comment | 48 + ..._504ea07f798838710cdbf6133135c815._comment | 39 + ..._a9bd50ebe805afefab103da31b88cf89._comment | 20 + ..._f2bd555ca36b42dac6a213e7c947f1f9._comment | 32 + ..._e00d70ba6b88d9cf60fcb183f7ea4980._comment | 7 + ...x_findkeys_does_not_know_--largerthan.mdwn | 50 + ..._f6484f69669439ef49513b84d3bd91cf._comment | 12 + ...eport_the_files_it_failed_to_download.mdwn | 18 + ..._074e49431bd18c43164872de3733b0e8._comment | 8 + ...t_with_umlaut_characters_in_filenames.mdwn | 59 + ..._0724d70364f7067d864a80a39e2e609a._comment | 17 + ...annex_is_slow_at_reading_file_content.mdwn | 55 + ..._d04b5bc031f73363d44b81f436b59781._comment | 10 + ..._cab37d851237a7798f74867e08aaafb9._comment | 33 + ..._466a365bca48065cc6b9e280b5c385a5._comment | 18 + ..._0eb12582a3e182b697a07b833cfbe384._comment | 13 + ..._ed54af250541e2add89938b939016659._comment | 16 + ..._786b21544854ad719eac07d08ba8d206._comment | 14 + ..._190a153449f7bb07fb4aca89db236881._comment | 26 + ..._492a11bcabc20b02239bc3b12438a51a._comment | 10 + ..._1367e6e461a9a049527197c262635c2f._comment | 8 + ..._123c81ad10aef15814f1c831e18c0a23._comment | 17 + ..._2885c2f164dbe59234568966e901bdd7._comment | 9 + ..._559e5c3b5ea9c166b3aa4a2e975643c6._comment | 12 + ..._c8b4c2e955b4ef5caaaaf2f834fb37f8._comment | 12 + doc/bugs/git-annex_merge_stalls.mdwn | 18 + ..._31578a754945bdcb902c62ff58704bcb._comment | 17 + ..._f3b6bf180466b5931bfd20b2f0229422._comment | 10 + ..._ced9b0d724fb55c756106b64c3721003._comment | 18 + ...immediately_if_run_as_systemd_service.mdwn | 243 + ..._8573d3bb5ae9f3490265767128027ed1._comment | 14 + ..._34fa48bba13bf896e6b3809ec22fc58e._comment | 10 + ..._9b3040c521ec1992ec03c06a579dd627._comment | 16 + ...sses_up___126____47__.git-credentials.mdwn | 39 + ..._5fafcc62656bdec4eecdf35cee4c6a8f._comment | 23 + ..._f8435628336b472107b478fe11628186._comment | 8 + ...it-annex_stack.yml_misses_extra-deps..mdwn | 92 + ...ng_up_all_available_RAM_after_startup.mdwn | 49 + ..._b550f292359b44977481bf69abad4012._comment | 14 + ..._76e6c1d4db27bcc1767ba34e13e8211c._comment | 8 + ..._14007c8e927b75c5706e80cc4242fae4._comment | 8 + ..._f3266b74517b421e5310e67818fe3969._comment | 12 + ..._1a07f15eb0353768c1e67a1e47e2e494._comment | 9 + ..._7d0d49fd165af5e30606982e05335d34._comment | 10 + ..._2b0ba2a15af04731a966a029be9b81aa._comment | 11 + ...won__39__t_execute_on_WD_My_Cloud_NAS.mdwn | 58 + ..._b87b50ca08bf90ecb7d741a6baa1dc4d._comment | 17 + ..._6c95d0fd70fbf41eea4e6575486af3f5._comment | 48 + ..._6dd54179aad379bb22638db518bd377f._comment | 7 + ..._614da8cad46df5c71539cc5a8ed11831._comment | 8 + ..._5fa9d10ebd639eb1a836866b99e90aab._comment | 10 + ..._8e05f8769870b3f1aec77fca06f37284._comment | 7 + ..._8da1f5fc6656e92dc2e3dabd9808f2d1._comment | 13 + ..._48026cf7c187e97d53d15d35ed2c3670._comment | 14 + ...ailed__58___No_such_file_or_directory.mdwn | 43 + ..._984f75d8078f2809486f38ecb3b16be3._comment | 10 + ..._c0f07e2d4bb142389629050479dd1465._comment | 10 + ..._7a58a884aaacedca9697b17cd5248214._comment | 33 + ..._aa4f1806207138115d2a95935bb0546b._comment | 8 + ..._fa95f93416e3d6e66af557df6562f1e5._comment | 8 + ...it_annex_assist_adds_gitignored_files.mdwn | 39 + ..._assistant_adds_dotfiles_to_the_annex.mdwn | 35 + ...it_annex_assistant_exits_with_failure.mdwn | 161 + ..._247d4da208cd700851d48f13534d5f7c._comment | 13 + ..._c6c04006b1d9aa6be92f5a970ba60618._comment | 15 + ..._eabad530a55adfa4be3eae0f743d3309._comment | 14 + ..._204764bb40509d8650386227ea166a6e._comment | 12 + ..._0453ae9123b359757e63c6eb5f12811b._comment | 40 + ..._5b0310038a8b45d2083f39ea75c1a979._comment | 8 + ..._63b3ec113d52501237abbe6ee1ef5fa5._comment | 45 + ..._annex_assistant_failing_with_ARM_NAS.mdwn | 29 + ..._00ca17dca9da3ddb81514d319cae0ef4._comment | 14 + ...annex_assistant_leaks_a_lot_of_memory.mdwn | 9 + ..._a4805854c448e4bc70a47f5555e0f73c._comment | 21 + ..._e9dca04e0456ca7356996365a4b87d59._comment | 14 + ..._45ae862d4f940341d48d179583e65d66._comment | 38 + ..._d597e15e9693ce6e8c1ca80cb225b044._comment | 21 + ...annex_cannot_get_my_files_after_clone.mdwn | 36 + ..._52c91f8d2e8086b26a078a02d036c197._comment | 28 + ..._545c9daafc63c5cdb80763b929c8d622._comment | 32 + ..._ef9b32d9ba1b80c313db48be36cc90d1._comment | 26 + ..._d1d13d1f3366026957d572b930cafa4b._comment | 8 + ..._f8b58f9c5acb509871cc4a64b66de6f3._comment | 8 + ...nex_connecting_over_tor_does_not_work.mdwn | 82 + ..._35c33ae1d69382a03c94f4a20ec22f7e._comment | 17 + ..._5df90e5ffbd3f089a0f640d4a5b85a1c._comment | 8 + ..._9fa2fb82ae3d17a77a9645870e1e12e5._comment | 12 + ..._macOS___40__but_works_on_Linux__41__.mdwn | 21 + ..._6c044f007e66b951cf08b86f9be49ed3._comment | 10 + .../git_annex_copy_to_s3_out_of_memory.mdwn | 63 + ..._5c0b73214c8f0ecb197cf0e109ff2729._comment | 18 + ...es_when_authenticating_with_jabber.de.mdwn | 26 + ..._5ba4f22bda2f5438fb08753cf149b649._comment | 12 + ..._b096cfdf26bfedfff16d882d7b2e060d._comment | 10 + ..._210be77aabb0ef5b85865cd08c51861e._comment | 12 + ..._bb974d882fbb31aa54e6de38410a2318._comment | 8 + ..._be655cbea27b6c87d298a75e1697a87d._comment | 8 + ..._72d1dac6627bbe22d5bd140215d82c47._comment | 8 + ..._8a8dfb15684525e156d6334e9f67a55c._comment | 66 + ..._f1a6e413756066659020e20147373a11._comment | 8 + ...remote_gcrypt_failure_leaves_a_remote.mdwn | 31 + .../git_annex_enableremote_locking_issue.mdwn | 56 + .../git_annex_forget_does_not_propagate.mdwn | 30 + ..._591c3c59d831ed94268f90505a8baaee._comment | 8 + ..._9026452178c82d0661acc96d009e3764._comment | 14 + .../git_annex_get_--batch_does_not_work.mdwn | 27 + ..._52311b95bf29706d2b1afb3904428047._comment | 9 + ..._b4fa614626393e01c51b937401bbaa23._comment | 9 + ..._e972b9fb5c6af4ecd295dc954bb2f55a._comment | 35 + ..._f0c498dad3f4d51e33de863165f29410._comment | 11 + ..._603adcb0b5091ac2fb3c9225d2925dc3._comment | 14 + ..._56716644ee1534b8fe90ba502856455c._comment | 14 + ..._b0588132d02f982da7c7208087b0afe2._comment | 11 + ..._0e776c598c5e0f4f51f5e9ade8c3f0e2._comment | 9 + ..._0c802c9c5734e7dfc8cd72962fcf2983._comment | 11 + ..._dangerous_if_you_have_unused_objects.mdwn | 42 + ..._9f9d5c18c27dfd33a5bf2c593ee65b58._comment | 31 + ..._f64891ff6fe0cd0be6a356ab8fe42817._comment | 11 + ..._d980c1e2d788324049475e468a0d6fab._comment | 23 + ..._09b860a14bb8bd49f2067e8ddb0aacfc._comment | 39 + ..._1e737b740bc7d95f3329e3481d55fd35._comment | 20 + ..._6def3c88ced56753e4b12ce221d33769._comment | 17 + ...x_move_--unused_not_moving_some_files.mdwn | 34 + ..._3fe94ad69d28f16598fdb8f98d7ffa54._comment | 9 + ..._91cdee93a29eefca78c1e49878b71574._comment | 9 + ..._40d839105047f4ac2996b53705601cc4._comment | 62 + ..._023fb25740f8363f8e72c12f020aa0f4._comment | 30 + ..._85ef3d6a4f2e67f16ee4bd30e58ef4fc._comment | 18 + doc/bugs/git_annex_push_fails_on_Windows.mdwn | 107 + ..._a7866c2131df8132e9aecebda085294c._comment | 20 + ..._d5c9fd2acdd5b320563a708889e82852._comment | 27 + ..._fe3818a184e723f86d094253461d8f44._comment | 8 + ...x_repair_failed__58___missing_objects.mdwn | 48 + ..._9f2166545159890b05ea061e2ab21a4f._comment | 166 + ..._7571de4a3ab7030a877fa198fe4810b1._comment | 48 + ..._317bee33fe675a5abb6fe65540a33d25._comment | 14 + ...stdout_isatty_when_reporting_progress.mdwn | 33 + ..._6c7f745ee77e9b7502cb13d3babf211b._comment | 8 + ..._e2139a3d1d06772d06992a38140e51d3._comment | 17 + ...x_still_deleting_content_when_merging.mdwn | 97 + ..._cb51e25c5e1656dcbb73b3ff680341f0._comment | 14 + ..._bbbcce7fc5f34d733126c42be8ec0a1d._comment | 27 + ..._f31a73e0e2c43f6a7f158455eadaa56c._comment | 27 + ..._sync_remove_all_recently_added_files.mdwn | 61 + ..._58faf8b37bb276e6176233d3daa24db9._comment | 17 + ..._a39ce4a60c1dc7817c84f90eac7251a6._comment | 8 + ..._3cb07eabd0e1802dbe477bdc88f647fb._comment | 35 + ..._65c5f5f34eb8535d244d6075caf57c21._comment | 23 + ...est_fails_when_run_through_powershell.mdwn | 30 + ..._014466c5da1922d34a498648baeeba26._comment | 9 + ..._241ab999007eecaa2cd5a854e722e315._comment | 16 + doc/bugs/git_annex_upgrade_fails.mdwn | 35 + ..._26e3224b9aad57837969c309ae4bdcd2._comment | 28 + ...acter___40__and_probably_others__41__.mdwn | 33 + ..._861506e40e0d04d2be98bbfe9188be89._comment | 12 + ..._wont_work_with_git-dir_and_work-tree.mdwn | 29 + ..._cc3ea43301cd17b55794f9b9dd1e91cf._comment | 27 + ..._fb75f5941d355947b3f06165825dd012._comment | 16 + ..._8c7b21c8e500de719fc2909d0c9027e0._comment | 9 + ..._423126c9884267b3466470d4ec7301ce._comment | 10 + ..._80d9a46c608117fb9a381c59d4605ff4._comment | 7 + doc/bugs/git_commit_smudges_unncessarily.mdwn | 22 + ..._202cb8adc7a7b1119f5b4c1f5c6e9c7e._comment | 15 + ..._5b230c4b74da48099e8be0e264bbf3e6._comment | 13 + ..._c30e84ae438810cbab70c401fd5125c0._comment | 9 + ..._update__95__ref_failed_for_ref__34__.mdwn | 38 + ..._60ea64baccef82dc03ab300ca9b5e2b5._comment | 26 + ...ies_errors_when_using_adjusted_branch.mdwn | 69 + ..._1a6674245aed0c325361043d1100daec._comment | 17 + ..._ccadd646ec0fe7abec461c110bfb7ae7._comment | 20 + ..._2a6ef51c96a914be5d248b526ad37394._comment | 37 + ..._f9588887f75c0d17b87f2718b0584a94._comment | 37 + ..._a9d6cf6cd38bfa6f391beaf6831b0ef4._comment | 45 + ..._cfefa7ac1f538566ee028aa3996e22cd._comment | 12 + .../git_init_fails_on_a_worktree_branch.mdwn | 45 + ..._6614fc4b8f191702c1b78c5a3ce5de50._comment | 8 + doc/bugs/git_keeps_refreshing_index.mdwn | 12 + ..._bc76561ae4aaf932217c40109a8d04bd._comment | 13 + ..._a4c9ccb93a809aff61ae208d31ba0363._comment | 13 + ..._919fb06b3fc7fe9b54797a805873e3c8._comment | 26 + ..._b73f9c5603bc69867e1619d871a8abb7._comment | 19 + ..._f1b07147627b087231c776522ddc2826._comment | 10 + ..._e0bfde0d53042ce8d310f356f88c610b._comment | 9 + ..._35dff672dfd3c6fdc2b9fcdb9a58e154._comment | 59 + ...s_ls-files_without_--exclude-standard.mdwn | 40 + ..._81383cf73102346fa8d537e1dde30353._comment | 41 + .../git_rename_detection_on_file_move.mdwn | 14 + ..._5ec2f965c80cc5dd31ee3c4edb695664._comment | 8 + ..._0531dcfa833b0321a7009526efe3df33._comment | 26 + ..._7101d07400ad5935f880dc00d89bf90e._comment | 27 + ..._57010bcaca42089b451ad8659a1e018e._comment | 8 + ..._79d96599f757757f34d7b784e6c0e81c._comment | 34 + ..._d61f5693d947b9736b29fca1dbc7ad76._comment | 12 + ..._f63de6fe2f7189c8c2908cc41c4bc963._comment | 19 + ..._7f20d0b2f6ed1c34021a135438037306._comment | 10 + ..._6a00500b24ba53248c78e1ffc8d1a591._comment | 21 + ..._75e0973f6d573df615e01005ebcea87d._comment | 9 + doc/bugs/git_worktree_remove_fails.mdwn | 1 + ..._e980c49fb53a785337e206feae34d032._comment | 16 + ..._2c6ce2244c885bb21ca82a841987dd47._comment | 9 + doc/bugs/glacier_from_multiple_repos.mdwn | 16 + doc/bugs/gpg-agent.mdwn | 5049 +++++++++ ..._86860841aaa38541968693ec02f6a506._comment | 10 + ..._de6f9b8f20e44e93759b9bf0db695def._comment | 9 + ...es_to_100__37___cpu_on_bad_input_data.mdwn | 18 + ..._889218fb7c0115b03d9bad0c07296097._comment | 36 + ...high_cpu_usage_in_cat-file_and_webapp.mdwn | 314 + ..._7fee933eb54272a0447851279d31825b._comment | 16 + ..._f26b8846e1651c507d259b9891d26136._comment | 21 + ..._89dbc16c9c1b74ccb3f46d3c558e0c8d._comment | 7 + ...multiple_remotes_simultaneously__63__.mdwn | 43 + ..._311a8a43d360074abd522fff14bfcb45._comment | 15 + ...otes_ignore_annex.web-options_--netrc.mdwn | 294 + ..._314bf6c825c8b4cd49de210f20f6cde2._comment | 39 + ..._599a66a1833000dc0e54a33511891b36._comment | 33 + ..._bed5008a429dd85dbb3389994f6d6295._comment | 15 + ..._a67253e52fa4510073d7df60d2bd4adb._comment | 11 + ..._d81762737f3854c75e804bad1697b517._comment | 12 + ..._e13932ead5920c7599031e85127317bb._comment | 11 + ...configured_remotes_behave_differently.mdwn | 134 + ..._14fa5263ee9feedff8c36f86e4c33fd8._comment | 351 + ...ee_on_adjusted_unlocked_branch_issues.mdwn | 11 + ..._a6aed4a1d1958e4734684b78b0f0a3de._comment | 8 + ..._7fc16d6ff0f1a61907bc34e8f8b71add._comment | 23 + ..._c75eee397fc6a53aa0ff55f993b790a7._comment | 8 + ...ee_replaces_files_with_identical_size.mdwn | 65 + ..._2742c2cbde12aa85b8254dd6907fcfc1._comment | 36 + ..._46336dc995a7cefb8ebbfe98f098e258._comment | 15 + ..._2b9bdb906043aa84ea6cf0d74a685769._comment | 20 + ..._9363ed782b5dc8d70a323fbc2574e7c7._comment | 8 + ...mporttree_spends_hours_reading_cidsdb.mdwn | 50 + ..._a2724ab85bc91fba3bb6e55d2b1e3878._comment | 38 + ..._a3fc6b67529ddce9e79c0e72996259ad._comment | 136 + ..._c1865c88d23873eb4b32489fc387f40c._comment | 121 + ..._6043be5152ba2d44fb9aac4063060b56._comment | 24 + ..._e961d2b508e3260670bb61a5ae51d109._comment | 12 + ..._35d233db5f7410048bd0cf9f5b4fd5cc._comment | 18 + ..._d0a7af6aecf8cb070c34edec1b3e2ecb._comment | 9 + ..._8fe8c0747a69ea977942a399ac929e77._comment | 23 + ..._b5ea8e5a761b254672171c3ab41e09f9._comment | 8 + ..._238c26c1a3f4ab7dd6ea3b2f26febaef._comment | 52 + ..._41ca70e65a59d620cedc7cf46a8305fc._comment | 257 + ..._d6d3db42bda1fe094140d54a458157b1._comment | 67 + ..._9320fcfb8bd47d4ee547e81fb9e01f38._comment | 23 + ..._333907125ccf24c2ad8286cd40a35b16._comment | 12 + ..._8f609e231fdf315d2b658d30d708d471._comment | 16 + ..._d54f2c81763b4119c881e283cff80d44._comment | 8 + ..._76fe32e5ecbf37b0f173de987c59e39f._comment | 14 + ..._512996afefabc75a0b2258fc05ccbfdd._comment | 28 + ..._1b6ff858daf39dd84d4ef39a162ca914._comment | 10 + ..._b8b3eb5fff4ad3478dfbbd2120d4b00a._comment | 35 + ..._1389db945973ed42b8ddd0de3cc8889c._comment | 33 + ..._58155dba65976fd92cd212e13f87b888._comment | 33 + ...en___34__succeeds__34___on_subsequent.mdwn | 92 + ...ang_on_git_status_with_v10___38___nfs.mdwn | 62 + ..._be44453dee893cc99759f90e660c0a66._comment | 24 + ..._e262ec0e438557b8d70a6adc50545ac1._comment | 19 + ..._c863d6940528fcc543815da44e7997d5._comment | 8 + ..._d54eb28d30d91088de019b761a340fd3._comment | 18 + ..._6439cb8500ad225fc4ef43a18582b18a._comment | 15 + ..._a959fa6cb5b4cda423b7e75aeec2eb1c._comment | 22 + ...ression__58___exits_on_first_bad_path.mdwn | 59 + ..._360a45c65c76e71c967afee1e3d355a1._comment | 11 + ..._scan_ignored_dirs_without_permission.mdwn | 34 + ..._621066a2d1e8ff9f5edc41001dc4072f._comment | 44 + ...ade___60__8_annex_version_to_8_not_10.mdwn | 69 + ..._5b9ba56f682a991a57872d021f2ff08e._comment | 18 + ..._419bf4e6ebce4bcaae3afc6420da80b8._comment | 10 + ..._425e81639f39d723b390d114a6d9e24b._comment | 8 + ..._a24860bb39cf920e34fac9ee6154b69e._comment | 9 + ..._3293f29b78d10aaf9254ddba1af6731d._comment | 13 + ..._f09aa0ebe68b5db72d466ae802ce20d5._comment | 18 + ..._2d354e2c1fc2f1f6397fd89f71bf29ca._comment | 17 + ..._in_a_folder_with_newline_in_its_name.mdwn | 36 + ..._2690ed9441685068c291a182d39c2616._comment | 20 + ..._of_aws-0.23_causes_stack_bld_to_fail.mdwn | 53 + ...y_even_if_all_sync__39__s_turned_down.mdwn | 60 + ..._e4b110f61502b5d37117ec65ec39896b._comment | 12 + ...many_stray_processes_on_remote_server.mdwn | 240 + ..._b66015587ccd3ca81de52271979bd026._comment | 21 + ..._4f417206d5d83bd456c8e501ae272cba._comment | 8 + ...aped_characters_not_accepted_as_input.mdwn | 157 + ..._823458893eb87f1331da050d68486209._comment | 38 + ..._bc1f89afe38c5136beb74160ff26e519._comment | 62 + ..._3aafdcc1b32439ec577fb090b94c6ac1._comment | 147 + ..._73c1495abff5284c42a8cf0537b19df4._comment | 26 + ...oadlocale_error_with_standalone_build.mdwn | 44 + ..._96a809060ed05100b6f8e5198ec699be._comment | 13 + ..._e1c443ba943a5883ca63fbf05d3e5b41._comment | 9 + ..._acb934b9e7d91aa59f49926e658c4bbe._comment | 19 + ..._39366d601e4200a953fe375c7c96f106._comment | 35 + ..._ce08bf5b13ae0db7fa06196f56a26e8a._comment | 57 + ..._a852f4b40506edf9948c7953b01aa340._comment | 8 + ..._b387cdacf97c476284640195e9fd03c9._comment | 23 + ..._7820a310f6bf5f6f4c6c58fbfea8c85f._comment | 9 + ...ons___40__e.g._.numbers__41___dropped.mdwn | 33 + ..._0e3e0966f06ded18ecfd41f8084b4658._comment | 16 + ..._2836fe9dfa7b5140df1ce893044c254b._comment | 11 + ..._1f4bc975621d24e6e43d887693ada800._comment | 8 + ..._2cded724d1a4368dca475b89010c23e2._comment | 8 + ...ar__40__er__41___on_what_is_unlocked_.mdwn | 65 + ..._b855c810464bb22bd76681d669313ae5._comment | 19 + ..._71b7b4417aa63e469636a03e460c2427._comment | 8 + ...l_doesn__39__t_create_git-annex-shell.mdwn | 62 + ..._8c20edd8c6483500f807528d616c6dfd._comment | 14 + ..._8b2cf0fe7219e0bc83fd326adbf26c8a._comment | 31 + ..._25fe06eb127e59a4a07aeb52a5cfeabe._comment | 8 + ..._ec78032ba62d6918baa2c0b07ead5b50._comment | 8 + ...on_--onlyingroup_works_only_partially.mdwn | 541 + ..._001927fce7b1c194076f76a092af414e._comment | 9 + ...e_causes_out_of_memory_on_large_repos.mdwn | 26 + ..._6d47485728ea65a9b555f8be7159dea5._comment | 10 + ..._06723d13ecdaf87de5ff2b209e3c5198._comment | 10 + ..._9f83ef190547b291a715cda55b7977d4._comment | 10 + ..._0e32ae0300472c56079cfbcd78a3e386._comment | 9 + ..._e8998716107e7ae8d0e8d332812517ad._comment | 14 + ...a_view_does_not_vpop_to_original_view.mdwn | 41 + ..._91c69150533cb6c2147dcf2eb480ef39._comment | 9 + ..._ca1cc0b0e5c53daffd0b5ca78a6ac43f._comment | 11 + ..._63bef9006a1e4ba2ebbfafbdf605a9e1._comment | 13 + ..._4873f0bc670b193cec3be327ee178a13._comment | 45 + ..._bf63c9d3e0de468ffa5856dcf7c313b7._comment | 22 + ..._83e389f5fdd58ffd62ead898ddbb5279._comment | 8 + ..._a5511e21ee6c09d8edf2bca48482d848._comment | 9 + ..._ef3e8e1c47984fc674e58646052205ef._comment | 8 + .../migrate_and_move_duplicates_data.mdwn | 36 + ..._ac3c5c141992c7b5d2cc36e085b0cba8._comment | 18 + ..._68a876f2eed5c446d92367aae4070408._comment | 16 + ...es_associated_URLs_with_custom_scheme.mdwn | 142 + ..._6e9a2b3ff2be4e2b3ff5b67ac913efb8._comment | 9 + ...d_files_not_showing_up_in_unused_list.mdwn | 62 + ..._2cfbf6693b051c758fe5efa5ee885829._comment | 16 + ..._acb1abeb32c3aba8ba65151afbea753c._comment | 10 + ...mimeencoding_detection_is_not_working.mdwn | 43 + ..._dbcdb6ae6fb1d06f4d5cf27cba4c69be._comment | 20 + ..._b9df7eb812a4a2fba4b1273fbffe8375._comment | 41 + ..._b02a321a1fd8aaeca1680cec96055172._comment | 12 + doc/bugs/moreinfo.mdwn | 2 + ..._when_not_present_displays_misleading.mdwn | 35 + ..._drop_stage_does_not_resume_correctly.mdwn | 14 + ...debug_for_failing_to_get_uuid_or_key_.mdwn | 45 + ..._6c3efd1922015a20daf93bea54fc6431._comment | 24 + ...epo_with_git-lfs_as_only_annex_remote.mdwn | 42 + ..._804ecf5218ce147767352fea8ea5eae8._comment | 21 + doc/bugs/no_git-annex_shell_on_Windows.mdwn | 28 + ..._72b2277c3728f02e4d158ebbd7db41b2._comment | 22 + ..._b212c8b8cf361745f35a9f7ff6fee1f5._comment | 11 + ..._9d445ddf84e15a59cdc2aa2b8dc30c44._comment | 15 + ..._988768c3e4f30c751034a0b0390cdd88._comment | 8 + ..._70a6c9af57eed4f8ceb3de63cbf8a5e6._comment | 10 + ..._7f48959c6242c5cc52e9d0a79fd3f85d._comment | 8 + ..._04b30dd9e510762ee547e7b45bdba660._comment | 12 + ..._beebbd4a41cccfc7aac3c19d76c3b978._comment | 8 + ..._957c5da5f336c7ef59e4149602471888._comment | 15 + ..._a8654cf656de55ccdcf40270a1ef4ca9._comment | 35 + ..._3c8bb1b1d67ca1a6e568e381d24a2574._comment | 16 + ..._03646c9df9d4f4ea27459660fe65a976._comment | 25 + ...ay_to_disable_repository_auto_upgrade.mdwn | 49 + ..._aab2cb260b68c25facd652946ea2aff7._comment | 8 + ..._dc24c6c0c60bb11d6d871fa62585276d._comment | 8 + ..._f3c10f35956dff886d961f1351af71ef._comment | 8 + ..._7ea295a6c113ea0cc3e4e5ae28769190._comment | 19 + ...rserved_when_exporting_tree_via_rsync.mdwn | 15 + ..._b92c67f7d2f0424ce399ca4659e6c805._comment | 9 + ...rd_output__41___from_git_annex_status.mdwn | 89 + ..._fcd230cbb2ac363c469b98021042c011._comment | 10 + ..._23207ecabd4b41d9551d0491fa71e96b._comment | 12 + ..._6ea92adfe955b6a5cd2a39fea78b3bf6._comment | 119 + ..._d0e55585f1612148163039d157253258._comment | 11 + ..._5506dc1b08516677886da4aa97263864._comment | 12 + ..._073449cc2cb73efd2b2d3d778a5573de._comment | 14 + ..._3516e71ba3b07427a10cbb4965712aa6._comment | 24 + ..._ea2e4704adb2f304f9c11c61eb62e919._comment | 8 + ..._4d17fedead7977541371a3f2c192e030._comment | 46 + ...ys_not_in_Windows_release_10.20230803.mdwn | 38 + ..._9969cdc389617f4df2ee286e8d28176e._comment | 7 + ..._b265af06b8edda75d305fd836f6c5242._comment | 13 + ...se__95__hiddenXXXXX_files_left_behind.mdwn | 52 + ..._b96ea3ece44d42e79e4d903ca66065ee._comment | 12 + doc/bugs/openTempFile.mdwn | 59 + ..._48b9ab6e3d4b24ec34d2a99b5a4ff619._comment | 9 + ..._a09c4a7d346c3b0f7025e6f3a276adb8._comment | 14 + ..._9b9f35c8ed31ca62b34d216c6906304c._comment | 22 + ..._3397f9ddb94d4acb8af778ec15487022._comment | 12 + ...egression__63___init_takes_times_more.mdwn | 57 + ..._7aed761c4843217ea4c90491897224c1._comment | 19 + ..._847e04bbe9c59700249136b7fef4d0b7._comment | 12 + ..._603d7228668a36dc848e706cdff64035._comment | 50 + ..._a79fcbe80060d11582989a9fc31d4a92._comment | 15 + ..._8c3b13806adb731435b346a64990527b._comment | 19 + ..._145e29b42c46f15efc21c6d1ef9dd82d._comment | 62 + ..._783ada9438a00c0a23357bea2f19d0a1._comment | 9 + ..._d13e85f691165b533d6630a93111c786._comment | 18 + ..._13ce5ec87207d553388ec23663d9abcb._comment | 11 + ..._3f32fa3c6de412bfdab8a4e67a30012c._comment | 18 + ..._5e0a9e36870cd21bed351ca37ffe9914._comment | 25 + ..._d92bd84ab3f218eb6ad38fcc7f54c223._comment | 17 + ..._a3a5c3182ecb9fdef82f4959af516d9a._comment | 42 + ..._652424afbe5484a679c55d437cf1e7a1._comment | 8 + ..._3961ac7f22f42886f0e30f62f1cb0c5d._comment | 9 + ..._0894259447bde6d676c629d5bce2a6ba._comment | 21 + ..._7ce86149c0d839f6d2b14f76bab288be._comment | 7 + ..._d4ba8c726e8b74d4692caf0d4afd214c._comment | 8 + ..._choice_of_name_for_adjusted_branches.mdwn | 26 + ..._adbbc90054eafefa7de58663868986a3._comment | 30 + ..._dc7b2ae4971324d34f6a8d89e888f598._comment | 21 + ..._19ce066c0b912398300caf8520f70eb3._comment | 8 + ...nt_does_not_allow_spaces_in_filenames.mdwn | 33 + ..._ca10638d4b4b178cfd0de8736542c4dc._comment | 12 + ..._986a393a512229d35e529ba242b77b1e._comment | 10 + ..._a66be1cc2c4ca7e470be1248dcbbe885._comment | 8 + ..._7a8f1ba849f6e6f6072c39bdbff49405._comment | 13 + ..._directories_are_dropped_after_a_sync.mdwn | 41 + ..._9d7591faf99ce48b1e5753c80306ae8b._comment | 10 + ..._7316cba69b9dc0415fea1389238edf25._comment | 14 + ..._0d53226a3991e3685d1311e4b19c4023._comment | 55 + ..._68bd50c6aeffc06d53eda7f38b06edee._comment | 7 + doc/bugs/problem_commit_normal_links.mdwn | 59 + .../problem_with_upgrade_v2_-__62___v3.mdwn | 3 + ..._5f60006c9bb095167d817f234a14d20b._comment | 8 + ..._cd0123392b16d89db41b45464165c247._comment | 23 + ..._86d9e7244ae492bcbe62720b8c4fc4a9._comment | 16 + ..._91439d4dbbf1461e281b276eb0003691._comment | 8 + ..._ca33a9ca0df33f7c1b58353d7ffb943d._comment | 8 + ..._f360f0006bc9115bc5a3e2eb9fe58abd._comment | 10 + .../proposal_for_timestamp_semantics.mdwn | 13 + ..._a54fc1bda24e04b15490d0eaa1838d28._comment | 19 + ..._8ba9e0c35e7761b99feb55bcdd6065cf._comment | 15 + ...oesn__39__t_work_on_adjusted_branches.mdwn | 29 + ..._2c5f51483b2f2521d98f943d8ded3acd._comment | 47 + ..._632a3616516605de477930ae09d4ca60._comment | 131 + ...ce_then_stopped_running_opensuse_13.1.mdwn | 13 + ..._a9daf9e8f968b32f25e236f53ea4b845._comment | 14 + ...nishing_when_assistant_gets_restarted.mdwn | 34 + ..._53b4f388c47c1b3f6ffa4fc2155b30fc._comment | 21 + ..._e66532b23b089c9ea61122d6664cddb9._comment | 10 + ..._c9d692c867acc076f64f1213ea03ca11._comment | 8 + .../redundant_transfer_not_prevented.mdwn | 56 + ..._does_not_register_if_external_remote.mdwn | 106 + ..._124bbd63a2a85004ff9cf965ad984fb4._comment | 29 + ..._0f4d7c7f208b965ece8f017a38d7d0f1._comment | 13 + ..._31330afe2ea5e543219edb9e8071239b._comment | 35 + ..._4f2c98add8a4f7b9f49e54e12fd79f10._comment | 64 + ..._b9057ce47bb57b3a3dbe390672310898._comment | 18 + ..._7a96a8a05e4a45477ec8b4eaea9374b1._comment | 10 + ..._649f04c1909ab803eabe2eea7f37c6fd._comment | 19 + ..._542bd923122ba24fe9cb14d36b97f15d._comment | 14 + .../regression_with_S3_creds_not_used.mdwn | 59 + ..._df5416ee63c8f026f3b3c77c74b67ce4._comment | 20 + ...heir_symlink_targets_don__39__t_exist.mdwn | 67 + ..._8a1d16b2aaba224e94be3d9dcc036d91._comment | 12 + ..._434ed328a22a6657dba3b2929a56e499._comment | 18 + ..._1837b70ace42882db3ab82e001680934._comment | 29 + ..._ca9c87a10f29e41572540edeb99652f2._comment | 11 + ..._69eafc4201e3014ef1b5d74fe319e462._comment | 10 + ..._b7a64db9abe006af8c30169ad849efe9._comment | 76 + ..._197ac6070f256131c6e18a07aa3834fa._comment | 14 + ..._fe07832333b536c71b7dcb46a4a44bd0._comment | 19 + ..._540bca4e6fdfc10eeab875ecc0f2b3f3._comment | 10 + ..._3f236b35e9820cd88bb77fcd57d6975e._comment | 43 + ..._3cc5dae0351201522711a7caeecd60d5._comment | 10 + ..._3c3883cb66d02a15d5de84d22aa113da._comment | 38 + ..._c8cece9559bd2dc6154cd28772369e48._comment | 10 + doc/bugs/remote_not_showing_up_in_webapp.mdwn | 100 + ..._2a269732fd528f505777542d3556437a._comment | 17 + ..._10638e99e2e11460f99266f56adbc1db._comment | 10 + ..._4aa72acc0938f7f824ba10f3f102e8bc._comment | 16 + doc/bugs/remotes_disappeared.mdwn | 300 + ..._7b7bfa0b2c9e66edd92c076e5c6ccdd7._comment | 21 + ..._b9dae978aeeee5e5d246192fed813b3f._comment | 13 + ..._794372fb37621f37478313abc4ee92cf._comment | 38 + ...dows_reports_ambiguous_argument_error.mdwn | 77 + ...fails_when_unlocked_empty_files_exist.mdwn | 171 + ..._66ff5ff20c4a1561943f8fc144a4dfb5._comment | 70 + ..._28e204f5db91eaa258428d89cbb9f6c9._comment | 10 + ..._68ddf1256149eec1ac01fb915d26bac3._comment | 35 + ..._785200bbdc9efabed141ecd51cb015a4._comment | 61 + ..._3b5f7c44de6b17e042adaa77a8bed2f8._comment | 17 + ..._baa4f1e895ff351b16f54d59851d2a6f._comment | 7 + ...rsync__58___protocol_version_mismatch.mdwn | 38 + ..._672d89a7d06d5ec336381b670a41a9c7._comment | 12 + ..._531b85c911d390b1b93ee55a8cf5d47e._comment | 11 + ..._eff8f33134157635387ee681805ff7a8._comment | 7 + ..._77e59a25c859b6afec8b75f74885ef5e._comment | 9 + ..._7d819c3e4af2b8044a52fa6131f36187._comment | 22 + ...nc_error__58___syntax_or_usage_error_.mdwn | 85 + ..._464d733de18f6ca438ebd84e88b8cee2._comment | 29 + doc/bugs/s3_InternalIOException__63__.mdwn | 28 + ..._42bd2d1e364203f1b34efcc34ac795b8._comment | 14 + ..._994dd3ebcf7eaacb0b9e06f1bc14a2d4._comment | 7 + ..._a69927ec705efa31aacb5941bf8d8f9d._comment | 14 + ..._ee791ad24d5d2c0ad4f82ecf6fc434a9._comment | 28 + ..._134d1d0ad9f59a2b7498d1ed335cf91a._comment | 9 + ...___public__61__yes_sets_disabled_ACLs.mdwn | 41 + ..._0bf1f463133476727129ddf15f24983b._comment | 43 + ....bareRepository_breaks_git-annex_uuid.mdwn | 21 + ..._0a5faade2dfbb0dfe5d94d37450ba06c._comment | 8 + ..._annex__63_____58____47____47____47__.mdwn | 58 + ...ecurehashesonly_conflicts_with_addurl.mdwn | 17 + ..._808e276381f98b4ebb7d61628db703d9._comment | 18 + ...ryption_bypassed_if_gpg_error_on_init.mdwn | 27 + ...o_use_ssh_hosts_from_.ssh__47__config.mdwn | 26 + ..._3dac095b7cf799e31925868d13888970._comment | 7 + ..._342b4913a063184650cdf4f541f7ea02._comment | 10 + ...d_create_leading_dirs_for_annex.dbdir.mdwn | 73 + ..._20cbcee65bccc3213e437ef347b52612._comment | 20 + ...d_error_on_whereis_--batch-keys_--all.mdwn | 25 + ..._724ae0427fb306352ff9b26d9fdef27a._comment | 10 + ..._when_attempting_to_add_ignored_files.mdwn | 31 + ..._f1208fda822d17a3a9e5457324fdd1df._comment | 39 + ..._9fe7fd6296db34ee8ee07fe68459e74b._comment | 17 + ...flict_resolution_tests_fail_some_time.mdwn | 57 + ..._bd9963c2a40b55bf745ce3d801a5da19._comment | 14 + ..._f7b38a6da0ce74c1d4224a37aad9246a._comment | 11 + ...l_remote_adb_-_Argument_list_too_long.mdwn | 56 + ..._34f202f91a16dd4d2bb557aee6fd5a3e._comment | 12 + ...e_variables___40__not_under_git__41__.mdwn | 17 + ..._3d162dce2af8d84c5582cf63624e9310._comment | 19 + ...ed_to_escape_characters_in_the_output.mdwn | 66 + ..._1d0f25da3af46d211445d10f0d6c143e._comment | 40 + ..._76c80e98cc2d26e4cebaac6e40e76df9._comment | 41 + ..._0fe421cd62c36804a78e4b424302e3d7._comment | 37 + ..._d3c423c3faecc115bb5bab3471226ee5._comment | 14 + ..._783b2bdf1826f472d8f39d01e81adf20._comment | 8 + ..._b8da1f30c5bc88f4ddb7878d790823cd._comment | 29 + ..._c855cc0728c71e9a4696a192cd331213._comment | 18 + ..._ee066c129d808ac511c0efce9a644ab9._comment | 16 + ..._41bac25db7cc8978659c2e202960a2a4._comment | 15 + doc/bugs/startup_scan_extremely_slow.mdwn | 69 + ..._68f88f04c179800c0ce1ff6925d4c6ab._comment | 7 + ..._116e850299372027481c9d0a1667d5af._comment | 25 + ..._3eb4c2290e560451e7341b85b58212b0._comment | 14 + ..._ade878000a050c87a345e8bc9914deba._comment | 7 + ..._4ee924e70d5a8e35e706eaaff4cc76e1._comment | 28 + ...ng_errors_with_parallel_git-annex-add.mdwn | 17 + ..._b38f13a4c28ad8ce26aef72e7d6fcb11._comment | 15 + ..._96312bab546412b1eecfa74aec1d7fee._comment | 11 + ..._e76ddebaf9d248c02d16a6914973d7d0._comment | 15 + ...h_the_annex_directory_exposed_to_http.mdwn | 20 + .../surprising_import_tree_merge_result.mdwn | 18 + ...x_branch_not_syncing_in_the_assistant.mdwn | 49 + ..._b832288844a3e7e944fa08a6edb97d29._comment | 18 + ..._fbfc8929497f609916d9f3e5a0a9b531._comment | 18 + ..._succeeds_w__47__o_fetching_all_files.mdwn | 101 + ..._500bc8f48ae80841e0db21ee0de76c50._comment | 8 + ..._9581f8135c6eb2ed2135f83a266e5306._comment | 27 + ..._dbc8ad383c4968b1ab78ac86bab06329._comment | 8 + ..._23a16e94a0f18126caa6cb2f94131277._comment | 20 + doc/bugs/sync_-C_can_export_other_files.mdwn | 17 + ..._7a6ab3ee25f0d09df4d7478d26ea2d37._comment | 30 + ..._loss_but_seems_to_just_lose_tracking.mdwn | 218 + ..._562cf3ab3398c1ef874c0bfe5d89e47b._comment | 10 + ..._f686273c6be899d2a8bbaabd03a47fbf._comment | 14 + ..._fd518d0601587dc5c718944d0b6f51fc._comment | 10 + ..._a6074b68754b0d773385a1e406043952._comment | 10 + ..._does_not_merge_after_branch_rollback.mdwn | 34 + ..._8c5f4787a6156802d00cfad1f7d2ee31._comment | 30 + ...sync_does_not_propagate_forgetfulness.mdwn | 35 + ..._acc9744be183c297c6410f9b0a30b46b._comment | 9 + ..._content_with_new_remote_on_first_run.mdwn | 23 + ..._c1df7f51ac724400dbef664ce10784a8._comment | 10 + ...hen_ran_in_other_than_tracking_branch.mdwn | 18 + doc/bugs/tahoe_remote_has_no_repair.mdwn | 27 + ...y_test_limiting_broken_by_concurrency.mdwn | 19 + ..._e043a71b60999cf97bd872d8b32fcac9._comment | 16 + ...posix__95__spawnp_broken_10_on_darwin.mdwn | 25 + ..._5741fabaa561b81989cc176e9acb4a99._comment | 30 + ..._3fb2b47ade727a1bc6a99120b68d98b7._comment | 8 + ...hDirToFileAbs__95__basics_fails_again.mdwn | 55 + doc/bugs/testremote_failure_with_s3.mdwn | 79 + .../testremote_is_not_honoring_--backend.mdwn | 41 + ..._2b119f8bce39266630dd7c0f4d8add98._comment | 8 + ..._f804c33243606cab4495238511e59743._comment | 24 + ..._1261222f79d9dbc8cf92f6466361e113._comment | 24 + ..._b6b4e0b7446f445591ac617e28e249e3._comment | 245 + ..._96a03ff1d7339643e8f74e6e536e8f83._comment | 21 + ..._7a9cb82671ff8a459886a84e66cb2417._comment | 15 + ..._ed8668ea11a905b90892eb684f93a4ed._comment | 9 + ..._3f17e1804ff779c5f9d00e56daf18ee3._comment | 9 + ...de_124__34___with_HOME_and_PWD_on_NFS.mdwn | 38 + ..._dd4734cec6290cd3eacd58545ef039e4._comment | 15 + ..._da46fc7a6bbdae0c3b44d241bc527b55._comment | 8 + ..._82b8570c9496ee1b111dbd1ea53e823c._comment | 8 + ..._e854aae525b7d4902fe2bc0f2c11ae5a._comment | 10 + ...does_not_support_Extended_Main_Secret.mdwn | 101 + ..._731db4542017bef831bc7a06b70f79fb._comment | 26 + ...ng___34__Transfer_stalled__34____63__.mdwn | 73 + ..._db83f6a38cae36da89f0ab4ef83021d8._comment | 40 + ..._2aeb065a257729e852055533aff04650._comment | 22 + ..._f8bd6a233d835bdc413bbf0127608431._comment | 20 + ..._320828c8d39d1f030d1797b539dbb22e._comment | 10 + ..._9fc2d7f4b39615e43bce3993e0a6e647._comment | 25 + ..._1b2eb9993e220082f3be5dd568deef3e._comment | 21 + ...ections_during_sync_of_gcrypt_remotes.mdwn | 27 + ..._8522285987f6d231c851861418af633a._comment | 24 + ..._f87b3ba05c0cdfadd4d5da894dea0abb._comment | 7 + ...s_problems_on_non-linux_based_systems.mdwn | 20 + ..._1d38283c9ea87174f3bbef9a58f5cb88._comment | 10 + ..._bf112edd075fbebe4fc959a387946eb9._comment | 8 + ..._a46080fbe82adf0986c5dc045e382501._comment | 8 + ..._760437bf3ba972a775bb190fb4b38202._comment | 8 + ..._060ba5ea88dcab2f4a0c199f13ef4f67._comment | 10 + ..._548303d6ffb21a9370b6904f41ff49c1._comment | 42 + ..._7ca00527ab5db058aadec4fe813e51fd._comment | 8 + ..._881aecb9ae671689453f6d5d780d844b._comment | 8 + doc/bugs/uftp_5__58___invalid_key_type.mdwn | 55 + ...committed_changes_staged_in_the_index.mdwn | 39 + ..._1c0cad1076d5d4d908b8297e7c13ea33._comment | 32 + ..._4609f9a1545b08e08021bf786561f5e5._comment | 9 + ..._6c99a97d56b1a3b12092c15fafcf8761._comment | 35 + ...nit_fails_when_I_symlink_your_symlink.mdwn | 39 + ..._3fe7520813dee36ffb5419ed70ea43b5._comment | 24 + ..._3afdea4f3705a9cfaa971ed3aa9f114c._comment | 18 + doc/bugs/unlocked_files_feel_too_slow_.mdwn | 35 + ...ork_when_drop_cannot_possibly_succeed.mdwn | 30 + ...sable_with_ghc_8.10.7_on_DragonFlyBSD.mdwn | 46 + ..._70b807c69be263fd53c578fe6ec84561._comment | 26 + ..._eeff3cb51df849b783446e238de002a8._comment | 11 + ..._641473e43c8da7e7be02658cf8d3bd3e._comment | 16 + ..._59e2ea4d59d5f4a8472cc8c945b8a419._comment | 7 + ..._27a017a942f805e9b0216e77d4890c86._comment | 8 + ...to_export_to_directory_special_remote.mdwn | 44 + ...te_format_generates_irritating_output.mdwn | 30 + ..._fceba878f1097e27f056580e8d6d5b31._comment | 26 + ..._416992874813f120721a56d88b2bef65._comment | 9 + ..._a20f470c5226ac5693eb15146a02b3f5._comment | 8 + ..._a81f06191bc03a7aad5929af99f0634e._comment | 28 + ..._7438caecf78b4fb5d21f9f31dff95cf2._comment | 14 + doc/bugs/v6_appears_to_not_thin.mdwn | 80 + ..._d62791da504f6cf9bb26fa588756234c._comment | 36 + ..._82ff17c4063791d91a4fbe4e31802595._comment | 82 + ..._69afd9bc3f250418ba33cb1abeb2078d._comment | 8 + ..._bba7ba9c5b93fa33fc728daa0bb89497._comment | 31 + doc/bugs/v8_repo_auto_upgrades_to_v10.mdwn | 19 + ..._446aa74f0b54918dc8737483e3e8564a._comment | 14 + ..._and_description_often_not_propagated.mdwn | 154 + ..._60c5ba2de0c8b9b4538a4abd146007f6._comment | 8 + ..._d56aed617e0791aa17d9f37c8d3fd317._comment | 12 + ..._of_adjusted_branch_doesn__39__t_sync.mdwn | 149 + ..._3c0be3ff163aae411f323e3445af94b1._comment | 10 + ..._utf8_for_chars_that_does_not_need_to.mdwn | 37 + ..._a6014d95b0ac0dc20e9495a717d6d615._comment | 17 + ..._323f1be80e2422e73ebd99b702a28e80._comment | 12 + ..._576c31b2cc5031cfb64ff58a1866b3b5._comment | 34 + ..._4097e8dde9d9fe29b540112f7400689a._comment | 20 + ..._5e5441cca2f3bbc252029aca358e9a47._comment | 10 + ...le_to_convert_submodule_to_form_that_.mdwn | 41 + ..._1d3214382c2bb604101a835c0bb7f146._comment | 18 + ..._7f4800ee68c98606bc8a3ce959646014._comment | 20 + ..._54c9716cd5cab7b196549af2f90bed0a._comment | 19 + ..._864988b3ebc11ea9e92c55ee765d6d5c._comment | 27 + ..._06d31ed5a8c187cec7bc90339550b5e8._comment | 24 + ..._5e7007182372d28ceb11a8692e2cf801._comment | 9 + ..._4de04de71792801f50256214f4b5fe9f._comment | 10 + ...ebapp_--listen_port_is_not_used__63__.mdwn | 23 + ..._275507b26ca13e5d55deec4b7af60699._comment | 25 + ..._55315d9013fc6acbde9f8b419757d949._comment | 12 + ..._2d18df9587b52cbb7c34bfce2e0f2fb2._comment | 15 + ..._ba217465bfa738b77ea9417a33810d75._comment | 22 + ..._99a6933f30649bc33ee5c74b33fc7046._comment | 7 + ...ifficult_to_abort_adding_a_repository.mdwn | 24 + ...40__server__58___radicale_0.9-1__41__.mdwn | 45 + ..._487bf264afeef2a3b0a61d306ebfc3c5._comment | 12 + ...with_annex.thin_true_about_hard_links.mdwn | 76 + ..._cb6c6e7bcbbe3006dd80e89fa545016d._comment | 25 + ..._146ed4bf42ce1979815db82bbf9a5b86._comment | 10 + ..._57924a0a08da3cafe78b95bf22ae89fd._comment | 18 + ..._4a7ec33d4470714c9fb4271d214b3d1f._comment | 11 + ...4__numcopies__34___on_duplicate_files.mdwn | 299 + ..._169d4f769e4ba6a81aaa7ed32c789b50._comment | 35 + ..._d20cb1d0abc9823aa557dcd698e735b2._comment | 12 + doc/bugs/weird_unicode_bug_on_windows.mdwn | 17 + ..._69af9bd8c7898fccc2219edd860d547b._comment | 12 + ...lable_both_here_and_in_another_remote.mdwn | 30 + ..._d823b7ee32183fbadd4a49f65e1a3a8b._comment | 8 + ..._f430538101f0ef6114b5e953248fa599._comment | 8 + ..._d96ded3c27c705789e5689f19dbcabcb._comment | 8 + ..._b70e83a44a85b006c2c6105660cd6a7a._comment | 8 + ...uts_no_informaiton_for_unlocked_files.mdwn | 46 + ..._47bd0fc8d1c65f8a868d9722e66c71db._comment | 10 + ...reated_despite_alwayscommit__61__fals.mdwn | 66 + ..._57c55f62ced563f70612cba994b1ea8b._comment | 28 + ..._fcdc6ef1dd464d25ec3e26dac828830e._comment | 17 + ..._0460c7476fae95048f87cb6dd9d4a2ae._comment | 22 + ..._65647b8423127d450b0d1753767943d6._comment | 12 + ...y_reminded_to_run___96__restage__96__.mdwn | 182 + ..._e738eb3d45bb7c4baa0a5c88cdf7a40a._comment | 13 + ..._8ecb958a1a2c8cd9fd37798c0d4eb0cf._comment | 11 + ..._aed127be0616464fda064f00de954fc2._comment | 7 + ..._42ef3d3d157a97a202718f3b768916f8._comment | 45 + ..._8f71510a7547db8d0c63e4a4e3ddbd65._comment | 47 + ...repo_tests_fail_after_commit_5a98f2d5.mdwn | 217 + ..._af091a5799ac0445033c05173e25a4af._comment | 16 + ..._5c7ec0d8520f957ec4f6a4df30941cd8._comment | 8 + doc/bugs/windows_autostart.mdwn | 4 + ..._80a2561901554ddb45db719c086629b2._comment | 11 + ..._89078768dc9d9efd2d237fff5c7320ad._comment | 12 + ..._393899b1630cce0dc6b12ec7d29b81ca._comment | 9 + ..._b8d0b38aa7363e97c295b049bd939ad1._comment | 8 + ..._43077649e3ca6a132958c2a2b4914c3b._comment | 12 + ..._fails_starting_from_commit_54ad1b4cf.mdwn | 122 + ..._c353c67f06f40c84b956990160205e0a._comment | 84 + ..._bd9a77da095bffdcd3ed30e08192b9d2._comment | 19 + ..._c46e7c7f3870b54563eb8e94d451fded._comment | 22 + doc/bugs/windows_ftbfs.mdwn | 44 + doc/bugs/windows_started_to_FTBFS.mdwn | 35 + ..._094012512e6c267f05d3d61c0ed638a0._comment | 52 + ..._1ad4a7da4dd4353838fd5c1f9610ee32._comment | 26 + ...e_lock_files_withcoresharedrepository.mdwn | 24 + doc/builds.mdwn | 65 + doc/chunking.mdwn | 43 + ..._ddbc7a66de2def23cbf1e1de7defde08._comment | 8 + ..._d43c297db9a31d1c896b48f0e3757229._comment | 9 + ..._7305da05dff79b9cabc59af162db9925._comment | 14 + ..._f098bf5a5d07b10d5be41658790547ad._comment | 10 + doc/coding_style.mdwn | 113 + ..._70521cf79ad06832b1d73fc2c20c68ec._comment | 20 + ..._a820b7c8ae7c2290eb000f61bdb5c514._comment | 8 + ..._61c178b997dd044f3531303913f8fa91._comment | 8 + ..._433b7ba5e51e746f6b033ebb5c0e50a2._comment | 22 + doc/comments.mdwn | 9 + doc/contact.mdwn | 11 + doc/contribute.mdwn | 77 + ..._0b07e1baa5e89ba24f66c077719985e9._comment | 9 + ..._c61530e14bdbd7c5ec8b0137c0da92f8._comment | 19 + ..._637b05cfd48d2e337c3192989356d183._comment | 10 + ..._e7219514f52207fcfb97aeec03241e8d._comment | 12 + ..._21a75c774757f27911a9249f9b42368d._comment | 11 + ..._c5f7f809da5829f4c259d0a630f0f722._comment | 8 + ..._7b53ed13f455879a7462d74571283063._comment | 30 + ..._a721a4abf10ae3a1e591f81b9069387f._comment | 10 + ..._1b6c02d7ca6a36e4b1ce2bc52570c7fb._comment | 13 + ..._62f827dd014481f41d77f4afec0b1de2._comment | 9 + doc/copies.mdwn | 48 + ..._af9bee33777fb8a187b714fc8c5fb11d._comment | 8 + ..._1214610c03193cb9dd76dc24e5b7fd76._comment | 10 + ..._5beb9a5b87dd6775f9b921ad1e9bc610._comment | 14 + ..._0daa1b3ecc2a4cf844b8f1b98a883e67._comment | 8 + ..._cc4cd8f739d4e72614c0b98f00e3510d._comment | 11 + doc/design.mdwn | 6 + doc/design/adjusted_branches.mdwn | 316 + ..._5bdbf54ae75f77c69c8f557f4dbac13d._comment | 10 + ..._ff7cbdf93f0be5886f212bdd411efb5b._comment | 9 + ..._e2a4b1719ba9860da711b802de64daf5._comment | 10 + ..._adfcbfa7a9193318cba459766a60c072._comment | 8 + ..._882520747d41500d0ea8a18ab817121c._comment | 22 + doc/design/assistant.mdwn | 45 + doc/design/assistant/OSX.mdwn | 13 + ..._9290f6e6f265e906b08631224392b7bf._comment | 14 + doc/design/assistant/android.mdwn | 42 + ..._316bde8d22628e5e9d4f8dabce1d2ad4._comment | 14 + ..._cf801ce1f49f0201681f0c9f69a62aae._comment | 14 + ..._8be9a74e5fc4641c2bf2e1bb7673dd59._comment | 8 + ..._3dd386ac1b757c73d14f14377b9eedd4._comment | 8 + ..._5dca47a4599d6e88d19193701c5a571b._comment | 46 + ..._054f06311e2b51d73be569f181eb004f._comment | 10 + ..._bb3d36e9d29f2fa77bee6d47ef9917fe._comment | 21 + ..._fee32a831eeb5736fe1dce52e30320c8._comment | 16 + ..._d8e9b0a5287fc96b19dc2cb9da3586ce._comment | 17 + ..._79a7b5bb5f4aaeea4a4e8ced0561701a._comment | 11 + ..._55ea70a6929523d26248ff6409b04a6e._comment | 10 + doc/design/assistant/blog.mdwn | 11 + .../blog/day_100__cursed_clouds.mdwn | 19 + .../day_102__very_high_level_programming.mdwn | 37 + ..._c028b403261dd66bcf83e6ffd134b80b._comment | 8 + .../assistant/blog/day_103__bugfix_day.mdwn | 25 + doc/design/assistant/blog/day_104__misc.mdwn | 18 + ..._13d7fad2d3f8eab10314784c035e2a16._comment | 8 + .../assistant/blog/day_105__lazy_Sunday.mdwn | 43 + .../assistant/blog/day_106__lazy_Monday.mdwn | 10 + .../assistant/blog/day_107__memory_leak.mdwn | 11 + .../day_108__another_zombie_outbreak.mdwn | 33 + ..._194c48d65993462f809a2cfaa774a3e2._comment | 11 + ..._ef5ee5933fcadcb81cc81b816db14bda._comment | 8 + .../assistant/blog/day_109__dropping.mdwn | 16 + doc/design/assistant/blog/day_10__lsof.mdwn | 54 + ..._9b8c28c85c979f32e5c295b6a03c048e._comment | 9 + .../blog/day_110__more_dropping.mdwn | 55 + .../blog/day_111__config_monitor.mdwn | 18 + ...ow_for_something_completely_different.mdwn | 50 + ..._5e4fe1538d9ae1c450b0a6602fc6d29b._comment | 10 + ..._c5a734f611ecc95729904e645583ee43._comment | 8 + ..._46b16dcd0fce07036cd8ed6ed9d2b055._comment | 8 + ..._1fe036e4c65fb4211aa2c394f535344a._comment | 8 + ..._e4ba3568c4efd98f212dd47427a1cf47._comment | 10 + .../blog/day_113__notifier_work.mdwn | 22 + doc/design/assistant/blog/day_114__xmpp.mdwn | 56 + ..._c2b0617a2fc3dc4f19a6be6947913842._comment | 8 + ..._d14375dfb5791615802dab3c5438f8e2._comment | 8 + ..._6d72ea32c111e605be30ad2153fc71c9._comment | 10 + ..._e51d6f854db5f9e74a1aa58bd8923795._comment | 12 + .../assistant/blog/day_115__my_new_form.mdwn | 17 + .../assistant/blog/day_116__the_segfault.mdwn | 25 + .../blog/day_117__new_topologies.mdwn | 41 + .../blog/day_118__monadic_discontinuity.mdwn | 15 + .../blog/day_119__time_for_testing.mdwn | 12 + .../assistant/blog/day_11__freebsd.mdwn | 50 + .../assistant/blog/day_120__test_day.mdwn | 2 + .../assistant/blog/day_121__buddy_list.mdwn | 10 + .../assistant/blog/day_122__xmpp_pairing.mdwn | 29 + ..._e95efb23eb2e67e3f11a5c7de56424a7._comment | 10 + ..._30e251e73146512bde8b2f69eddeef2e._comment | 8 + .../blog/day_123__xmpp_insanity.mdwn | 49 + ...ay_124__git_push_over_xmpp_groundwork.mdwn | 28 + .../blog/day_125__xmpp_push_continues.mdwn | 15 + .../blog/day_126__mr_watson_come_here.mdwn | 52 + ..._ee1361e6b235f4e1c00596ba516b519a._comment | 10 + ..._8eb366ae7efb347bd3bbd9a98e0821b3._comment | 8 + .../assistant/blog/day_127__xmpp_syncs.mdwn | 35 + .../blog/day_128__last_xmpp_day.mdwn | 49 + ..._fd8c1d6358cb50f4dad8ba11d33d861f._comment | 10 + ..._43664b73c71c41d71bc95e665f128106._comment | 8 + ..._d369b04f686009a9dbb57b999107a55e._comment | 11 + ..._095855d301e7ccd3689ffe507cfb63ee._comment | 8 + ..._da7b0586b0b28e1e0fe4126f6543a7bc._comment | 9 + ..._2f9ba367e19d77bf52f372b6f0f5938a._comment | 8 + .../assistant/blog/day_129__release.mdwn | 4 + .../assistant/blog/day_12__freebsd_redux.mdwn | 23 + ..._5da32cf53f1de27bfe6cec2d294db3e1._comment | 8 + ..._696d6e22034acf5bb60d80124b72ef2f._comment | 8 + ..._5ab7808595e3b51ca4141d15fdd44743._comment | 7 + .../assistant/blog/day_130__what_now.mdwn | 36 + ..._402f00cc034351d8253a797dd4de55bf._comment | 8 + .../blog/day_131__webdav_groundwork.mdwn | 28 + .../blog/day_132__webdav_continued.mdwn | 22 + .../blog/day_133__webdav_working.mdwn | 31 + .../blog/day_134__box.com_configurator.mdwn | 8 + .../blog/day_135__progress_revisited.mdwn | 37 + doc/design/assistant/blog/day_136__misc.mdwn | 14 + .../assistant/blog/day_137__Glacier.mdwn | 30 + doc/design/assistant/blog/day_138__back.mdwn | 25 + ..._65a8499b284bed38d2bde1886a54a311._comment | 8 + .../assistant/blog/day_139__catch_up.mdwn | 11 + .../blog/day_13__kqueue_continued.mdwn | 34 + .../blog/day_140__release_monday.mdwn | 25 + .../blog/day_141__release_tuesday.mdwn | 6 + ..._a5adea7a726df12f9121c744a036f08d._comment | 10 + .../assistant/blog/day_142__filling_in.mdwn | 9 + .../assistant/blog/day_143__what_next.mdwn | 22 + ..._40cf25a2ebdd43d8974a28e180e100e5._comment | 13 + ..._af9ccbbc5131e6333c029415141bdb51._comment | 10 + .../assistant/blog/day_144__webapp_work.mdwn | 8 + .../blog/day_145__more_webapp_work.mdwn | 12 + .../assistant/blog/day_146__meanwhile.mdwn | 22 + .../assistant/blog/day_147__direct_mode.mdwn | 36 + ..._0bd69532afce9dc04e3d88bfd0aed4b2._comment | 16 + ..._3b26f0d081c3bf1037bb872d529ce825._comment | 8 + .../assistant/blog/day_148__direct_mode.mdwn | 42 + .../assistant/blog/day_149__rainy_day.mdwn | 15 + .../blog/day_14__kqueue_kqueue_kqueue.mdwn | 23 + .../blog/day_14__thinking_about_syncing.mdwn | 44 + .../assistant/blog/day_150__12__58__12.mdwn | 53 + .../blog/day_151__direct_mode_toggle.mdwn | 59 + .../assistant/blog/day_152__bugfixes.mdwn | 18 + ..._46863a875f9daa6f2c9248b66ff91929._comment | 9 + ..._a586e617bc024c8a9ff60f1b8345d74d._comment | 8 + .../assistant/blog/day_153__hibernation.mdwn | 26 + .../blog/day_154__direct_mode_merging.mdwn | 21 + .../assistant/blog/day_155__bugfixes.mdwn | 15 + ...ay_156_and_157__direct_mode_assistant.mdwn | 45 + .../assistant/blog/day_158__fsevents.mdwn | 20 + ..._b278372ac6399f64d5fa9da178278a6d._comment | 8 + ..._2d5ce9b2807068c3517e185945662bd2._comment | 8 + .../blog/day_159__fsevents_and_assistant.mdwn | 16 + ..._b85f446c3fa8d703a2a8882825c6f33f._comment | 8 + ..._a150b404e0c39e0bb2f7dd00cda63cdc._comment | 8 + ..._37abc41bae23a1d7de0d19d952aec492._comment | 8 + .../assistant/blog/day_15__its_aliiive.mdwn | 33 + .../day_160__finishing_up_direct_mode.mdwn | 10 + .../assistant/blog/day_161__release_day.mdwn | 8 + ..._e82c67f3ce216618149537bba1e0b850._comment | 19 + ..._b1fe96fd818935c0497b78bb8ad32ffa._comment | 14 + ..._40bac0e1756aa77bb966c4654857141c._comment | 44 + ..._af65656b0d1179636937595868bb97b0._comment | 30 + ..._0c05caaaf9588e124585041bf5f45d75._comment | 20 + ..._5dfb5f428633d6062925f61af2b8829b._comment | 23 + ..._ac4effb381b08d94d4a2d2482e92c89a._comment | 13 + ..._32600e89e3098e52a1280895e03b3f86._comment | 13 + ..._07e5d0c3cad0ce2bd4943e53b61f1767._comment | 8 + doc/design/assistant/blog/day_162__UI.mdwn | 17 + .../blog/day_163__free_features.mdwn | 32 + .../assistant/blog/day_164__bugfixes.mdwn | 17 + .../assistant/blog/day_165__release_day.mdwn | 16 + .../blog/day_166__a_short_long_day.mdwn | 25 + .../day_167__safe_direct_mode_transfers.mdwn | 12 + ..._f1aa64fe803d8c14b250a4e98b88142a._comment | 8 + ..._5ce1db84c9ead713f1272c4975645b93._comment | 8 + .../blog/day_168__back_to_theme.mdwn | 18 + ..._f248780bfcbd0384d9d72c2633a4ea46._comment | 12 + ..._5beba073373b8e75a32d1fcfdc1a0782._comment | 13 + .../blog/day_169__direct_mode_is_safe.mdwn | 24 + ..._65f87656c4e6bc7cdb614f53961341c9._comment | 8 + ..._a116a402a126c62be54c06afd82439ab._comment | 19 + .../blog/day_16__more_robust_syncing.mdwn | 44 + ..._23e7a90429e4431f90787cd016ebe188._comment | 8 + ..._8e7e7cd27791bb47625e60a284e9c802._comment | 10 + .../blog/day_170__bugfixes_and_release.mdwn | 8 + doc/design/assistant/blog/day_171__logs.mdwn | 23 + .../assistant/blog/day_172__short_day.mdwn | 22 + ..._b75e26b77a23a45da1c4c3bca1399246._comment | 12 + .../assistant/blog/day_173__snow_day.mdwn | 22 + .../blog/day_174__last_weekend_before_AU.mdwn | 25 + ..._05a8fd47f54373331741cc869a53b0c3._comment | 10 + ..._fc8e65eef954c4caa8321c2fe8b711b7._comment | 8 + ..._399534f540d85cac067fbb7be9d373b4._comment | 8 + .../blog/day_175__pacific_features.mdwn | 15 + ..._c3ee4386f872b7c76aaecfa638b368cb._comment | 9 + .../blog/day_176__thread_management.mdwn | 13 + .../assistant/blog/day_178__bus_hacking.mdwn | 10 + .../blog/day_179__brief_updates.mdwn | 19 + ..._920a84457d40358507a3eb817a4568d9._comment | 8 + .../blog/day_17__push_queue_prune.mdwn | 19 + doc/design/assistant/blog/day_180__back.mdwn | 7 + .../assistant/blog/day_181__triage.mdwn | 23 + .../assistant/blog/day_182__it_begins.mdwn | 50 + .../assistant/blog/day_183__plan_b.mdwn | 19 + .../day_184__just_wanna_run_something.mdwn | 46 + ..._689adac7e26cb0b0a4e7ecc787cfd716._comment | 16 + .../blog/day_185__android_liftoff.mdwn | 20 + ..._b7d28010a72619a7e9a5ad4f2a0d6c07._comment | 9 + ..._ddeb24e86fafb7dae93142cc02767aad._comment | 10 + .../blog/day_186__Android_success.mdwn | 33 + ..._1629da240ca7db5f8a32059f561fd435._comment | 8 + .../blog/day_187__porting_utilities.mdwn | 22 + ..._0e6a3f4fe8e09f247fa04156bc60f8c7._comment | 8 + .../day_188__crippled_filesystem_support.mdwn | 37 + ..._32a296fce23ae4b1e18bd5a9964bf619._comment | 14 + .../blog/day_189__more_crippling.mdwn | 44 + .../assistant/blog/day_18__merging.mdwn | 82 + ..._7a553ad559519f3b3e3cd20115b4c44e._comment | 15 + .../assistant/blog/day_190-191__weekend.mdwn | 28 + ..._dbd692d12c14d08acd7d73a655b34e8b._comment | 10 + ..._c813830e53471a9732e010a748d574fc._comment | 28 + .../blog/day_192_193__more_porting.mdwn | 44 + .../assistant/blog/day_194__nice_moment.mdwn | 37 + .../blog/day_195__real_android_app.mdwn | 32 + ..._0112007552b30cd9bfeac614a1e399c4._comment | 10 + ..._230d3c169c713f613b9d607d84ce5092._comment | 12 + ..._8d74ad2a61c02272758d157282ad56ec._comment | 10 + ..._4f6bc0680f2debd638933968a26975e0._comment | 10 + ..._71539c62608866464e8faa76bc522a55._comment | 9 + ..._e1b205289721ae79ac7fbed2f44018b2._comment | 10 + ..._4bc0aeae4fa1116944644c64feaf9697._comment | 8 + ..._17bb6e7565d4c757f6c1e3514c22f47d._comment | 10 + ..._cd8a6bec0f7c6843dd11d3266f25f864._comment | 44 + ..._2d2eee4bcbbd1d069a80bff5edc90c3c._comment | 13 + ..._3d96568c469a8c53a982f304eae5e7d4._comment | 10 + ..._e8667c47d07fc842cf0fe2ebbfbc1c58._comment | 8 + ..._cf8da7720ddc20b05955ee671ca4acd5._comment | 8 + ..._f4709bdbc739182819b648fd6aa00531._comment | 36 + ..._e66af12c7eca0d457b8406e9fb4b69be._comment | 8 + .../blog/day_196__android_bugfixes.mdwn | 26 + .../blog/day_197__template_haskell.mdwn | 36 + ..._82d9f9508929d84abf7b718c59436ae8._comment | 18 + .../assistant/blog/day_198__bugfixes.mdwn | 11 + ..._5a15b5bad0f9ba2423d2aebe440ac0ea._comment | 19 + ..._36d94b838e5e65c85e7afaabe8a578f1._comment | 12 + ..._ae9b74341a3bc6e1e84d2c0ca4c5f612._comment | 10 + ..._5a4827227c03bcff3b1e4c44b531f816._comment | 12 + ..._9c5f4c85217e898be4c57c615e53c36f._comment | 8 + ..._bccf1abfb7f56d97673158f3ccfce511._comment | 9 + ..._6f1b51b002cc5d2b505d80e3e04bf6f3._comment | 8 + ..._8a3542437663028b17442818eba3f7c5._comment | 9 + .../day_199__wrapping_up_Android_for_now.mdwn | 26 + ..._ec57358afc7e78d2860aa4237793832d._comment | 11 + .../blog/day_19__random_improvements.mdwn | 50 + doc/design/assistant/blog/day_1__inotify.mdwn | 57 + .../assistant/blog/day_200__release_day.mdwn | 19 + ..._40cfe9bfd9e611fd734dbb5aad348aa3._comment | 10 + ..._b26890fdae575d42170988073fb2e45d._comment | 8 + ..._710a30c5d31bf549833ecfe9a0997c94._comment | 8 + ..._b6f62ab7e810ba6d3a43f0ead370c79a._comment | 8 + ..._a68e1ed7829b49086c567d97ddc09912._comment | 8 + ..._39d3ad0a029fe56e96f97d28d17fbbd2._comment | 8 + ..._5b752d6a8d74e61190f09384b6108206._comment | 31 + ..._881274ae0d6230bb4cafa4151ad72b49._comment | 12 + ..._e220059be77cf0ef396f37a4f9ccf9b5._comment | 8 + ..._ec2152151188dd252cdb61c68cfc12e4._comment | 10 + ..._42572411617c287368482bb9dcf94324._comment | 18 + ..._6b69aa81a9ba4e07e547ed1869946d51._comment | 15 + ..._b070a2e4151d9fbf43d7906efa78515f._comment | 12 + .../blog/day_201__real_Android_wrapup.mdwn | 38 + ..._88b9950c51324f0bb89c5646b3170952._comment | 19 + .../blog/day_201__real_Android_wrapup/fib.png | Bin 0 -> 69535 bytes .../blog/day_201__working_web_server.mdwn | 31 + .../blog/day_203__procrastination.mdwn | 25 + .../blog/day_204__deprocrastination.mdwn | 62 + .../day_205_206__rainy_day__snow_day.mdwn | 12 + doc/design/assistant/blog/day_207__XMPP.mdwn | 7 + .../assistant/blog/day_208__bugfixes.mdwn | 17 + .../assistant/blog/day_209__The_Bug.mdwn | 23 + .../blog/day_20__data_transfer_design.mdwn | 22 + .../assistant/blog/day_210__spring.mdwn | 29 + .../blog/day_211__zooming_along.mdwn | 24 + .../blog/day_212__accidental_all_nighter.mdwn | 24 + ..._6ee1f8056eedb6eb18013faf8f5ec212._comment | 8 + ..._07c83d75bb105bb77ada07359ed0ea7a._comment | 8 + ..._2c904d33f4f14807fbe718a01e98800a._comment | 8 + ..._59ec5c1cab75df87293800a7a03fe9c6._comment | 8 + ..._13893f106e835dcc52e03c7c6740c35b._comment | 8 + doc/design/assistant/blog/day_213__costs.mdwn | 34 + .../assistant/blog/day_214__release_day.mdwn | 5 + .../blog/day_215__dashboard_UI_refresh.mdwn | 25 + .../blog/day_216__more_bugfixes.mdwn | 42 + ..._299462bcdd0e4f6cd7895b5f40ca00ad._comment | 10 + ..._1913d65dfe4ba08379d82a4a2ca91c40._comment | 8 + ..._92c774599a78540ad398afcd1d05f7ce._comment | 20 + .../assistant/blog/day_217__nothing.mdwn | 2 + .../assistant/blog/day_219__bug_triage.mdwn | 14 + ..._c6b977a969cacdce62987a439b7686f5._comment | 16 + .../blog/day_21__transfer_tracking.mdwn | 28 + .../assistant/blog/day_220__performance.mdwn | 40 + .../blog/day_221__this_and_that.mdwn | 28 + doc/design/assistant/blog/day_222__back.mdwn | 16 + ..._f05b48231a1ee0cffba7d66e112e5551._comment | 8 + ..._4d5f003ccd81580017ebf0dc31bc9cda._comment | 8 + .../blog/day_223__progress_revisited.mdwn | 24 + .../blog/day_224__annex.largefiles.mdwn | 23 + ..._408e4021b18f7ff5548d2d19ab558922._comment | 8 + ..._b24d1da2bc4307ded0216daffb8f9336._comment | 8 + .../blog/day_225__back_from_the_dead.mdwn | 47 + ..._9ac37c3b5c4c72ec8a39dce00bcbe420._comment | 8 + ..._26125dd9ef2bd10b597d14b2c6180952._comment | 8 + .../assistant/blog/day_226__poll_results.mdwn | 28 + ..._1ed980472214be6d0a8cf55f37797fda._comment | 8 + ..._6823b0a9a8037f1a5214db4db98fb16e._comment | 8 + .../day_227__bigfixing_all_day_today.mdwn | 21 + ...228__more_work_on_repository_removals.mdwn | 27 + .../blog/day_229__rainy_day_bugfixes.mdwn | 17 + .../day_22__horrible_option_parsing_hack.mdwn | 34 + doc/design/assistant/blog/day_230__Mom.mdwn | 35 + ..._696bba2246c8a9e6ce4aed3071bcc96c._comment | 8 + ..._2fa295ab6db0828cb725cfcfb6777822._comment | 8 + ..._fafd7abec629290418334ddb015bf62c._comment | 10 + ..._450cac0f2e82c94fd34b527ae05ef1b8._comment | 8 + .../assistant/blog/day_231__insert_title.mdwn | 26 + .../blog/day_232__headless_webapp.mdwn | 22 + ..._0fdd77d143ecba6fdb9f75cb6fc37bfb._comment | 16 + ..._0784a2a73c3e2945f3d3f2577b3b9c9c._comment | 8 + ..._ccb9fa22422fb913b6a496ebe65c49fb._comment | 8 + ..._ceba4468760a2525960327698431cee2._comment | 8 + ..._7e51a197ff9970ae50cf47bd3a922257._comment | 18 + doc/design/assistant/blog/day_233__taxes.mdwn | 11 + ..._9473ffdc42595af9c293fbcd5a1cdb54._comment | 14 + ..._5feed8d7053ba03812ccda8c61fd9775._comment | 8 + .../blog/day_234__clean_shutdown.mdwn | 29 + .../assistant/blog/day_235__birthday.mdwn | 31 + ..._db558b071067c1e63cde05cca0551094._comment | 8 + ..._d1a2c1124781118267599457ae9e0512._comment | 8 + ..._b853508d1d15234958b9f4a39277e45c._comment | 8 + ..._73aad3398a43bc4d28bca9bf635fa757._comment | 8 + .../assistant/blog/day_236__evil_splicer.mdwn | 29 + .../day_237__gnome-keyring_craziness.mdwn | 29 + ..._0cb088b732881d1fa92493aa1fd93d43._comment | 8 + ..._b855fd710954beebaafe6d2bd03eb368._comment | 8 + .../blog/day_238__back_to_Android.mdwn | 11 + .../day_239__bugfixes_and_frustration.mdwn | 28 + .../blog/day_23__transfer_watching.mdwn | 25 + .../assistant/blog/day_240__it_builds.mdwn | 37 + ..._151840ae0020ea63b2f041488c905386._comment | 25 + .../assistant/blog/day_241__cleanup.mdwn | 14 + ..._0e283cdf66a25b3cc9423fe651084cb9._comment | 8 + .../assistant/blog/day_242__more_porting.mdwn | 4 + .../assistant/blog/day_243__in_the_field.mdwn | 21 + .../blog/day_244__android_porting.mdwn | 6 + doc/design/assistant/blog/day_245__misc.mdwn | 15 + ..._3a2976617bb0cdc206fb1397a2ef1177._comment | 8 + ..._e0f9704e91fedca8ff26356f354cc1c3._comment | 10 + ..._93003a0d0983efbdc046d7459be194b0._comment | 8 + .../blog/day_246__bug_treadmill.mdwn | 18 + ..._f76f653364fe2b97e85e8356c93b0fce._comment | 8 + .../blog/day_247__performance_tuning.mdwn | 16 + .../blog/day_248__Internet_Archive.mdwn | 28 + .../assistant/blog/day_249__quiet_day.mdwn | 7 + .../blog/day_24__airport_digressions.mdwn | 99 + .../assistant/blog/day_250__stymied.mdwn | 23 + ..._330a10d447ccc3db03fcbfe571dbb404._comment | 8 + .../blog/day_251__xmpp_improvements.mdwn | 34 + .../assistant/blog/day_252__release_day.mdwn | 6 + doc/design/assistant/blog/day_253__OMG.mdwn | 22 + ..._bbdc61092771163e65a90a4755a807d8._comment | 8 + .../blog/day_254__Android_app_polishing.mdwn | 35 + ..._37f4ff5227566ce4b3fa69fc32568841._comment | 14 + ..._58bbb105bdbb72bba85c3622195f43b9._comment | 12 + .../blog/day_255__Debian_release_day.mdwn | 26 + doc/design/assistant/blog/day_256__8bit.mdwn | 27 + ..._f9b50263e3997d4c5b9836a2e0a346d7._comment | 8 + .../assistant/blog/day_257__rainy_day.mdwn | 6 + .../blog/day_258__beginning_of_the_end.mdwn | 24 + .../day_259__Android_dominos_toppling.mdwn | 15 + ..._0b4a6e4893b0157e4768b46468dbbb87._comment | 10 + ..._1ebc5aff5d217e1392cb7c8bb6c5156b._comment | 14 + ..._eed7792f6142f3fc74d3c384bb16559b._comment | 8 + .../blog/day_25__transfer_queueing.mdwn | 41 + ..._59fd4f1ffe96c412f613dc86276e7dbd._comment | 10 + ..._93bf768a67117e873af5732ecf08dc78._comment | 7 + .../day_260__Windows_dev_environment.mdwn | 46 + ...day_261__Windows_first_stage_complete.mdwn | 29 + .../blog/day_262__DOS_path_separators.mdwn | 14 + ..._45ecae90b22e31202c21083980d6b567._comment | 10 + .../assistant/blog/day_263_catching_up.mdwn | 11 + ..._9023da0573dfc81644d68128adb331a7._comment | 8 + ...ay_264__Windows_second_stage_complete.mdwn | 21 + ..._42a7502d6ece75520eb59a76fdb1e2f0._comment | 9 + ..._f2b11322ac87e2a36cddc035b2c3c1ea._comment | 8 + ..._ea6ee05acb946fc7e8d95e62647cfa2a._comment | 8 + ..._9ce106baf28b7f75f7f6febd7bfcea70._comment | 8 + .../assistant/blog/day_265__correctness.mdwn | 23 + ..._e8959a6df87eb92310947e66c7471e97._comment | 12 + ..._0cb953fcc085eedb34e65c227309ede7._comment | 8 + ..._df57628a8969af2995732e7ea2a0fae3._comment | 10 + .../assistant/blog/day_266__release_day.mdwn | 6 + ..._92c8d1d9216b46b07dfe69bbc77a923e._comment | 8 + .../blog/day_267__windows_autobuilder.mdwn | 9 + ..._978b584d86395f2f621b0e1f7c5e70d7._comment | 21 + ..._8f978d2811c8fbf11e3d12f245bdb52b._comment | 10 + .../blog/day_268__core_monad_change.mdwn | 9 + .../assistant/blog/day_269__bugfixes.mdwn | 14 + .../assistant/blog/day_26__dying_drives.mdwn | 28 + .../blog/day_270__release_and_xmpp.mdwn | 39 + .../assistant/blog/day_271__more_xmpp.mdwn | 31 + .../assistant/blog/day_272__fuzz_tester.mdwn | 37 + .../assistant/blog/day_273-274__fun.mdwn | 19 + .../blog/day_275__working_hard_or.mdwn | 12 + .../blog/day_276__fuzzing_continues.mdwn | 12 + ..._f5dd0658511a1063c2eb025b0fe98426._comment | 14 + ..._a56c4c26a9e7bb8cfe3f598dbeed0813._comment | 10 + ...ay_277__private_static_protected_void.mdwn | 19 + .../assistant/blog/day_278__winding_down.mdwn | 11 + .../blog/day_279__final_release_prep.mdwn | 14 + .../blog/day_27__robust_transfers.mdwn | 31 + .../day_28-35__threaded_runtime_tarpit.mdwn | 17 + doc/design/assistant/blog/day_280__yesod.mdwn | 7 + ..._a42213a8cef71f2b54db18606028136d._comment | 8 + doc/design/assistant/blog/day_281__back.mdwn | 37 + ..._128809c5a2a9f5cc345a10fdbf55be01._comment | 8 + ..._6d0bbdf6ebaff9da399804570f0e606d._comment | 10 + .../blog/day_282-283__caught_up.mdwn | 18 + .../assistant/blog/day_284__porting.mdwn | 13 + ...285__fixed_the_archive_directory_loop.mdwn | 23 + ..._1065e756dc6d66aefd214eb8ac5ebe1d._comment | 25 + .../blog/day_286__Windows_test_suite.mdwn | 19 + .../assistant/blog/day_287__niceness.mdwn | 13 + .../blog/day_288__success_stories.mdwn | 32 + ..._9ddf57b8ae0241268bb33bec1b169e4c._comment | 20 + ..._50b8a597bd8677608f2ef176443f23f3._comment | 10 + ..._f2df427cf3608377e9a52d8bdeadb26f._comment | 21 + ..._8762efed97f21eeba8f0a7be45bd924a._comment | 35 + ..._55e1bb15c3a93d582d110f8173ceefc2._comment | 9 + ..._5749aef8b585b293385b20b75c40f9d8._comment | 31 + ..._911c6d2764906cad7d6324835441ed34._comment | 12 + ..._eb6aa8af5aa70877255a11d132d51aba._comment | 10 + ..._9a57de4cea407a73b2d023d85afdccc6._comment | 12 + ..._1767c86067bee35941004282b96b8e95._comment | 10 + ..._22b28ca3d4d3283ad8c21ae052fb9752._comment | 11 + ..._1d47f3e1b9f0081649cedae4288bac83._comment | 8 + ..._31d3f58cad83cb1ecc4821a15ca258d8._comment | 14 + ..._b512bd2bf29dfaab6b36bf204518fdb6._comment | 8 + ..._343333356de20e170edb8020faa7400d._comment | 10 + ..._4e4034bec789543b562ac263df3e21dd._comment | 15 + ..._0c52794c77a9b7afc5112f5edf9cb793._comment | 8 + ..._7ca419aa3a187857b19268572d5df297._comment | 18 + ..._3edd56b3b04f19faba8d75cca285a662._comment | 10 + ..._146331ae2de25a6dc3595dffab9514de._comment | 12 + ..._72be9307e75eb120451f3d6ab7c8165e._comment | 8 + ..._c27eb0a4181e85a3eed41130402350bf._comment | 12 + .../blog/day_289__back_in_the_swing.mdwn | 16 + .../blog/day_290__https_release.mdwn | 17 + doc/design/assistant/blog/day_291__--all.mdwn | 32 + ..._eaa9fef19a035bef9c439e87d47c834b._comment | 17 + ..._90bbc26bf92048de7cbaf5fb719c9593._comment | 11 + ..._75006e9909425dcbf86415a9f7c90372._comment | 10 + ..._5440449bbc5a353f7430f72e19c35e92._comment | 8 + .../assistant/blog/day_292__bugfixes.mdwn | 24 + ..._bbac3878d80f7540d229183c56664784._comment | 8 + ..._8c9e5291ceb257f3a938af0ad967c5d7._comment | 10 + ..._02f875e8edd30f47939249f16d92712b._comment | 8 + .../assistant/blog/day_293__gpg_builds.mdwn | 32 + ..._4f152de8ea5aca4ec381d439e2a821f7._comment | 12 + ..._42f625638638bc875379f6c604d6f673._comment | 8 + .../assistant/blog/day_294__release_day.mdwn | 7 + .../blog/day_295__balls_in_the_air.mdwn | 13 + .../day_296__new_crowdfunding_campaign.mdwn | 41 + ..._cccad1a5103c504d21d0f8e69bb39e1b._comment | 8 + ..._4fef7bd9c8e15cd57df365fadb95717f._comment | 8 + ..._0b9258a1f5079e53c60138f06d0c63b1._comment | 8 + ..._46183b97ca904bc06e46569c30db2edc._comment | 8 + .../assistant/blog/day_297__back_to_work.mdwn | 16 + ..._e300feb821bfe7b76b2cec4376d16ffa._comment | 8 + .../assistant/blog/day_298__exceptional.mdwn | 21 + .../assistant/blog/day_299__bugfixing.mdwn | 8 + doc/design/assistant/blog/day_2__races.mdwn | 45 + .../assistant/blog/day_300__new_logo.mdwn | 36 + ..._9fc64e33863b9fce00f6a03417a91e36._comment | 9 + ..._e8aac0298f90004e81492d2c7f85eda0._comment | 8 + ..._6308c767f6e4bf090102191c91520d04._comment | 8 + .../blog/day_301__direct_unannex.mdwn | 21 + .../assistant/blog/day_302_release_day.mdwn | 6 + ..._fe6e572ba706e95188463d9f3e004d03._comment | 17 + doc/design/assistant/blog/day_303__oops.mdwn | 8 + .../blog/day_304__dropunused_safety.mdwn | 28 + ..._1bbcf6c74b6437c44ff8604401fb1432._comment | 10 + .../blog/day_305__interesting_bugs.mdwn | 21 + .../assistant/blog/day_306__offtopic.mdwn | 2 + .../assistant/blog/day_307__buuuugs.mdwn | 31 + .../assistant/blog/day_308__ssh-agent.mdwn | 16 + ..._5f0fc810cf1e1cd9b3ddba3cd19bb19d._comment | 12 + .../assistant/blog/day_309__filenames.mdwn | 17 + .../assistant/blog/day_310__release_day.mdwn | 18 + ..._1e008583cebd8e373e83729529914db7._comment | 8 + .../blog/day_311__Windows_porting.mdwn | 10 + ..._8e738f54a72557bee1e19970472b925c._comment | 8 + .../blog/day_312__DebConf_midpoint.mdwn | 30 + doc/design/assistant/blog/day_313__back.mdwn | 34 + ..._fbf3fdf9688c18156753d446facd942d._comment | 10 + doc/design/assistant/blog/day_314__quvi.mdwn | 27 + ..._3fdfb0742cb5422530ddd97b904f2a42._comment | 8 + .../assistant/blog/day_315__backlog.mdwn | 12 + .../assistant/blog/day_316__day_off.mdwn | 6 + doc/design/assistant/blog/day_317__misc.mdwn | 17 + .../blog/day_36__minimal_test_case.mdwn | 9 + doc/design/assistant/blog/day_37__back.mdwn | 64 + .../blog/day_39__twice_is_enemy_action.mdwn | 66 + .../assistant/blog/day_3__more_races.mdwn | 26 + ..._d6015338f602b574a3805de5481fc45e._comment | 8 + ..._4d6b23fc6442e0ee0303523cb69d0fba._comment | 8 + ..._03f5b2344c2a47dea60086f217d60f9b._comment | 14 + ..._860e90e989ec022100001c65e353a91e._comment | 8 + doc/design/assistant/blog/day_40__dbus.mdwn | 100 + ..._43ed2a79629868b018ec9f54a32bcacc._comment | 12 + ..._6799f2baf6a6ce14b1fa76a8402840c0._comment | 10 + ..._fa1d7444bdafcb990cacf2ace7ee6ef1._comment | 10 + ..._3399ddad951c1a950281bb6941fc3f6f._comment | 8 + ..._40b6b9d741d3081203f0cc94eb8dc3ea._comment | 12 + doc/design/assistant/blog/day_41__foo.mdwn | 46 + ..._ace21fa257a4c2fd412b6ff2944a23e8._comment | 10 + .../assistant/blog/day_42__the_answer.mdwn | 27 + .../blog/day_43__simple_scanner.mdwn | 37 + .../assistant/blog/day_44__webapp_basics.mdwn | 83 + ..._d5fb67f373038e9f583cb2e1992bef67._comment | 18 + .../assistant/blog/day_45__long_polling.mdwn | 66 + ..._994bec0978324e268666073e8ff4f6ae._comment | 8 + ..._dfa164c86290899139491acccddd8b2b._comment | 10 + ..._5526c9dd4fd87da56cb8456083169f55._comment | 8 + ..._91630f5bf162dfd4fbb3920f1318535b._comment | 8 + ..._b3e41ba77f21e93a4e086483793bf5ce._comment | 10 + .../blog/day_45__long_polling/full.png | Bin 0 -> 55185 bytes .../blog/day_45__long_polling/phone.png | Bin 0 -> 41602 bytes .../blog/day_46__notification_pools.mdwn | 68 + .../blog/day_47__alert_messages.mdwn | 14 + doc/design/assistant/blog/day_48__intro.mdwn | 8 + .../blog/day_49__first_run_experience.mdwn | 39 + ..._e146cf06c8dd6303dd6a991f152a73fe._comment | 8 + ..._5d6adcf6782c02283bef6189582ee467._comment | 12 + ..._7ac2e34c2a7bc9b57488ca0c91307d32._comment | 14 + ..._549b07bb02c07a5b1b95445b01758db2._comment | 14 + doc/design/assistant/blog/day_4__speed.mdwn | 47 + ..._bf3c9c33cc0dea5eaeb6f2af110b924b._comment | 8 + ..._33aba4c9abaa3e6a05a2c87ab7df9d0e._comment | 8 + .../blog/day_50__directory_name.mdwn | 20 + ..._782cec95a8558a05b2b38a2d2302214d._comment | 8 + ..._2b8ceb0a26f25e8ed2711bcbe7225a58._comment | 8 + .../assistant/blog/day_51__desktop.mdwn | 34 + .../assistant/blog/day_52__file_browser.mdwn | 21 + ..._cd000c2d56b60cc1f17b221322a32aa7._comment | 8 + ..._21d1da67cf9105a545583ba2302c10fb._comment | 7 + .../blog/day_54__adding_removable_drives.mdwn | 99 + ..._5de4f220a3534f55b1f2208d1d812d63._comment | 10 + ..._8dae1ed0a70acf9628b88692dc32ac5f._comment | 10 + doc/design/assistant/blog/day_55__alerts.mdwn | 10 + ..._6319045500a8a5e049304fdec5ff4cf4._comment | 8 + .../blog/day_56__transfer_control.mdwn | 8 + doc/design/assistant/blog/day_57__afk.mdwn | 40 + ..._70e1c9f925f040c1700d3e26bab373d5._comment | 9 + ..._c70d3faccfcebf47deb25e270498cb56._comment | 18 + ..._89020ebc6d31485339bdea41a872df3c._comment | 11 + ..._8b1f65f141ffd9813e7f5a3380f7f520._comment | 27 + .../blog/day_58__more_transfer_control.mdwn | 26 + doc/design/assistant/blog/day_59__dinner.mdwn | 10 + ..._0c1e2d69496473e7e4a2956a2814f5dd._comment | 9 + .../assistant/blog/day_5__committing.mdwn | 57 + .../assistant/blog/day_60__taking_stock.mdwn | 40 + ..._6722f81ee084f1ea9e8fe47f34576397._comment | 8 + .../day_61__network_connection_detection.mdwn | 36 + ..._09b58f41a8d48f218619711ee19511ac._comment | 8 + .../blog/day_62__smarter_syncing.mdwn | 21 + .../blog/day_63__transfer_retries.mdwn | 26 + ..._990d4eb6066c4e2b9ddb3cabef32e4b9._comment | 10 + .../blog/day_64__syncing_robustly.mdwn | 33 + .../blog/day_65__transfer_polish.mdwn | 33 + .../assistant/blog/day_66__the_merge.mdwn | 19 + ..._eeccf4e73cc321542a1fe4780805a81e._comment | 12 + ..._a34e89316d1662826848f31061c4e46b._comment | 8 + ..._09e244d23d05052fa2b11a7181888366._comment | 8 + ..._3961a03e167903959b96b054835613f6._comment | 8 + ..._12a57af9f580918818b4a9f68396d5c4._comment | 23 + ..._8ce638960012367c888e018a5f05db19._comment | 8 + ..._f461b856b940e6914bcd2b681cf9505f._comment | 13 + ..._6e73aca1fc1747d0e742e054b88b5d78._comment | 12 + ..._d85f1ce23ae16d5a8eb88d2c3999acb7._comment | 19 + ..._c06dab4d78122c85beeaf300ffc3e376._comment | 8 + .../assistant/blog/day_67__progress_bars.mdwn | 10 + .../assistant/blog/day_68__transfers.mdwn | 15 + ..._5282960c0b553fbc0f411345b9745324._comment | 14 + .../assistant/blog/day_69__build_fixes.mdwn | 7 + doc/design/assistant/blog/day_6__polish.mdwn | 50 + .../blog/day_70__adding_ssh_remotes.mdwn | 66 + ..._2fac85357ac8feccff82beabd3791439._comment | 13 + ..._e9e496005fd1bf5a10c9e286b83e51fa._comment | 8 + ..._913e6ae7c8f7db90b9767ec35fc84205._comment | 23 + ..._634ca3c236e2062289e7df5f0d77a3c5._comment | 8 + ..._e365bbcbb7f66ce2b35fcd5b969ab315._comment | 16 + ..._b15499722a655489f9ea60ff9d4c47c6._comment | 12 + ..._8ea48276f060e75d9f40617d2a1ccd08._comment | 12 + ..._9b8bf7e9fa715977fbeb98087deefd1a._comment | 10 + ..._42e09eacdc10c7cf579bfc6470b5117c._comment | 8 + ..._6c02f31063b3d399d1b4f823bd6543ce._comment | 16 + ..._dd0447cb3b39d3a8c1a7cc00f17d8bc2._comment | 10 + .../assistant/blog/day_71__ssh_probing.mdwn | 26 + ..._56a0c29f7454cfca5cc30b2849e6e942._comment | 8 + ..._f3bd3e366c92c833c7e217da125481b8._comment | 8 + ...mote_ssh_server_configurator_finished.mdwn | 34 + .../blog/day_73__rsync.net_configurator.mdwn | 17 + .../blog/day_74__bits_and_peices.mdwn | 7 + .../blog/day_75__zeromq_and_pairing.mdwn | 50 + .../assistant/blog/day_76__pairing.mdwn | 16 + ..._09665f269343422cd18051fad1a8c19e._comment | 24 + ..._8e1b2233579bc26bfd758bbf6b3bdc07._comment | 10 + ..._a8b6a8432da20c468c633da8e7cbc2f3._comment | 8 + ..._36a428a2e1803f4391b821d1892f0cd7._comment | 10 + ..._11f332fe2050d8c1416e71f9e85ba280._comment | 8 + ..._973aeb656b78eca97474ea1a3f5b57b7._comment | 12 + ..._03d2b3343f34377a4d6171e06b7609f6._comment | 8 + .../assistant/blog/day_77_alert_buttons.mdwn | 21 + .../blog/day_78__pairing_continued.mdwn | 8 + .../blog/day_79__pairing_finished.mdwn | 33 + .../assistant/blog/day_7__bugfixes.mdwn | 45 + .../blog/day_7__bugfixes/profile.png | Bin 0 -> 47098 bytes .../blog/day_7__bugfixes/profile2.png | Bin 0 -> 230937 bytes .../blog/day_80__default_backend.mdwn | 14 + ...enabling_pre-existing_special_remotes.mdwn | 34 + .../blog/day_82__git-annex_branch_work.mdwn | 26 + doc/design/assistant/blog/day_83__3-way.mdwn | 73 + .../blog/day_84__deferred_downloads.mdwn | 33 + .../blog/day_85__more_foundation_work.mdwn | 17 + .../blog/day_86__towards_the_beta.mdwn | 33 + .../blog/day_87__more_progress_progress.mdwn | 28 + ...ay_88__progressbars_still_progressing.mdwn | 18 + .../assistant/blog/day_89__final_polish.mdwn | 24 + doc/design/assistant/blog/day_8__speed.mdwn | 67 + ..._a3dba537b276d5737abc8cb93f1965f4._comment | 10 + doc/design/assistant/blog/day_90__beta.mdwn | 16 + ..._5f2a3b18ad7558abe04f51534a29ff13._comment | 9 + ..._961c4eba97f4eac75174244d6b2b00c0._comment | 8 + ..._c76675a4633cbbe347ed42c222918d38._comment | 24 + ..._f0b8f77cb691e747fe35bcf2f51b5baa._comment | 8 + ..._99fbc9feac62e66a12b0d357cf86ccc1._comment | 8 + doc/design/assistant/blog/day_91__break.mdwn | 7 + doc/design/assistant/blog/day_92__S3.mdwn | 23 + ..._eda656247d11cea7fbed2e33137a39e5._comment | 10 + ..._8249d2d9521e44c674da3fda74be077a._comment | 10 + .../blog/day_93__OSX_standalone_app.mdwn | 23 + .../assistant/blog/day_93__easy_install.mdwn | 34 + ..._d4f7de723c98577ef28d89ee6b87fd13._comment | 10 + ..._6337b341c1cfb2132b59704394e57b36._comment | 8 + .../blog/day_95__repository_groups.mdwn | 21 + .../blog/day_96__revisiting_file_adds.mdwn | 24 + ..._da3ca47041168b6c82aeb2c18acc5017._comment | 8 + .../assistant/blog/day_97__stuffing.mdwn | 14 + .../blog/day_98__preferred_content.mdwn | 44 + ..._2136618e3515d0ac6369a41f1934ec2a._comment | 17 + ..._5f6db00e69628bf2f72b0e6f2981a49b._comment | 14 + doc/design/assistant/blog/day_99_shotgun.mdwn | 70 + ..._12bb8f54bb13ea20ac4187a2301d77ca._comment | 10 + .../assistant/blog/day_9__correctness.mdwn | 30 + ..._564a39cb976767e2c0a9c74fabe10be4._comment | 8 + ..._77924e9d50b40f05e792e427a25849a6._comment | 9 + ..._92bd86cd06d579e23800af2e5c66a291._comment | 8 + ..._0d12b51ccdfc2a94d3e59a5628521e0a._comment | 10 + ..._208f9dd3e1d92555b05c29159538a901._comment | 14 + ..._90cc6b60718896fb175919417600fdf9._comment | 8 + doc/design/assistant/chunks.mdwn | 271 + ..._a3b24ff308664e89c97d23034e4ffe2f._comment | 8 + ..._ec5c7a80d1e17db19d178e821f6534e5._comment | 8 + doc/design/assistant/cloud.mdwn | 45 + ..._4997778abc171999499487b71b31c9ba._comment | 16 + ..._08da8bc74a4845e354dca99184cffd70._comment | 8 + ..._faafd1266301997b1822d215ec8e8d8c._comment | 8 + ..._3eb557d5439831f6e0032944d12c02cf._comment | 12 + ..._f2233fad55c20686cf299bf6788f1f23._comment | 10 + ..._a38f0f21c2346e65b786d791b6829f9b._comment | 12 + ..._5e991177d6577384f39a36ae02f5f574._comment | 13 + ..._f8625c6f43b58847840df338a73b7972._comment | 7 + ..._c37ef5931b0f5c1f808083e0d636a208._comment | 11 + ..._68c98a27083567f20c2e6bc2a760991b._comment | 9 + ..._8e6788c817c60371d2a2f158e1a65f87._comment | 8 + ..._97bdfacac5ac492281c9454ee4c0228e._comment | 8 + ..._53137b2df4913496c0afb2d895aa4ee2._comment | 8 + ..._ff1b0ba57e22ed757ec3fc5400b5e43e._comment | 8 + ..._a48fcfbf97f0a373ea375cd8f07f0fc8._comment | 8 + ..._099da245e3276fa84f5e14312d186621._comment | 8 + ..._6d3552414fdcc2ed3244567e6c67989d._comment | 7 + ..._05223be50c889b2ed6bc4abf74116450._comment | 9 + ..._fbbd93b55803ae21e6ba4b6568c2fafd._comment | 9 + ..._f4e9af3fed6c27e8ff39badb9794064d._comment | 12 + ..._c7ad07cade1f44f9a8b61f92225bb9c5._comment | 10 + ..._609d38e993267195a80fecd84c93d1e2._comment | 8 + ..._22b818e1a2a825efb78139271a14f944._comment | 10 + ..._d052e2142da8b4838fb1edf791ea23ae._comment | 10 + doc/design/assistant/configurators.mdwn | 20 + doc/design/assistant/deltas.mdwn | 27 + ..._bdb477af913c9782c0e8509e6b294b6e._comment | 8 + ..._71889d15ba20ebb0fe13080c68162a5b._comment | 11 + ..._c60bbe9b280855a583c7c3e48e803760._comment | 12 + ..._d1728f96202b7113b0671b90ed16473d._comment | 11 + doc/design/assistant/desymlink.mdwn | 145 + ..._f1bfe250b7f872359f7075998b6e42e3._comment | 11 + ..._5e876edfe9853645f761b5ed9b5021aa._comment | 9 + ..._538561d74371e53c2f8df7f5ebdf58a8._comment | 8 + ..._586ecaa800e6c162377c937da5e65440._comment | 12 + ..._8fc703de67814cf2aec2a908852298a4._comment | 10 + ..._1b473ad89494afb82250af4b6df5f5c9._comment | 22 + doc/design/assistant/disaster_recovery.mdwn | 185 + ..._955dc807196863da23aa8dbd15e04364._comment | 10 + .../assistant/encrypted_git_remotes.mdwn | 22 + doc/design/assistant/gpgkeys.mdwn | 40 + ..._a14427f88c9fd8e25ad8708146bb4bff._comment | 15 + doc/design/assistant/inotify.mdwn | 234 + ..._3d3ff74447452d65c10ccc3dbfc323cd._comment | 7 + ..._a3c0fa6d97397c508b4b8aafdcee8f6f._comment | 7 + ..._b346e870c1cd80e4b0a313c3a9fed6b3._comment | 8 + ..._32be58b4c3b17a4ea539690d2fb45159._comment | 12 + ..._0cdd3046d90ad2012025d846ece0731e._comment | 8 + ..._e197d5d0d853572ec1f2e5985762e60d._comment | 9 + ..._00809aaad6b68f189a9cc42af810a0a6._comment | 8 + doc/design/assistant/leftovers.mdwn | 17 + ..._b20c88bb3c583a32023c1f6b6dc9486d._comment | 8 + .../assistant/more_cloud_providers.mdwn | 22 + doc/design/assistant/pairing.mdwn | 83 + doc/design/assistant/partial_content.mdwn | 36 + ..._58c4faa321a5bb71adf9fdee079849f4._comment | 18 + ..._588009d2140b7d259cdf191dca539e14._comment | 9 + doc/design/assistant/polls.mdwn | 1 + .../assistant/polls/2013_user_survey.mdwn | 1 + doc/design/assistant/polls/Android.mdwn | 18 + ..._fa6c409833f28c67da105d25f4a440e0._comment | 8 + .../polls/Android_default_directory.mdwn | 7 + ..._d39655091ac3ed51a9d4325d86b23ad7._comment | 10 + ..._2f1eaae95075db26488517720afd1c63._comment | 8 + ..._b484012f60789be73d7d5b338cff6203._comment | 10 + .../assistant/polls/goals_for_April.mdwn | 17 + ..._9f81fa96db5970a4be0828c74a6d2d55._comment | 22 + ..._d8956d220ccacff3d2f6cbeb15718459._comment | 28 + ..._aadad6dfd56d068d2e377606910c006f._comment | 8 + .../polls/prioritizing_special_remotes.mdwn | 16 + ..._dd9280df27848a7ff132f5809dab0a79._comment | 8 + ..._370e0b9c43486ee96c825f9155eebde4._comment | 8 + ..._883a003b9c552b89f191135c582f99aa._comment | 14 + ..._746006c3fffc7f917c4526fd688051f7._comment | 8 + ...ing_me_from_using_git-annex_assistant.mdwn | 16 + ..._10a4839a05be39ced54ffbe880a588bb._comment | 25 + ..._ac91d866f11c66dd8c86e2cd1a368c85._comment | 10 + ..._e244c1bf334b1cc9ad0cc760bf8fe5de._comment | 29 + ..._1a0faf4bdc78741937e8a2f5cb5bbec6._comment | 12 + ..._8d8a11dbfae7a7bc574bdf37f87e0684._comment | 16 + ..._c437adeaccf0b3d134e0f81c64e25b9f._comment | 14 + ..._6e3fce3a32ab346dc3d0fd4b69967536._comment | 8 + ..._1b7233d88593d0d99b26ea3e7af20d9c._comment | 8 + ..._a23d5a0e2718b8e486f036fe8a413b36._comment | 10 + ..._f4c84a9d701d52cf2f2e45f3d764a90c._comment | 18 + ..._00a0de8190d946caaeeca3b44646146f._comment | 16 + ..._199c9807499470771af6cbca6d034cfa._comment | 8 + ..._9185b0e05b1b1997533694da1de83073._comment | 22 + ..._35f6f121e54260cb960211a6e2e51e8e._comment | 14 + ..._acbe4f63b5d552ac5ae5a12c6f42dc18._comment | 25 + ..._0d988280865caae498a3b693b6342e37._comment | 16 + ..._ac8fe3768c30dd7999c183500f8567bb._comment | 19 + ..._36832de705a2bebf8dc6e65dcd661731._comment | 15 + ..._3618067e473577a112e36970ca71e0ab._comment | 12 + ..._07a13b6f000ddc0ac4472b863d8b50bd._comment | 14 + ..._e15eb407d988fda363296c8b566cc8fb._comment | 12 + doc/design/assistant/progressbars.mdwn | 43 + ..._3ea263b1f334e8e38e14f00a96202988._comment | 8 + doc/design/assistant/rate_limiting.mdwn | 57 + ..._bd0fd62297ff1f87884b41c11fc4320c._comment | 9 + doc/design/assistant/screenshot/firstrun.png | Bin 0 -> 54347 bytes doc/design/assistant/screenshot/intro.png | Bin 0 -> 50730 bytes doc/design/assistant/sshpassword.mdwn | 65 + ..._24399abe0a0c1de271490ee15e064760._comment | 8 + ..._36a811bca209c7ac8a44d64bf8bc5bf3._comment | 8 + doc/design/assistant/syncing.mdwn | 220 + ..._c70156174ff19b503978d623bd2df36f._comment | 19 + ..._eb992b5b2c7a5ce23443e2a6007e5ff9._comment | 8 + ..._e1b5e8a24556de16d1cacd27ee0c1bd1._comment | 80 + doc/design/assistant/syncing/efficiency.mdwn | 77 + doc/design/assistant/telehash.mdwn | 136 + ..._8b08b5c30e5aea3fc4599f856fd25df5._comment | 8 + doc/design/assistant/todo.mdwn | 4 + doc/design/assistant/transfer_control.mdwn | 123 + ..._d5adaef4712913dc0263d4ebafb79320._comment | 15 + ..._3b51474fefa6c0d19055046e06af196d._comment | 14 + ..._44a1a6d2db9097de9ae68ea1ff1b08a2._comment | 8 + doc/design/assistant/upgrading.mdwn | 52 + doc/design/assistant/webapp.mdwn | 65 + ..._bab6f6fa720273c0f9700a3765150189._comment | 8 + ..._3cf0cf460c7869d0cc22940fcc84aec4._comment | 10 + ..._428e153135f7a64215730719207d82c4._comment | 8 + ..._f4068a7abbb77ba6a3297cbcf1e503e9._comment | 10 + ..._2bdb436f35c659316193b89ee6e52fcb._comment | 11 + doc/design/assistant/windows.mdwn | 33 + ..._f4b829318b182e1cec29f13babb6498e._comment | 10 + doc/design/assistant/xmpp.mdwn | 136 + ..._f20650f93d7f0ca39b9ba3ce0380193f._comment | 10 + ..._8c22839a8f5912b4a817415c4a359697._comment | 8 + ..._773102522f21844cffc841e6cde9229e._comment | 8 + doc/design/assistant/xmpp_security.mdwn | 29 + ..._c714e86553c02600249795efb224be8a._comment | 10 + doc/design/balanced_preferred_content.mdwn | 149 + ..._a7eea522b04ddefbd0b9ff49dfb82d15._comment | 8 + doc/design/caching_database.mdwn | 153 + doc/design/encryption.mdwn | 118 + ..._4715ffafb3c4a9915bc33f2b26aaa9c1._comment | 12 + ..._a610b3d056a059899178859a3a821ea5._comment | 10 + ..._cca186a9536cd3f6e86994631b14231c._comment | 12 + ..._8f3ba3e504b058791fc6e6f9c38154cf._comment | 10 + ..._520e60aa53217b5ba428d4c05d897dee._comment | 16 + ..._d677fead0fe0c543f48f07d85f83f592._comment | 14 + ..._c1c38a09b1276e29adc3ba564dc0fe4e._comment | 14 + .../exporting_trees_to_special_remotes.mdwn | 356 + ..._75ba45174d3c4b927113a6908061b742._comment | 15 + ..._0827f5611c8e7e7ffa2633f8c06ae055._comment | 8 + ..._1bb8d57383ca733f3a0069ff30181366._comment | 10 + ..._f857e15124b70ae1abc74669f63a2d68._comment | 9 + ..._41e8ef74c6e62a4321d2046b2571a246._comment | 17 + ..._3fc518cee1a11b28da769c0915d33e3b._comment | 13 + ..._29f598eda413c0d5e17536d8f9438d31._comment | 11 + ..._32a3240206c5ffff71a47dffa6950c48._comment | 23 + ..._fe77370699b7ce0acd547fd1e045e254._comment | 15 + ..._00d28c758509939974e4583e9b1b9e12._comment | 10 + ..._1eda1af40f6ca82a8bacd19afaa749bc._comment | 18 + ..._ea84ee9de604e05b8e02483ba8452186._comment | 15 + ..._062098e1f54b874467793e4487a45a9b._comment | 8 + ..._d414fb575845770e003a3c8ca4a986be._comment | 10 + ..._cb063cdc66df79c40039bce247b7170c._comment | 9 + ..._126ee5332ff88b3993d33d59328d4148._comment | 24 + ..._fcd9890013371dae6ffcd00561b8c625._comment | 28 + ..._3217c2f852e5d9b1e4be2adff995dd24._comment | 19 + ..._43a98b4b9d9eb54720a9c92cd8bb3a30._comment | 14 + ..._7e512ef81c529b0392071b8a6dfe853b._comment | 11 + ..._6c588170f0b53c74c3c28ff08ed3509d._comment | 9 + doc/design/external_backend_protocol.mdwn | 188 + ..._7a55199030c3b9f455354139af7dbac0._comment | 8 + ..._e6005a7563a65c0fd4615cc3f2c3034b._comment | 16 + ..._cd3410e6c1088289f71ed30b34d802f9._comment | 9 + ..._5b9814ca55e5fab94725ecdb5b1618f0._comment | 13 + ..._75ff466d7eeccd1eda9f8f18f465b296._comment | 10 + .../git-annex-backend-XFOO | 58 + .../external_special_remote_protocol.mdwn | 554 + .../async_appendix.mdwn | 98 + ..._850d3eb7c04088041c96686b88c36662._comment | 8 + ..._897dbfbd4ed9c0f520bd2d4d0c961745._comment | 10 + ..._8d3c35eb0a2a9c57b10566fcaf56d248._comment | 8 + ..._241e57092d9e5631ac0ec4dd962477a6._comment | 12 + ..._e3029c65d34f78272bc11961ebfd8237._comment | 10 + ..._472748f03ba8dad773da7f35b70cb6e4._comment | 15 + ..._71c3e21a72222250bab933e1c9167fbc._comment | 14 + ..._c77386deddc64b2028d9c3a7393d4df7._comment | 10 + ..._62b137a138c143a8110886cc0bbb677e._comment | 8 + ..._8dc7bbf485c9385a4b506e8b8fa934fe._comment | 23 + ..._a0ed457b1b0d71747b6cf0c45897b5e1._comment | 19 + ..._89d532a5013af24f15a0d003cbfbab25._comment | 13 + ..._5baff75d278394a8818c348fb4f13b8a._comment | 10 + ..._546331742e906a68d760c1bf44be63c4._comment | 13 + ..._a8e8255516dc4741439615fa43b71829._comment | 8 + ..._0387827d94f141be53458807da9c2fc2._comment | 9 + ..._7a5af50f7c482d7c02c53be28ddb6a66._comment | 13 + ..._3340d3c34f2ec197f9010d97da8eb7af._comment | 11 + ..._56f38d934125c28172b6475bdb4de284._comment | 10 + ..._4f8addd76a1e64d05a34910d4719a40c._comment | 11 + ..._9153a5c49710bf57d11338829f66fa78._comment | 10 + ..._74961b12a73a52a700e10a21674e66ee._comment | 7 + ..._c1d97815386453c3e433fca9a44c4667._comment | 9 + ..._70429b7c4f1e4083a9d5a6e2e238056d._comment | 8 + ..._7d045871f9ebbb89e3f9bbfa28e8468f._comment | 18 + ..._907597187020180e7730e27e86f6da5e._comment | 8 + ..._f6b8306cfdcb3792728aa47af0677338._comment | 11 + ..._bee7ff39f3989dfbec292490e47bcaaa._comment | 19 + ..._af6ae46fa9228461573dd7b2f0713ef1._comment | 8 + ..._2f71f6d0caf4fa5ccd26618026714975._comment | 12 + ..._f8081ce200700516efef61ec0ac86f86._comment | 8 + ..._2aef2647d7df69876f107247e039f5a6._comment | 9 + ..._62f6621259587333a83776cf514b2497._comment | 27 + ..._ea321b96df3314a9e2a35cd0f8312972._comment | 13 + ..._c763e44d06d9f50f0d357889b180b819._comment | 15 + ..._a312c0180bce6dbbd03b14b8ba3dcb5f._comment | 8 + ..._7d63261342ea475f696cadb419782dbb._comment | 51 + ..._485588573d8d9f74e64cdf560f65e7fe._comment | 9 + ..._d942d979773d9361fbf3dde28c26a941._comment | 17 + ..._a72db8ed716effc507e7127f9ec95dc4._comment | 8 + ..._a25f00fb081e30f639376b6ad94cdb30._comment | 18 + ..._7ecdba05cb2bfc7d868b81bbd3e3f964._comment | 20 + ..._9d48c85b896f738323dec28c1955ee22._comment | 13 + ..._d378ab8adc6a73a17c39d62978cb9e90._comment | 26 + ..._9045ad13ad2c2f998173a870174eb3ee._comment | 9 + ..._20ff41d82b5f1872698a5b24adcd0c41._comment | 12 + ..._fdd9804134e6fe5e6527f35fc782cb80._comment | 8 + ..._c0eaa8639ad2b21ac917d9033d77a327._comment | 9 + ..._3c8c5a1d388929da4629f14b099d02d1._comment | 12 + ..._a2d1778e6d61f9cb606fb83f0a4a73f4._comment | 10 + ..._0225736488f9c1e7f78a08eea8ca864d._comment | 24 + ..._3ee158e548002badae5bf44dc0442626._comment | 13 + ..._ee2828ce25b83bbabc9d5dde35d1e57b._comment | 12 + ..._edb649d0019a061ef7bf6534a444429d._comment | 16 + ..._1f4c205a5ce6f33ccf2f4d80754e5699._comment | 8 + ..._15c4cfe064be37cc104dcb6aa049a449._comment | 14 + .../export_and_import_appendix.mdwn | 347 + ..._9bcf18e2bbe04bf5321e4fc33cca577c._comment | 8 + ..._6bea5a316df43a8306fb1cb19192db3f._comment | 12 + doc/design/gcrypt.mdwn | 8 + doc/design/git-remote-daemon.mdwn | 173 + ..._bfa8f33a3fdb6e271dfbdd0378b5d364._comment | 16 + doc/design/iabackup.mdwn | 242 + ..._d33c0910973bc37ce81bf434017e11fd._comment | 11 + ..._c0a59549409faa355a461e85a1c3f908._comment | 8 + ..._560d3f65d543c3af9722ed7e9a11e920._comment | 13 + ..._465c0966c96a57d189f678d4fa724aa0._comment | 13 + ..._7e4d1db9c69c63e79ca13db2ad87c384._comment | 7 + .../importing_trees_from_special_remotes.mdwn | 345 + doc/design/metadata.mdwn | 182 + ..._9bc2825b18ce29d2c9b2f085b95aa68c._comment | 18 + ..._402d7d3e8e7f2df57eb6685134226642._comment | 14 + ..._22ed80bd8eabaa836e9dfc2432531f04._comment | 22 + ..._03ae28acedbe1fa45c366b30b58fcf48._comment | 14 + ..._ee850df7d3fa4c56194f13a6e3890a30._comment | 12 + ..._c32ade1524487e5fdc6f83b2db39f04c._comment | 8 + ..._0ac3132cd7a84f0e170fbe3a6f235fe7._comment | 8 + ..._fa51ae544b193122334dbae7960ab3d9._comment | 15 + ..._04cd255a516c8520a7bc1a8fad253533._comment | 8 + ..._0a7e55e7626f72f63966fa1e1d2cf100._comment | 8 + ..._f0bb62c885a925e0da5ae8ce3c5e9003._comment | 10 + doc/design/new_repo_versions.mdwn | 230 + ..._b7b4819211910556838ec37bc2b6b37b._comment | 14 + ..._8f35254d2cd5d0c273d5392ddd857c2d._comment | 24 + doc/design/p2p_protocol.mdwn | 212 + ..._367bebae5b84408c7592b5fcca993c1e._comment | 30 + ..._dbd118a01c31d17a4223a32a7baa8e39._comment | 15 + ..._94fff4c163de15cdad2030ac072b19ae._comment | 8 + ..._f48e73ea2b6f70597837d09d3c5d3849._comment | 9 + ..._08b190ff1c6d1e890311edf7cc7bfcd4._comment | 20 + doc/design/passthrough_proxy.mdwn | 127 + doc/design/preferred_content.mdwn | 21 + doc/design/requests_routing.mdwn | 100 + ..._421b14a4dd9d6c431e00333057df1627._comment | 10 + ..._a409df0566b308bf2b84efd4fb2c8a8f._comment | 7 + ..._924e6254bf51a5b19eb7fe635053a16e._comment | 10 + doc/design/requests_routing/simroutes.hs | 402 + doc/design/roadmap.mdwn | 12 + doc/devblog.mdwn | 3 + doc/devblog/day_-1__drop_dead.mdwn | 5 + doc/devblog/day_-3__.mdwn | 29 + doc/devblog/day_-4__forgetting.mdwn | 80 + ..._f3cc7a25af4c59fda3924c737a789419._comment | 8 + ..._e47476c80af02a2e9cf76c53fdbb8534._comment | 9 + ..._b57956a8ce372d620f21ea9a497e8013._comment | 8 + ..._812b630df01ac35254e3c4e677554e2b._comment | 8 + ..._a9670eca2aff9ad5f04412a8d8b6df6a._comment | 8 + ..._4f87e2ab119f3cd81266159f02952188._comment | 9 + ..._a865216046aa91a47d0d2b2f0668ea89._comment | 12 + ..._3f7045a00905b4287d950b08d5a77a82._comment | 9 + ..._d9121a5172f02df63364f19eae87d011._comment | 8 + .../day_100__git-annex_sync_--content.mdwn | 4 + doc/devblog/day_101__old_mistakes.mdwn | 23 + ..._2c6e991efde3296450189b2821f2ccc3._comment | 17 + ..._524690d69056737dd296e4f7626737d2._comment | 12 + doc/devblog/day_102__cleanups.mdwn | 10 + doc/devblog/day_103__unused.mdwn | 34 + doc/devblog/day_104__unused_II.mdwn | 7 + ..._a693a56123497a39c30cbd35b8e35bce._comment | 10 + ..._9833fb9daa50bc838cc46ca2f6c16580._comment | 10 + ..._873a882ec1ddc3be473473cb224a9040._comment | 12 + ..._5ef1bb4d69cf7206f7ca0e542abad6bd._comment | 13 + ..._1964bfce4887c9c0828fd7f54f5b4f6b._comment | 12 + ..._0ed4023c9c249024fe0454fc5bab3b14._comment | 10 + doc/devblog/day_105__locking.mdwn | 30 + doc/devblog/day_106__catching_up.mdwn | 5 + doc/devblog/day_107__TDD.mdwn | 10 + ...ay_108__new_use_for_location_tracking.mdwn | 20 + .../day_109__elimintating_absNormPath.mdwn | 18 + doc/devblog/day_10__lazy_Sunday.mdwn | 23 + doc/devblog/day_110__release_prep.mdwn | 25 + .../day_111__windows_beta_release.mdwn | 6 + doc/devblog/day_112__metadata_design.mdwn | 18 + doc/devblog/day_113__metadata_groundwork.mdwn | 9 + doc/devblog/day_114__windows_porting.mdwn | 8 + doc/devblog/day_115__windows_porting.mdwn | 17 + doc/devblog/day_116__views.mdwn | 54 + doc/devblog/day_117__views_implemented.mdwn | 76 + doc/devblog/day_118__views_refined.mdwn | 7 + doc/devblog/day_119__catching_up.mdwn | 15 + ..._8aa413e75cab411b0aec254f0f33ebb9._comment | 8 + ..._db31d08690730836ce6277e797fcae1d._comment | 8 + ..._d44da76b18f53a5f51b46e3e15090a48._comment | 8 + .../day_11__webapp_encrypted_drives.mdwn | 12 + doc/devblog/day_120__more_metadata.mdwn | 17 + .../day_121__special_remote_maintenance.mdwn | 23 + doc/devblog/day_122_more_windows_porting.mdwn | 4 + doc/devblog/day_123__stuck.mdwn | 13 + doc/devblog/day_124__day_off.mdwn | 13 + doc/devblog/day_125__metadata_and_views.mdwn | 11 + doc/devblog/day_128__release_prep.mdwn | 27 + doc/devblog/day_12__gpg_key_generation.mdwn | 35 + ..._48cdfe3bd71fb348ae05fd90e8cf1dab._comment | 8 + doc/devblog/day_130__post_release.mdwn | 17 + doc/devblog/day_131__more_bug_squashing.mdwn | 11 + doc/devblog/day_132__database_musings.mdwn | 17 + doc/devblog/day_133__db_and_bugfixes.mdwn | 20 + ...y_134-135__avoiding_the_turing_tarpit.mdwn | 18 + doc/devblog/day_136__frustrating_day.mdwn | 10 + ...-138__bug_triage_and_too_much_windows.mdwn | 15 + doc/devblog/day_139-140__traveling.mdwn | 17 + .../day_13__encrypted_sneakernet_working.mdwn | 13 + doc/devblog/day_141__f-droid_sprint.mdwn | 3 + ..._1cc76207020ac478747117c76d7b5f9c._comment | 8 + doc/devblog/day_142__digging_out.mdwn | 13 + doc/devblog/day_143__foolish_hiatus.mdwn | 20 + doc/devblog/day_144__catching_up.mdwn | 12 + ..._311a7245dd12f1a7e432168d16041348._comment | 8 + doc/devblog/day_145__a_plan.mdwn | 16 + ..._c0ceea77443be1172527ed8549f000a4._comment | 10 + ...day_146__halfway_to_git-remote-daemon.mdwn | 17 + .../day_147__git-annex_remotedaemon.mdwn | 5 + doc/devblog/day_148__too_many_documents.mdwn | 8 + .../day_149__remote_control_working.mdwn | 15 + doc/devblog/day_149__signal.mdwn | 16 + ..._14__gcrypt_refinements_and_OOM_fixes.mdwn | 26 + doc/devblog/day_15-17__Android_rebuild.mdwn | 67 + doc/devblog/day_151__birthday_bug.mdwn | 18 + .../day_152__more_ssh_connection_caching.mdwn | 37 + .../day_153__remotedaemon_has_landed.mdwn | 10 + ..._f19ae6b3d6f33a68e4ffe0c32f788745._comment | 13 + ..._fbf0c50f772e958af638d2b72dac73f5._comment | 10 + doc/devblog/day_154__catching_up.mdwn | 13 + doc/devblog/day_155__missing_bits.mdwn | 27 + ..._76424498600ba603946035efffb88023._comment | 8 + doc/devblog/day_156__release_day.mdwn | 14 + doc/devblog/day_157__upgrade_checking.mdwn | 22 + doc/devblog/day_158__enroute_to_Brazil.mdwn | 10 + doc/devblog/day_159__tmp_file_cleanup.mdwn | 12 + doc/devblog/day_160__.mdwn | 20 + doc/devblog/day_161__routing_design.mdwn | 13 + ...g_sim_and_massive_contribution_landed.mdwn | 17 + .../day_163__request_and_routing_design.mdwn | 3 + doc/devblog/day_164__back.mdwn | 17 + doc/devblog/day_165__sshpassword_merged.mdwn | 18 + doc/devblog/day_166__catching_up.mdwn | 40 + ...e_community_of_git-annex_contributors.mdwn | 11 + doc/devblog/day_168__backlog_continued.mdwn | 16 + doc/devblog/day_169-171__juggling.mdwn | 14 + doc/devblog/day_172__.mdwn | 7 + .../day_173-174__android_rebootstrap.mdwn | 8 + doc/devblog/day_175__encoding_day.mdwn | 20 + doc/devblog/day_176__mostly_a_day_off.mdwn | 8 + doc/devblog/day_177__enabling.mdwn | 21 + ..._820d29f84dade09b0e7bb7435c52fcb8._comment | 12 + ...day_178-179__screencast_and_what_next.mdwn | 12 + ..._eeba788fed45cb22f9cc2a738ceaa074._comment | 8 + ..._d44e67e34615c7b00e29f307556cdd06._comment | 8 + doc/devblog/day_180__porting.mdwn | 13 + ..._133875f4435a298b85ddfb8a2cc11a7a._comment | 9 + doc/devblog/day_181__tricky_merge.mdwn | 8 + doc/devblog/day_182__service.mdwn | 6 + .../day_183__rubbing_sticks_together.mdwn | 23 + doc/devblog/day_184__windows_month.mdwn | 22 + doc/devblog/day_185__service.mdwn | 6 + doc/devblog/day_186__cracked_it.mdwn | 8 + ..._288b736adf392acd0f45667b2980138d._comment | 11 + ..._d1d79e93ac420f6b3a6f8a622e8e00bd._comment | 8 + ..._8ca17a51b10b4e4a63d0672d5ce29024._comment | 8 + doc/devblog/day_187__release_prep.mdwn | 10 + ..._206692d16177c2a9ca11c0eeff545697._comment | 13 + ..._961fb35d9cf7d5e518f8d0bddb8626a6._comment | 8 + doc/devblog/day_188__back_sans_laptop.mdwn | 5 + .../day_189__finally_working_again.mdwn | 18 + doc/devblog/day_190__fun_fixes.mdwn | 13 + doc/devblog/day_191__semidistracted.mdwn | 7 + doc/devblog/day_192__release_day.mdwn | 4 + doc/devblog/day_193-194__ugly_bug.mdwn | 37 + doc/devblog/day_195-196__catching_up.mdwn | 13 + .../day_197__autobuilder_rescuscitation.mdwn | 14 + doc/devblog/day_198__branching_out.mdwn | 23 + ..._91ce3dc707ba1ba7c5d9e57e20ffce40._comment | 8 + doc/devblog/day_199__ten_minute_cycle.mdwn | 6 + doc/devblog/day_19__moving_on.mdwn | 37 + ..._870106f671f9a055b81e6fc83e0850b5._comment | 8 + ..._fad055c8860385ac6c012f897c96408f._comment | 10 + ..._69e47d612159587f080ab761566d1830._comment | 18 + .../day_1__inauspicious_beginning.mdwn | 11 + ..._cc4dea43caf3126c6f814b589b701d70._comment | 10 + doc/devblog/day_200__one_year_along.mdwn | 17 + doc/devblog/day_201__chunky.mdwn | 12 + .../day_202__new_chunk_groundwork.mdwn | 6 + doc/devblog/day_203__in_the_weeds.mdwn | 39 + doc/devblog/day_204__mowing.mdwn | 64 + doc/devblog/day_205__incremental.mdwn | 21 + doc/devblog/day_206__zap.mdwn | 83 + doc/devblog/day_207__at_last.mdwn | 34 + doc/devblog/day_208__testremote.mdwn | 10 + doc/devblog/day_209__mass_conversion.mdwn | 32 + .../day_20__gcrypt_and_git-annex-shell.mdwn | 14 + .../day_210__conversion_and_digression.mdwn | 14 + doc/devblog/day_211__conversion_complete.mdwn | 12 + doc/devblog/day_212__webdav_rewrite.mdwn | 18 + doc/devblog/day_213__newchunks_merged.mdwn | 15 + .../day_214-215__wrapping_up_recent_work.mdwn | 16 + doc/devblog/day_216__various_minor_bugs.mdwn | 16 + ..._0d0a0e75b9446f8a1c4cc43f36569473._comment | 8 + ..._6b06b3f46f20a6d2e60684d1d59fca07._comment | 8 + ..._05177e2ed414d22711dcec57a614e38c._comment | 8 + doc/devblog/day_217__autobuilders.mdwn | 10 + doc/devblog/day_218__scary_locking.mdwn | 24 + ...day_219__catching_up_and_looking_back.mdwn | 109 + ..._16b13b2510183a9da5f960ae5765e581._comment | 10 + ..._460c064bebb5061fcba2a6c79f039362._comment | 19 + ..._9699d5a9de5ea64fbc876352e20261c4._comment | 8 + ..._23c4ede3db0ea8165311466881cfa6a2._comment | 10 + ..._7997305d7ec7db072b78dd0c31ecd824._comment | 8 + doc/devblog/day_21__bugfix_day.mdwn | 5 + .../day_220__working_through_backlog.mdwn | 14 + ...ay_221__another_fine_day_of_bugfixing.mdwn | 10 + .../day_222_preparing_for_debian_release.mdwn | 12 + .../day_223__partial_commit_problem.mdwn | 26 + doc/devblog/day_224-226__long_rainy_slog.mdwn | 14 + doc/devblog/day_227__info.mdwn | 33 + doc/devblog/day_229__S3_multipart.mdwn | 11 + doc/devblog/day_22__gcrypt_on_rsync.net.mdwn | 20 + .../day_230__S3_multipart_round_2.mdwn | 9 + .../day_231__S3_multipart_wrapped_up.mdwn | 13 + doc/devblog/day_232__OSX_Yosemite.mdwn | 6 + doc/devblog/day_233__direct_mode_proxy.mdwn | 29 + doc/devblog/day_234__undo_undo.mdwn | 6 + .../day_235__thanksgiving_backlog.mdwn | 18 + doc/devblog/day_236__release_day.mdwn | 10 + doc/devblog/day_237__extending_addurl.mdwn | 14 + .../day_238__extending_addurl_further.mdwn | 67 + .../day_239-240__bittorrent_remote.mdwn | 16 + doc/devblog/day_23__GNU_day.mdwn | 23 + .../day_241-242__end_of_year_cleanup.mdwn | 22 + doc/devblog/day_243__android_5.mdwn | 16 + ..._59a139108f4cf20dd7443a5fa767f614._comment | 9 + doc/devblog/day_244__relative_paths.mdwn | 14 + doc/devblog/day_245__yak_shaving.mdwn | 9 + doc/devblog/day_246__old_todos.mdwn | 9 + ...247__hooks_and_large_files_on_windows.mdwn | 30 + doc/devblog/day_248__workload_tuning.mdwn | 54 + doc/devblog/day_249_onward.mdwn | 28 + ..._80af832a132ee37a470d0586ae751f2a._comment | 10 + ..._ada958a8df4da36b25a456a7700b310f._comment | 8 + .../day_24__nearly_done_with_gcrypt.mdwn | 23 + doc/devblog/day_250__backog_bugfixing.mdwn | 10 + .../day_251-252__dusting_off_the_roadmap.mdwn | 12 + .../day_253__sqlite_for_incremental_fsck.mdwn | 58 + ..._683d669ac6af8e314585609f75cfdaf3._comment | 7 + ..._08dd639180ae79addc007ee47d52048a._comment | 7 + doc/devblog/day_253__ssh-options.mdwn | 5 + ...55__sqlite_concurrent_writers_problem.mdwn | 34 + .../day_256__sqlite_concurrency_argh.mdwn | 28 + doc/devblog/day_257__release_day.mdwn | 17 + .../day_258__database_branch_merged.mdwn | 25 + doc/devblog/day_259__submodules.mdwn | 8 + doc/devblog/day_25__finishing_up_gcrypt.mdwn | 25 + doc/devblog/day_260__random_month.mdwn | 27 + doc/devblog/day_261__random_improvements.mdwn | 5 + doc/devblog/day_262__ipfs.mdwn | 16 + doc/devblog/day_263__diving_back_in.mdwn | 7 + doc/devblog/day_264__catching_up.mdwn | 7 + doc/devblog/day_265__at_Dartmouth.mdwn | 4 + doc/devblog/day_266-267__man_page_split.mdwn | 16 + ..._d55600917128cb0ce38002fbf6f0b088._comment | 7 + ..._63791201452a6ab30a35cd742434acca._comment | 8 + ..._d7764c605ad338c4bf4c4b46b54abd8a._comment | 8 + doc/devblog/day_268_stressed_out.mdwn | 18 + ..._d28352c9fbc988ece19688a687d30ffe._comment | 10 + ..._f7b04b2e96f0fc7530f1c21ccfcfb0f9._comment | 8 + ..._0eb4c17d35fba9db6a7446a5f253ace9._comment | 24 + ..._fecf179be92c3a3e25f4a47fcea6b6ec._comment | 10 + .../day_269__wildcards_and_podcasts.mdwn | 26 + .../day_26__gcrypt_really_done_this_time.mdwn | 17 + doc/devblog/day_270__distributed_fsck.mdwn | 27 + .../day_271__parallel_get_groundwork.mdwn | 32 + doc/devblog/day_272__forest_for_trees.mdwn | 13 + doc/devblog/day_273__unexpected_release.mdwn | 15 + .../day_274__concurrent_annex_state.mdwn | 42 + ..._7414fc0dde7a1d1ee456f8eba0b0c2a9._comment | 11 + ..._4ca498ee4b4aaac8ee6dbc2c769dbad7._comment | 21 + doc/devblog/day_275-276__mostly_Windows.mdwn | 20 + doc/devblog/day_277__thanks.mdwn | 20 + doc/devblog/day_278__release_day.mdwn | 25 + doc/devblog/day_279__.mdwn | 10 + doc/devblog/day_27__locking_fun.mdwn | 49 + ..._0eb247235fbf8f563934f3548e1d2e10._comment | 8 + ..._e8b1dfe1b0641e031d05733448b7bc8b._comment | 8 + ..._b67f8ef4ed42b49c8c2e6c4e53163b16._comment | 18 + ..._0759644baf26b75f4e48dbb387d725a5._comment | 10 + doc/devblog/day_280__slow_week.mdwn | 16 + ...tching_up__and_arm_autobuilder_needed.mdwn | 43 + doc/devblog/day_282__release_day.mdwn | 16 + doc/devblog/day_283__lazy_sunday.mdwn | 7 + ..._fdc6da890e2dc6b86b6a5fe2ebceea4a._comment | 9 + doc/devblog/day_284__development.mdwn | 33 + ...day_285__tuning_git-annex_unused_refs.mdwn | 20 + ..._a3f0dd4fc8457af7c72040fbe8fd5fee._comment | 13 + ..._dae167e473c60dace129c66beb0af384._comment | 7 + ..._52179fc326e681d8fbf85ee8963f352c._comment | 9 + doc/devblog/day_286-287__rotten_locks.mdwn | 44 + doc/devblog/day_288__microrelease_prep.mdwn | 22 + ..._99e359976acbdb9727598f8a87027de0._comment | 7 + ..._27a74d3926083a00c110aafea28420d7._comment | 7 + ..._17752e96baaf46f3048b14a9ec288e3b._comment | 8 + ..._2838c1d9da3202616e331bb31fd43f20._comment | 10 + doc/devblog/day_289__new_arm_autobuilder.mdwn | 21 + doc/devblog/day_28__lazy_saturday.mdwn | 17 + doc/devblog/day_290__.mdwn | 23 + doc/devblog/day_291__public_S3.mdwn | 20 + ..._c0e96b25b764180975cc26b1316f462d._comment | 11 + ..._d5223684c09725973b2052425fd30773._comment | 10 + doc/devblog/day_292__dead_keys.mdwn | 21 + ...293__last_push_before_summer_vacation.mdwn | 26 + .../day_294__back_focusing_on_bugs.mdwn | 7 + doc/devblog/day_295__caught_up.mdwn | 8 + doc/devblog/day_296__into_the_backlog.mdwn | 16 + .../day_297__optparse-applicative.mdwn | 25 + ...day_299__so_many_commands_and_options.mdwn | 9 + doc/devblog/day_29__scheduling.mdwn | 10 + doc/devblog/day_2__new_laptop.mdwn | 8 + ..._93447dbd4eb09b4db96770644ea663cb._comment | 10 + ..._e1d022b25f2c16dbe72db07ad4b10a2d._comment | 8 + .../day_300__optparse-applicative_landed.mdwn | 3 + ...day_301__completion_and_er_completion.mdwn | 9 + doc/devblog/day_302-305__gitlab.mdwn | 30 + doc/devblog/day_306__release_day.mdwn | 8 + doc/devblog/day_307__two_release_week.mdwn | 11 + doc/devblog/day_308__other_peoples_bugs.mdwn | 11 + doc/devblog/day_309__proxy.mdwn | 5 + doc/devblog/day_30__cronner.mdwn | 17 + ..._53dfd9310e92f5225db52a13e20a46d4._comment | 10 + ..._f98357c6f7a6da23873ac27c2e1e9638._comment | 10 + doc/devblog/day_310__half_day.mdwn | 7 + ..._81db682a271ebc92cce893762c3930a8._comment | 9 + doc/devblog/day_311__SHA-3.mdwn | 6 + doc/devblog/day_312__release_prep.mdwn | 12 + doc/devblog/day_313__optimisation.mdwn | 7 + doc/devblog/day_314__pre_trip_catchup.mdwn | 13 + doc/devblog/day_315__scrambling.mdwn | 5 + ...6-318__chasing_dependencies_and_todos.mdwn | 24 + doc/devblog/day_319__release_day.mdwn | 6 + doc/devblog/day_31__blah.mdwn | 17 + doc/devblog/day_320__caught_up.mdwn | 13 + doc/devblog/day_320__porting_and_such.mdwn | 13 + .../day_321__download_verification.mdwn | 13 + ..._424367fba4db56f4699952572bd3d605._comment | 7 + ..._926cc165e99f2e125c909bd706460a05._comment | 7 + ..._fb0ed50c27a493c3494bf2efbf9a9c5d._comment | 7 + ..._fecb2d6349aa61f1c76525178fea4598._comment | 7 + .../day_322-326__concurrent_drop_safety.mdwn | 49 + doc/devblog/day_327__soaking.mdwn | 16 + doc/devblog/day_328__git-annex_is_five.mdwn | 15 + ..._ff7e8d4c37f4a1aa189af0354db8794a._comment | 11 + ..._9e18a2c71884229f06b5ba62a6529a33._comment | 9 + doc/devblog/day_32__fsck_config_UI.mdwn | 20 + ...y_331__concurrent-output_preparations.mdwn | 11 + ...y_332__concurrent_output_at_long_last.mdwn | 6 + doc/devblog/day_333__cylons.mdwn | 5 + doc/devblog/day_334__too_easy.mdwn | 6 + ..._2181970ef1a3380407ce9eef311c9ebc._comment | 7 + ...335__catching_up_with_the_bug_reports.mdwn | 4 + doc/devblog/day_336__green.mdwn | 15 + doc/devblog/day_336__pid_locks.mdwn | 27 + doc/devblog/day_337__who_needs_POSIX.mdwn | 21 + doc/devblog/day_338__week_in_review.mdwn | 16 + .../day_339_smudging_out_direct_mode.mdwn | 61 + ..._6435db0003d2d8414b1a040b8899c7b8._comment | 11 + ..._79d19b2b057c2a0b23875a32dae0c2ba._comment | 13 + ..._43f7c7c6c2fd227466857c3232e13351._comment | 7 + ..._78e16167ca29eb3ed43706b39bf08603._comment | 8 + ..._35d0472cd64335eedeeb17d51cdbaf5b._comment | 13 + ..._499f3553c4efc35e54f121a7d4abc029._comment | 30 + ..._ede48107675edfe40d5fdd3377553aa4._comment | 12 + ..._ceb1d2a0e5bbc73590b80ff69292102d._comment | 15 + doc/devblog/day_33__fsck_on_connect.mdwn | 9 + doc/devblog/day_340__post_turkey_catchup.mdwn | 9 + doc/devblog/day_341__starting_smudge.mdwn | 24 + doc/devblog/day_342__continuing_smudge.mdwn | 30 + .../day_343__get_and_drop_for_smudge.mdwn | 26 + doc/devblog/day_344-345__smudging_along.mdwn | 7 + .../day_346-347__nearly_ready_to_merge.mdwn | 19 + doc/devblog/day_348__v6_assistant.mdwn | 8 + .../day_349__v6_database_optimisation.mdwn | 7 + doc/devblog/day_34__wrapping_up_fsck.mdwn | 7 + .../day_350-351__it_landed_on_xmas_eve.mdwn | 9 + doc/devblog/day_352__had_to_be_done.mdwn | 3 + ...53__one_step_forward_and_N_steps_back.mdwn | 5 + ...ay_354-355__beating_on_the_test_suite.mdwn | 8 + doc/devblog/day_356__benchmarking.mdwn | 11 + .../day_357__post_release_catchup.mdwn | 8 + ..._6963d1c6be69e531726f62f02d50855c._comment | 7 + doc/devblog/day_358__bugfix_release.mdwn | 9 + ..._a9aa122010e576c572ca719638ecf2e6._comment | 7 + ...y_359__annex.largefiles_gitattributes.mdwn | 18 + ..._ac73ad4147629c25cd51d13cfea206cf._comment | 9 + ..._cfbf4fb5a3a1beb582faa051d1627a31._comment | 13 + .../day_35__anacron_and_bugfixing.mdwn | 15 + .../day_360__annex.largefiles_mimetype.mdwn | 8 + ..._78a22b96a82f76ab7217d37918a19024._comment | 9 + ..._3145e5843e20a037351e5a14fa3d6e9a._comment | 17 + ..._bf44404de52b00ff4e4f1effd4cef336._comment | 8 + ..._70c337d91f8d0458927c111763041118._comment | 13 + .../day_360__results_of_2015_user_survey.mdwn | 56 + ..._5f30c583cd20c33e2bcd386f674d6f3b._comment | 9 + ..._68479af6dda2f732436b19160297aacd._comment | 7 + ..._e38568c6baa30f58c5a7735b2f7985ed._comment | 7 + ..._e0bfb67454df205f2c9c566933e7f121._comment | 9 + .../day_361__adjusted_branches_design.mdwn | 5 + doc/devblog/day_362__encoding_fun.mdwn | 19 + doc/devblog/day_363__snow_day.mdwn | 11 + doc/devblog/day_364__more_v6_unlocked.mdwn | 8 + .../day_365__some_kind_of_milestone.mdwn | 6 + .../day_366__starting_adjusted_branches.mdwn | 33 + ...7__adjusted_branches_proof_of_concept.mdwn | 18 + doc/devblog/day_368__leap.mdwn | 9 + .../day_369-370__paddling_furiously.mdwn | 72 + doc/devblog/day_36__bugfixing.mdwn | 1 + doc/devblog/day_371__catching_up.mdwn | 21 + .../day_372__adjusted_branches_improved.mdwn | 18 + doc/devblog/day_373__away.mdwn | 6 + doc/devblog/day_374__security_fix.mdwn | 4 + doc/devblog/day_375__back.mdwn | 10 + doc/devblog/day_376__in_the_weeds.mdwn | 18 + ..._377__will_adjusted_branches_ever_end.mdwn | 21 + ...78__finishing_adjusted_branches_merge.mdwn | 23 + ...y_379__bugs_race_conditions_and_taxes.mdwn | 12 + doc/devblog/day_37__long_day.mdwn | 6 + doc/devblog/day_380__post_release.mdwn | 8 + .../day_381__executable_unlocked_files.mdwn | 2 + .../day_382-384__pretty_well_caught_up.mdwn | 9 + doc/devblog/day_385__new_features.mdwn | 16 + ..._f76ff85897f24692e96f88236b7f4b7d._comment | 11 + doc/devblog/day_386__day_off.mdwn | 12 + doc/devblog/day_387__release_day.mdwn | 10 + ..._3e48e930616917f6db1fc351d0f7e6df._comment | 12 + ..._86262439c9056c0e06623cdf79eaf9a6._comment | 15 + .../day_388-389__various_and_windows.mdwn | 13 + .../day_38__starting_git_repo_repair.mdwn | 11 + ..._321468d9686db5dde072500bdaeb7d29._comment | 10 + doc/devblog/day_390__sharedpubkey.mdwn | 5 + ...__git_smudge_clean_interface_proposal.mdwn | 3 + doc/devblog/day_392__v6_fixes.mdwn | 12 + ..._6da0787fa9749ee2d1f91842f10a5d3c._comment | 7 + ..._15434848be1951e93a1e5b9fcbccedb0._comment | 12 + ..._74e696f147f80162a941a5a5435327ce._comment | 7 + doc/devblog/day_393__fun_and_more_fun.mdwn | 15 + .../day_394__implicit_vs_explicit.mdwn | 23 + doc/devblog/day_395__leaky_abstractions.mdwn | 7 + doc/devblog/day_396__misc_fixes.mdwn | 11 + doc/devblog/day_397__befuddled.mdwn | 28 + doc/devblog/day_398__fresh_eyes.mdwn | 11 + doc/devblog/day_399__weird_git_merge_bug.mdwn | 16 + .../day_39__git-recover-repository.mdwn | 54 + doc/devblog/day_3__gcrypt_uuids.mdwn | 63 + doc/devblog/day_400-401__git_development.mdwn | 11 + ..._402__enhanced_smudge_clean_interface.mdwn | 14 + doc/devblog/day_403__update_and_away.mdwn | 4 + doc/devblog/day_404__low_hanging_fruit.mdwn | 15 + .../day_405__more_git_development.mdwn | 3 + .../day_406__low_handing_fruit_continued.mdwn | 3 + doc/devblog/day_407__lazy_sunday.mdwn | 9 + doc/devblog/day_408__release_day.mdwn | 6 + .../comment_1_RichiH._comment | 3 + doc/devblog/day_409__--branch.mdwn | 17 + doc/devblog/day_40__another_fine_mess.mdwn | 15 + .../day_410__better_JSON_for_metadata.mdwn | 31 + doc/devblog/day_411__metadata_--batch.mdwn | 4 + ...day_412__if_at_first_you_dont_succeed.mdwn | 49 + ..._8980f56815a2c016ca950aec09e6e839._comment | 18 + ..._641ca9bce852cea42cac25fd77518885._comment | 7 + doc/devblog/day_413__back.mdwn | 19 + .../day_414__improved_parallel_get.mdwn | 6 + doc/devblog/day_415__catching_up.mdwn | 19 + doc/devblog/day_416__measure_twice.mdwn | 8 + doc/devblog/day_417__cut_once.mdwn | 6 + .../day_418__concurrent_externals.mdwn | 12 + ..._75e6569b143cf3f595ba9b356415a747._comment | 11 + ..._067909ed54f3f9295f90233f25ccfd70._comment | 8 + ..._39c729fc2ea4b597d13e54d60bb36d0d._comment | 7 + ..._6b254fbe92d40abc30d01afe5d039afc._comment | 8 + ..._5e851b62bdca1cb8d8062d4890c77956._comment | 7 + ..._ea5d42bcb03af937a604119039f9073a._comment | 7 + doc/devblog/day_419__catching_up.mdwn | 23 + doc/devblog/day_41__onward.mdwn | 17 + ..._a716c7b5a9ea3c949ff047cfb4e9a0a4._comment | 8 + ..._33149e424cd5f03fac376288bcc4dfdc._comment | 8 + ..._3b07503bd79089ad3ce3ddd7535ed116._comment | 14 + doc/devblog/day_420__delayed_debugging.mdwn | 17 + doc/devblog/day_421__lost_in_the_trees.mdwn | 6 + .../day_422__bugfixes_for_v6_mode.mdwn | 16 + doc/devblog/day_423__ssh_fun.mdwn | 19 + doc/devblog/day_424__the_dog.mdwn | 11 + doc/devblog/day_425__tor.mdwn | 23 + ..._1dd41fa32eb3867d764f3238005b5b81._comment | 11 + doc/devblog/day_426__grab_bag.mdwn | 63 + ..._4d01c756850032d351fa99188a3301a7._comment | 11 + doc/devblog/day_427__free_p2p.mdwn | 51 + ..._428-429__git_push_to_hiddden_service.mdwn | 31 + doc/devblog/day_42__repair_milestone.mdwn | 35 + doc/devblog/day_430__tor_socket_problem.mdwn | 13 + doc/devblog/day_431__p2p_linking.mdwn | 27 + ..._1d5f809564c25e765f82594af8e174ab._comment | 49 + doc/devblog/day_432-433__almost_there.mdwn | 13 + doc/devblog/day_434__it_works.mdwn | 27 + doc/devblog/day_435-436_post_tor_merge.mdwn | 20 + doc/devblog/day_437__catching_up.mdwn | 20 + .../day_438__bi-directional_p2p_links.mdwn | 6 + doc/devblog/day_439__wormhole_pairing.mdwn | 51 + doc/devblog/day_43__bugfix_day.mdwn | 26 + doc/devblog/day_440__holidaze.mdwn | 11 + .../day_441__webapp_wormhole_pairing.mdwn | 18 + doc/devblog/day_442__xmpp_removal.mdwn | 15 + ..._22ff11b84f855ab5e6de6dcf2553a050._comment | 35 + ..._eaf64ce3daae790bb27d21887886d73b._comment | 18 + .../day_443__yes_it_has_been_a_while.mdwn | 30 + .../day_444__memory_leak_with_a_cold.mdwn | 21 + doc/devblog/day_445__configs.mdwn | 11 + doc/devblog/day_446__quiet_progress.mdwn | 14 + doc/devblog/day_447__bug_class.mdwn | 48 + .../day_448__git_push_to_update_remote.mdwn | 24 + doc/devblog/day_449__SHA1_break_day.mdwn | 21 + ..._44__automatic_removable_drive_repair.mdwn | 16 + ...ay_450__hardening_against_SHA_attacks.mdwn | 13 + .../day_451__annex.securehashesonly.mdwn | 16 + doc/devblog/day_452__GIT_SSH.mdwn | 17 + doc/devblog/day_453_release_prep.mdwn | 13 + doc/devblog/day_454__multicast.mdwn | 15 + ..._137ea34cd11004513a03f24955719756._comment | 38 + ..._09908606fc362cbee516999cd696f718._comment | 19 + doc/devblog/day_455__semi-synchronized.mdwn | 9 + doc/devblog/day_456__digging_in.mdwn | 16 + ..._457__improved_ssh_password_prompting.mdwn | 17 + doc/devblog/day_458__adeiu_MissingH.mdwn | 18 + doc/devblog/day_459__git_bug.mdwn | 29 + doc/devblog/day_45__command_line.mdwn | 9 + doc/devblog/day_460__move_--to_here.mdwn | 3 + doc/devblog/day_461__shell_completions.mdwn | 8 + ...he_feature_youve_all_been_waiting_for.mdwn | 12 + ..._6b13defcdf76691049b9bcd7ec675da6._comment | 9 + ...__back_buggy_external_special_remotes.mdwn | 30 + doc/devblog/day_466__export_prototype.mdwn | 6 + doc/devblog/day_467__export_progress.mdwn | 11 + doc/devblog/day_467__firming_up_export.mdwn | 27 + ..._382fac60766340481acbcb8c05b70f42._comment | 8 + doc/devblog/day_468__export_renames.mdwn | 23 + ..._4c37e6f9ac1e1571495b0d355c8af9ff._comment | 11 + ..._7fbbc5beb80acf32eff617ec704d5466._comment | 26 + doc/devblog/day_469__export_merged.mdwn | 8 + .../day_46__wrapping_up_the_month.mdwn | 18 + .../day_470__export_to_external_and_S3.mdwn | 12 + .../day_471__export_to_more_remotes.mdwn | 13 + .../day_472__removing_empty_directories.mdwn | 20 + .../day_473__distributed_use_of_exports.mdwn | 17 + doc/devblog/day_474__tracking_exports.mdwn | 26 + doc/devblog/day_475__assistant_exports.mdwn | 4 + doc/devblog/day_476__third_time_lucky.mdwn | 29 + doc/devblog/day_477__windows_build_fixed.mdwn | 10 + .../day_478__windows_the_blackhole.mdwn | 14 + .../day_47__fell_off_the_blogging_wagon.mdwn | 3 + .../day_482__website_login_problem.mdwn | 31 + ...3__faster_start_with_removable_drives.mdwn | 27 + ...4__special_remote_protocol_extensions.mdwn | 12 + doc/devblog/day_485__slow_and_steady.mdwn | 9 + doc/devblog/day_486__time_to_ditch_rsync.mdwn | 14 + .../day_487__git-annex-shell_p2pstdio.mdwn | 38 + ...ay_488__groundwork_for_using_p2pstdio.mdwn | 30 + doc/devblog/day_489__zooming.mdwn | 31 + ..._d840f371f1d22b0ee8f3c8df25ebe3d3._comment | 12 + ..._ec579c84aeb244798a818a20ff0f50b5._comment | 11 + .../day_48__direct_mode_guard_design.mdwn | 29 + ..._ec0147ccc55bad3a38652383f4098a65._comment | 8 + doc/devblog/day_490__kind_of_annoying.mdwn | 28 + doc/devblog/day_491__annex.verify_redux.mdwn | 19 + doc/devblog/day_492__concurrency_is_hard.mdwn | 12 + .../day_493__two_new_special_remotes.mdwn | 18 + .../day_494__url_download_changes.mdwn | 25 + .../day_495__move_numcopies_safety.mdwn | 20 + ..._496__move_numcopies_safety_revisited.mdwn | 12 + .../day_497__rethinking_the_android_port.mdwn | 24 + ..._cb30ab18753e5f221ed4d92b3ff8a32e._comment | 13 + .../day_498__unexpected_release_prep.mdwn | 21 + doc/devblog/day_499__security_hole.mdwn | 27 + ..._49__direct_mode_guard_implementation.mdwn | 14 + ..._3ebe5c3f708070f164ecaf36b79f7bfc._comment | 8 + .../day_4__unexpected_windows_day.mdwn | 10 + .../day_500__security_hole_part_2.mdwn | 26 + .../day_501__security_hole_part_3.mdwn | 13 + .../day_502__security_hole_part_4.mdwn | 24 + .../day_503__security_hole_part_5.mdwn | 19 + .../day_504__security_hole_part_6.mdwn | 12 + .../day_505__security_fix_release.mdwn | 15 + doc/devblog/day_506__summer_features.mdwn | 38 + doc/devblog/day_507__v6_revisited.mdwn | 23 + doc/devblog/day_508__git-protocol.mdwn | 20 + doc/devblog/day_509__filterdriver.mdwn | 16 + doc/devblog/day_50__grab_bag.mdwn | 34 + ..._01846f6494fe843889391fd09fd127a0._comment | 8 + ..._12736014aa2c1af81e4b83072505e7d5._comment | 8 + doc/devblog/day_510__v6_get_drop_index.mdwn | 14 + ..._0e2eff8c8c3aaef3499b8f94b2733148._comment | 16 + .../day_511__v6_improved_index_update.mdwn | 13 + doc/devblog/day_512__fixed_race.mdwn | 5 + ...ay_513__v6_reconciling_staged_changes.mdwn | 21 + doc/devblog/day_514__fixed_5_races_in_v6.mdwn | 9 + doc/devblog/day_514__v6_bug_review.mdwn | 25 + ...ay_515__S3_exporttree_with_versioning.mdwn | 10 + ..._exporttree_with_versioning_continued.mdwn | 19 + .../day_517__return_to_crowdfunding.mdwn | 9 + ..._518__S3_versioning_finishing_touches.mdwn | 39 + ..._aed297f65b6e555f338fc622a8678c0f._comment | 121 + ..._a981371786ba702ac616cd55b296bc1c._comment | 39 + ..._08de1605f1aa8b042ba3c4b710939989._comment | 8 + doc/devblog/day_519__release_prep.mdwn | 10 + .../day_51__direct_mode_guard_finished.mdwn | 6 + .../day_520__storm_before_the_calm.mdwn | 10 + .../day_521__newlines_in_filenames.mdwn | 21 + doc/devblog/day_522__multi.mdwn | 7 + doc/devblog/day_523__backlog.mdwn | 13 + doc/devblog/day_524__new_phone.mdwn | 17 + doc/devblog/day_52__slowly_but_surely.mdwn | 5 + doc/devblog/day_545__termux_improvements.mdwn | 13 + ...46__deleted_40_thousand_lines_of_code.mdwn | 14 + doc/devblog/day_547__v6_almost_complete.mdwn | 12 + .../day_548__hiding_missing_files.mdwn | 18 + .../day_549__operating_on_hidden_files.mdwn | 52 + ..._29ded4a0926cca6f2485efc07c039b62._comment | 9 + .../day_54__android_bisection_minions.mdwn | 9 + ..._bea8fbe2b87d4a4865b92fa796298fa0._comment | 8 + doc/devblog/day_550__a_plan_to_finish_v6.mdwn | 12 + ..._4a839c274832e43664d665e90b93146c._comment | 13 + ..._bae3f3303d61126a337f2dac71681e1d._comment | 16 + doc/devblog/day_551__v6_or_v7.mdwn | 19 + ..._a46bd8dcc560a681405f82f13fc2e87e._comment | 8 + ..._555009f3455129946b0238bc7e3bc52e._comment | 8 + ..._0fa5ed098fa850fee538034f4787f35e._comment | 8 + doc/devblog/day_552_523__v7_release_prep.mdwn | 34 + ..._31c6692172dbc1217d0a7ab90c074823._comment | 12 + .../day_554__git-annex_user_survey_draft.mdwn | 7 + .../day_555__git_annex_user_survey_live.mdwn | 7 + doc/devblog/day_556__snow_day.mdwn | 6 + doc/devblog/day_557__upgrade_bugfixes.mdwn | 10 + doc/devblog/day_558__new_horizons.mdwn | 15 + doc/devblog/day_559__surprising_win.mdwn | 9 + doc/devblog/day_55__fireside_porting.mdwn | 22 + ..._d690a52db82f9594d99ae65fe51e1f1a._comment | 8 + doc/devblog/day_560__into_the_weeds.mdwn | 14 + doc/devblog/day_561__better_benchmarking.mdwn | 17 + doc/devblog/day_562__on_to_metadata.mdwn | 14 + doc/devblog/day_563-564__log_conversion.mdwn | 15 + doc/devblog/day_565__bytestring_Key.mdwn | 15 + doc/devblog/day_566__stopping_place.mdwn | 26 + .../day_567__neither_rain_nor_snow.mdwn | 16 + doc/devblog/day_568__release_day.mdwn | 11 + ...day_569__another_week_another_release.mdwn | 11 + .../day_56__git-annex_user_survey.mdwn | 20 + doc/devblog/day_570__brrr.mdwn | 20 + doc/devblog/day_571__survey_results.mdwn | 173 + .../day_572__thinking_please_wait.mdwn | 17 + ...__starting_import_tree_implementation.mdwn | 12 + doc/devblog/day_574__weeds.mdwn | 19 + .../day_575__core_of_import_tree_done.mdwn | 9 + doc/devblog/day_576__import_export.mdwn | 39 + doc/devblog/day_576__import_tree_details.mdwn | 11 + doc/devblog/day_576__import_tree_working.mdwn | 23 + ..._2ffd447e05466b806d36b761b4143e56._comment | 8 + ...how_am_I_still_working_on_import_tree.mdwn | 7 + doc/devblog/day_578__import_tree_merged.mdwn | 28 + doc/devblog/day_579__bug_triage.mdwn | 3 + doc/devblog/day_57__mavericks.mdwn | 14 + doc/devblog/day_580__import_from_android.mdwn | 11 + .../day_581__starting_import_from_S3.mdwn | 27 + .../day_582__versioned_S3_import_working.mdwn | 9 + ...3__S3_import_and_export_fully_working.mdwn | 17 + .../day_584__matching_S3_histories.mdwn | 16 + .../day_585__not_matching_S3_histories.mdwn | 16 + .../day_586__wrapping_up_S3_import.mdwn | 18 + .../s3history.png | Bin 0 -> 16015 bytes .../s3rename.png | Bin 0 -> 10321 bytes .../day_587__import_preferred_content.mdwn | 20 + .../day_588__export_preferred_content.mdwn | 8 + ...ng_up_import_export_preferred_content.mdwn | 7 + doc/devblog/day_58__urgle.mdwn | 16 + ..._bd279f58f614b103a53215dfb0211007._comment | 12 + ..._590__toward_importing_from_externals.mdwn | 11 + .../day_591__superscalar_pipelining.mdwn | 17 + .../day_592__refactoring_start_messages.mdwn | 4 + doc/devblog/day_593__partial_success.mdwn | 12 + ...ally_background_checksum_verification.mdwn | 14 + ..._334c36d503abd06611a46cc102139446._comment | 8 + .../day_595__cleaner_worker_pool_stages.mdwn | 23 + .../day_596__back_from_summer_vacation.mdwn | 17 + doc/devblog/day_597__git-lfs_support.mdwn | 16 + .../day_598__Windows_and_test_suite.mdwn | 21 + .../day_599__dropping_direct_mode.mdwn | 11 + doc/devblog/day_59__release_day.mdwn | 11 + .../day_5__gcrypt_special_remote_part_1.mdwn | 7 + doc/devblog/day_600__close_to_v7_default.mdwn | 5 + doc/devblog/day_601__v7_default.mdwn | 17 + ..._54af3bf0a521597d49bd8f8ef0ab5555._comment | 17 + ..._c2daec80c7834ebb62324d7169c6c158._comment | 16 + doc/devblog/day_602__sameas.mdwn | 9 + doc/devblog/day_603__sameas_working.mdwn | 4 + doc/devblog/day_604__unscheduled_release.mdwn | 5 + .../day_605__well_Im_done_for_now.mdwn | 2 + ..._7366f7108495129680301d9b93bb8fb6._comment | 8 + ..._cd42103ea06ede8352176e66fc5434c5._comment | 8 + ..._774f264c555965461d621587cbdf8a1e._comment | 9 + doc/devblog/day_606__on_recent_events.mdwn | 5 + doc/devblog/day_607__v8_is_done.mdwn | 40 + ..._7326382d8ff23873c2fe0d6acd984454._comment | 10 + ..._802311f91808a13473aa99578a429497._comment | 12 + ..._7d3cad862be54dc5a39059f8b82834a6._comment | 8 + .../day_608__easier_git-lfs_setup.mdwn | 25 + ..._b72bea21d4445d12cade9f54ecc3767d._comment | 18 + doc/devblog/day_609__optimisation.mdwn | 11 + .../day_60__damage_driven_development.mdwn | 36 + ...1__ByteString_optimisation_early_days.mdwn | 12 + ..._1601268fd4dba4df9cc3dc84932914a6._comment | 12 + ..._21872150f9b2ff9cc08f94d52dbdf3a6._comment | 10 + doc/devblog/day_612__building_again.mdwn | 11 + ..._613__end-to-end_ByteString_milestone.mdwn | 17 + .../day_614__bytestring_wrapping_up.mdwn | 15 + doc/devblog/day_615__new_year.mdwn | 21 + .../day_616__remote_config_parsing.mdwn | 9 + ..._617__remote_config_parsing_continued.mdwn | 20 + ..._d3ab2e85ea775cc6f39f12210374c35f._comment | 8 + doc/devblog/day_618__v8_merged.mdwn | 5 + ...__important_bugfix_release_and_v8_too.mdwn | 14 + ...day_61__damage_driven_development__II.mdwn | 15 + doc/devblog/day_620__emergency_mode.mdwn | 20 + doc/devblog/day_621__back_to_normal-ish.mdwn | 14 + doc/devblog/day_622__behavior_changes.mdwn | 28 + doc/devblog/day_623__started_timeouts.mdwn | 17 + doc/devblog/day_624__timeouts_snag.mdwn | 13 + .../day_625__import_tree_largefiles.mdwn | 13 + doc/devblog/day_626__performance_week.mdwn | 18 + ...ay_627__last_performance_work_for_now.mdwn | 16 + .../day_628__external_key_backends.mdwn | 10 + ..._e6ff184245dd1a6cffff2ecdaeff6a66._comment | 11 + ...y_629__async_external_special_remotes.mdwn | 25 + doc/devblog/day_62__upgrade_alerts.mdwn | 22 + ..._cdb44aaa1d2a784a72613cbf16038f89._comment | 8 + ..._b08bb946e4760d7f03b45c852c745b2e._comment | 8 + .../day_630__dealing_with_git_changes.mdwn | 42 + .../day_630__introspection_for_speed.mdwn | 11 + doc/devblog/day_631-632__memory_leak.mdwn | 16 + doc/devblog/day_633__ten_years.mdwn | 12 + ..._4842e53398d9ee668053ec6d4da426dd._comment | 9 + ..._48b09fc7e66cd9d9fb7c0f78f21c7ac5._comment | 8 + doc/devblog/day_634__new_features.mdwn | 59 + doc/devblog/day_635__stall_detection.mdwn | 19 + doc/devblog/day_636__stall_stall.mdwn | 11 + doc/devblog/day_637__thirdparty_of_borg.mdwn | 17 + .../day_638__borg_special_remote_working.mdwn | 26 + ...ay_639__major_keys_database_milestone.mdwn | 15 + doc/devblog/day_63__leverage.mdwn | 24 + ...ay_640__finally_dealt_with_clock_skew.mdwn | 20 + ...day_641__an_alternative_smudge_filter.mdwn | 26 + ..._ab7bbff67f34e217df5f0e75dedb7f2c._comment | 8 + ..._9bc08810306ceb39ed1f017e9f1d81e3._comment | 10 + ..._b9ffc711b4531b6f2b4af4efd1e9d9d6._comment | 12 + ..._b2a0a8f646197ce1826bc2e6859139b1._comment | 11 + ..._6a5932706a9fee097c3fdf2cd6808f1d._comment | 20 + ..._ad1d78a28887af24d77b2b9e3739b68a._comment | 11 + ..._3107429d7250a71584ea7947609207ec._comment | 12 + ..._45f97189936e7f477850aef9ef745538._comment | 8 + ..._3129a6da37ba7a1f8ee11441b7ed4d07._comment | 8 + doc/devblog/day_642__cost_model.mdwn | 28 + ..._36ecaafc1d7f6460758d6824a357432c._comment | 33 + ..._5bb7a20dd3141423ce4109d8fd4098c4._comment | 14 + .../day_643__adjusted_view_branches.mdwn | 38 + ..._5f2dfde34d4ef5048920f3fcabddbd56._comment | 17 + ..._51e285666d42e08edbaf22699782392e._comment | 8 + ...ay_644-648__terminal_escape_sequences.mdwn | 46 + ...649-650__speeding_up_repeated_imports.mdwn | 30 + doc/devblog/day_64__overkill.mdwn | 31 + ..._e1db7678aae37af281d31ae211677786._comment | 10 + ..._f7a96f0b6d942d0b59d9d0ec1b21c4bf._comment | 8 + ...51__a_major_release__and_a_conference.mdwn | 17 + doc/devblog/day_65__wrapping_up_upgrades.mdwn | 5 + doc/devblog/day_66__upgrade_testing.mdwn | 17 + doc/devblog/day_67_thanksgiving_rush.mdwn | 19 + doc/devblog/day_68__bits_and_pieces.mdwn | 14 + doc/devblog/day_69__catching_up.mdwn | 14 + doc/devblog/day_6__gcrypt_fully_working.mdwn | 8 + ..._136bb7537a9ba93d400ce6f6ea1932ac._comment | 8 + ..._1f8faa65bbd56a12588b43a5bc822d96._comment | 10 + ..._70__preliminary_user_survey_analysis.mdwn | 104 + doc/devblog/day_71__that_was_unexpected.mdwn | 30 + doc/devblog/day_72__windows_webapp_not.mdwn | 22 + doc/devblog/day_73__EvilLinker.mdwn | 28 + doc/devblog/day_74__so_close.mdwn | 20 + ..._b1aa185734c3d74830b81def4fe63bff._comment | 10 + doc/devblog/day_75__hallelujah.mdwn | 8 + ..._df04c456e99d47743494a18c1badba8c._comment | 8 + doc/devblog/day_76__results.mdwn | 15 + doc/devblog/day_77__it_builds.mdwn | 8 + doc/devblog/day_78__desidetracked.mdwn | 34 + doc/devblog/day_79__catch_up.mdwn | 3 + doc/devblog/day_7__release_day.mdwn | 10 + ..._12bb94d903868ecddb3e348c9c4afeaf._comment | 8 + ..._d3e38d6f6bba179dab40d4d75ff061de._comment | 8 + doc/devblog/day_80__plumbing.mdwn | 9 + doc/devblog/day_81__more_standalone.mdwn | 15 + ..._25ceb116406b55a8ff28f7b392806bc9._comment | 10 + doc/devblog/day_82__rpi_and_synology.mdwn | 21 + ..._d154ddcf22027fd06acf9da73e12c006._comment | 8 + doc/devblog/day_83__armel_webapp.mdwn | 19 + doc/devblog/day_84__ho_uh_oh.mdwn | 11 + ...xternal_special_remote_protocol_types.mdwn | 25 + ...xternal_special_remote_implementation.mdwn | 11 + ..._5116bcf4b60030cb46683df94a75d7ee._comment | 8 + ..._7b6e734f785fbd9db7883b63150023dc._comment | 8 + ...day_87__external_special_remotes_done.mdwn | 16 + doc/devblog/day_88__lazy_sunday.mdwn | 15 + doc/devblog/day_89__reflections.mdwn | 18 + doc/devblog/day_8__ill.mdwn | 20 + doc/devblog/day_90__slow_start.mdwn | 23 + doc/devblog/day_91__wintry_mix.mdwn | 11 + doc/devblog/day_92-93__reconnection.mdwn | 34 + doc/devblog/day_94__leaks.mdwn | 12 + .../day_95__reconnection_revisited.mdwn | 13 + ..._c1106e573fcf9f3d4524c0e4f4254790._comment | 8 + ..._40478739f95e0b56ce0103db6e405ef4._comment | 10 + doc/devblog/day_96__catching_up.mdwn | 7 + ...ay_97__exciting_telehash_possiblities.mdwn | 20 + ..._7c775d93cbeed0d553e224751d30fbaa._comment | 10 + doc/devblog/day_98__old_bug.mdwn | 17 + doc/devblog/day_99__catching_up_again.mdwn | 19 + ..._b871bf0606dc29be9b8c2e5dc150f708._comment | 10 + ..._c8363d47223e7bb899420e800bde3e27._comment | 8 + doc/devblog/day_9__Friday_the_13th.mdwn | 21 + ..._07195b4ec399ba1be6c8bdb3ae0fa50b._comment | 12 + doc/devblog/day__126-127__merge_fixes.mdwn | 61 + doc/devblog/day__228_new_AWS.mdwn | 13 + doc/devblog/day__329-330__a_rising_tide.mdwn | 15 + doc/devblog/moving_blogs.mdwn | 5 + ..._6caa7e67461a6ea5de8155ae9cf75fab._comment | 8 + ..._e3e2048fc2397b87a2f29c9fe49394cb._comment | 10 + doc/devblog/whither_XMPP.mdwn | 30 + doc/devblog/youtube-dl.mdwn | 30 + ..._ff062ea66ea50d2f31a92c25017bb135._comment | 10 + doc/devblog/youtube-dl_day_2.mdwn | 13 + doc/devblog/youtube-dl_day_3.mdwn | 7 + ..._bcf6ccc65f191c446ae4ea70c4e86c87._comment | 27 + ..._423d1896981b9d5de85c89fdcde2d1ab._comment | 18 + ..._c3735d169bfe81eaba5557197b1c0eb0._comment | 9 + ..._d19a698b28a5d6b583c527b9a909370d._comment | 12 + doc/direct_mode.mdwn | 14 + ..._1c79c93f4b17cfc354ab920e3775cc60._comment | 26 + ..._1b5218fdb6ee362d6df68ff1229590d4._comment | 10 + ..._7d507b6f87085a19d8dd5014f580922b._comment | 24 + ..._5169c5541970d3b3bc1e080e07539b22._comment | 8 + ..._55108ac736ea450df89332ba5de4a208._comment | 12 + ..._03a02e689d92faa596de98e02b2ffe28._comment | 10 + ..._ff4ffc2aabc5fd174d7386ef13860f78._comment | 10 + ..._1cd32456630b25d5aaa6d2763e6eb384._comment | 8 + ..._599b2285d24ae1244a1945d572b2c397._comment | 8 + ..._7f6805e090d0acd8a077b65214da5837._comment | 7 + ..._e7c066fba8e28c61e8517c7a18a02457._comment | 7 + ..._e46f70efa6d8d65d5ef81cdcbd844869._comment | 13 + ..._f4f23d9be76fa3c201b6c67efab0d69c._comment | 8 + ..._4d0077d7881df05dcbeb460bf7734b6b._comment | 11 + ..._8020d74bddf0e38b0a297e5dae7c217b._comment | 12 + ..._97c26bd82f623a3b2d56bab4afff0126._comment | 12 + ..._42363bf0367f935b3eee8ad3d2eaf5cf._comment | 10 + ..._5f03b1686c1fb3f7606a5bc724ac3812._comment | 8 + ..._5355ac418bfb26e990762b80f4c36b77._comment | 12 + ..._6cd15e2c5fd0bef48f60c6993322c2fc._comment | 9 + doc/distributed_version_control.mdwn | 21 + doc/download.mdwn | 30 + ..._ec2578241a966cfcdd43f2a26a5c8709._comment | 13 + ..._ee0d158ac59903737dbc4ef632f11fe3._comment | 7 + ..._b59fc32a18a9fda8da120da82fade0a6._comment | 9 + ..._bf102d87552f97ac293dd20f6822b84f._comment | 11 + doc/encryption.mdwn | 157 + ..._6416ee43ffad1c306ef71247ae71a6c5._comment | 17 + ..._30b926fbabe9a0089de1f55f6f9a5d2d._comment | 15 + ..._51fd19bf174906b1dd1461efd6ce3798._comment | 9 + ..._44c6a401526a6ee22d5f0316336d453b._comment | 10 + ..._5832365e198284c93d4a505856932841._comment | 9 + ..._fb6ec1f42789a62358605e293b678318._comment | 8 + ..._5dc76b832ae6b1bb7f458bf8e2650e8e._comment | 12 + ..._a2195a298f65e427fe8460c8bc380f99._comment | 8 + ..._4257e3c4ae559f1c0595a903f738fd7e._comment | 28 + ..._5c2da865082de475254ebfd53feb2d0a._comment | 13 + ..._46e64e4856975706e06e2a012a5d8f67._comment | 8 + ..._fe8b181adef9a39a039ff96a0d587188._comment | 11 + ..._5c9897663aaa83ca39a7e8cb292a3fd1._comment | 10 + ..._1756ce62906586f876a3491e5d9befde._comment | 13 + ..._3849eb24c3682644e263bae107747dee._comment | 20 + ..._66e81e89fd483ca95620522b0f63c4fd._comment | 11 + ..._5ca10891d642392aaff342c1478b0550._comment | 10 + doc/favicon.ico | Bin 0 -> 2550 bytes doc/footer/column_a.mdwn | 7 + doc/footer/column_b.mdwn | 7 + doc/forum.mdwn | 9 + .../--verbose_not_really_verbose__63__.mdwn | 7 + ..._9a7927c22a50addafc58028f34c48578._comment | 8 + ..._0c846317803019058f6b522bc9abd5a6._comment | 28 + ..._a360190fee9a9514f0ba201baeaecd7a._comment | 17 + ..._e4d75464af5ced1ce1f9539ddf8755f4._comment | 15 + ...d_server_for_syncing_-_possible__63__.mdwn | 3 + ..._924521ad5972046bac44d2e04ec296c7._comment | 10 + ..._e2a7f34a3ccc1b6467e6da611c067d66._comment | 8 + ..._f9a369a6ac69f091e6128990274d3228._comment | 10 + ..._91b422f8d55b68077245c606c4f7f87c._comment | 28 + ..._f6128fe75ff3453747f69f12e0fd0a5b._comment | 12 + ..._9b90b4031a5ed26c375903b33ed65a10._comment | 17 + ..._acd64ce1b08a97ddf730622272e9f611._comment | 14 + ..._9baacb14fc5eb449cb13e0b4a4995fb0._comment | 8 + ...c_on_new_remote___40__USB_drive__41__.mdwn | 92 + ..._01a6020d25826a3e0afb087899f6919c._comment | 14 + doc/forum/ARM_build_on_Zyxel_NAS.mdwn | 15 + ..._38f38755c0afd76a2b968836fec395e8._comment | 11 + ..._44c8f1af0cbe9ad51794e6d8d16be627._comment | 9 + ..._b4f6e5ac672e8ece36cceb74ff3315dd._comment | 8 + doc/forum/A_git-annex_helper.mdwn | 6 + ...lp_with_headless_server_configuration.mdwn | 2 + ..._d32e28e8dcacf89eb357b78aefded274._comment | 22 + ...s_to_delete__44___files_to_keep__63__.mdwn | 12 + ..._fe291cd6cd8e2d5b8e23f8e3689d824b._comment | 15 + ..._f0dbc3c723999bf0f22502e3a89d1d4a._comment | 8 + doc/forum/A_really_stupid_question.mdwn | 3 + ..._40e02556de0b00b94f245a0196b5a89f._comment | 31 + doc/forum/A_tiny_filesystem__63__.mdwn | 7 + ..._993e3f5dbe4bcbb5b7bd9e08ab9554f3._comment | 8 + ..._af57591d42868c8aa1cc1eda43ca8b98._comment | 8 + ..._3869c0472b50d7cf5e29ac0720f4f20f._comment | 10 + ...ssing_files_directly_on__a_USB_device.mdwn | 11 + ...n_SSH_remotes_while_SSHed_into_remote.mdwn | 1 + ..._b2f7b4aa5e7c859de9741db440292365._comment | 10 + ..._6450ee0b5729beec155fbe0ce304e223._comment | 9 + ..._9d8d03bda09596d03d9cfb7138a152f0._comment | 9 + ..._650ebbe4e7b57361a42882f3092122f0._comment | 15 + .../Accessing_files_in_bare_repository.mdwn | 5 + ..._7eb66e3806f9524e043fae2da9d57d64._comment | 10 + ..._f0165d66865ad14f7eb5d50e900c1df4._comment | 10 + ..._0e7ea5161b6da6e9bb9425bdb953de33._comment | 8 + ..._f804b9bf71f7d04bd23ce32d813dc340._comment | 8 + ..._6de649d38febd2240eb5b703da77c2d6._comment | 15 + ..._7e8dd09915ddc3267377e900891cb02c._comment | 24 + ..._80eae4a73f38d1a7e35f97c33b6401f8._comment | 8 + ..._5ec13e98d3ecb69426e974d34f712f9b._comment | 8 + ..._dccbf5793998c6381e23eb8ff6497ebf._comment | 17 + ..._42d923916232c81f3b8bdbefa34a89d3._comment | 18 + ..._43a0a7d222faee582aeb3150a59cef87._comment | 8 + ..._ec1024235c1c74c113483a833df84654._comment | 12 + ..._c156b8c1ae0f2905566bbdb13b84e577._comment | 37 + ...__and_crippled__41___annex_repository.mdwn | 28 + ...ect_mode_sync_should_avoid_git_commit.mdwn | 1 + ..._06dae5709750ea1da4f7fdbee4e84efc._comment | 16 + ..._2069c5c41882ae0a1973fb7da583b60e._comment | 10 + ..._b35e3a87c30974eedd71ebe52ecbed96._comment | 8 + ..._84e026f9bda87bfd12a3769dcef77f8b._comment | 8 + ..._b2ac2ea300a5026832b40a1a6b27a7cd._comment | 8 + ..._ed3534196164c6736a8dbf21c65c119d._comment | 10 + ..._1e29bcf568f02765c48f0eac6c640673._comment | 45 + ..._9ea6803a94b1de15079a3fa20d59c9af._comment | 10 + ..._3fae5a7fa5d99d0eb4473adb43e7f6f5._comment | 8 + ..._57a5b73cff480266355e75c7bdc762c2._comment | 8 + ..._bbcf5e863c8f152e1079536e9011a404._comment | 16 + ..._fdcd144c22601bdf98ff844254b0120d._comment | 8 + ..._b77243e765b2af7ba71e963fcb5cbbb1._comment | 71 + ..._cb0815e96ee211d4778f2e7a4274e855._comment | 8 + doc/forum/Add_a___34__local__34___remote.mdwn | 13 + ..._c68ad724b465c4be5243be687168c0b3._comment | 12 + ...nnex_files_outside_git_root_directory.mdwn | 24 + ..._3d7c8917633a6632f22385b8f7a98ccf._comment | 18 + ..._312a57883d809857a69216fa47e04f17._comment | 15 + ...ile_to_git_index_while_in_direct_mode.mdwn | 20 + ..._3eb43a983eba09f500b776f75b299341._comment | 8 + ..._6945d9e930e7385f0abe6538622a9aa3._comment | 31 + ..._8f77b5dcf582e88099b2e6e77563fb11._comment | 10 + doc/forum/Add_files_to_direct_mode_repos.mdwn | 1 + ..._41d632853d3160899b04da7e4b95475e._comment | 11 + ...x_but_it_doesn__39__t_show_up_in_here.mdwn | 75 + ..._6757bfdc2876b5b763c338ad414e74dc._comment | 38 + .../Adding_a_URL_from_wayback_machine.mdwn | 64 + ..._bc78c24becbf758da7873cdf01e2adc5._comment | 9 + ..._6df0501b103a7cfcd1eaa4120f7fa818._comment | 26 + ..._aefbb393c11ab233d145311409d405c7._comment | 31 + doc/forum/Adding_a_mounted_network.mdwn | 1 + ..._9b4bab6177856569adfec26ada6b01cd._comment | 13 + ..._ae3d4ac918ef002ead859ed0c962ae32._comment | 14 + ..._559cfec9210f8c86de6ee13de0ec2175._comment | 7 + ...dding_existing_S3_bucket_to_sync_with.mdwn | 16 + ..._30b9a70d367dd5b8781e9a86e42d4c3e._comment | 10 + ..._a8525c1a7e5f89c30c9503fe8bfed02e._comment | 8 + ..._c3878989f74e740c0ed42f440750f3a4._comment | 8 + ..._c06cc86496f9d4c0c42a8c89aa5a7b35._comment | 8 + ..._0a1c2dd0929511ff824be8de2c8d85eb._comment | 9 + ..._1444c2f89885f028f20a4d3ce225a403._comment | 23 + ..._1c30944010d541096baff18198a5560d._comment | 23 + ...4__recording_state_in_git__34___phase.mdwn | 69 + ..._67d8488c421da24702fea4c37afe74c3._comment | 9 + ..._f9fb8b2ad05a17e8451d434c783fc7d7._comment | 8 + ..._71bbf490cfa2cbfab322aab865d93261._comment | 9 + ..._66dbcc3600c1df2df03896935dfce9c0._comment | 22 + ..._665bdcd79b486f8d2604eb6de5c10b2b._comment | 11 + ..._cf89b44d67752edabfbf577d1212e7ad._comment | 13 + ..._a4e2f0e65a9dc92fc4dd85183e8f8090._comment | 21 + ...g_files_with_wildcard_on_Mac_Yosemite.mdwn | 10 + ..._e0784676aab3388254cdc9e7dd2d97e7._comment | 11 + ..._d9a7d2669d1524cab71e7e3139631f2a._comment | 55 + ..._a0fdcd19954a38141b1dc2a51638ba30._comment | 24 + ..._bc36d8f7b1d4d475018a236f71d06bb5._comment | 8 + ..._a02c3cd804c2f6fd80d8839cc5c81af4._comment | 12 + ..._703ecd8e1dfc5b5b58655e27c9db838a._comment | 9 + ..._dbe40fef2ba65cc0f1c20f41f2daab4d._comment | 11 + ..._d8620ce7b3dbb81c0d3d0b09ded1deb0._comment | 18 + ..._6a43f52449c4a38a986772ec9d65f9d5._comment | 7 + ...0__non-annexed__41___files_in_Windows.mdwn | 31 + ..._e40e129fbdae305ad48f810c578fa69f._comment | 9 + ..._3f2556b0a0cd8b7523aed1bea1be8484._comment | 29 + ..._d50b99393009ba4adf2040f1d5d5078b._comment | 23 + ...34__remote_already_exists__34___error.mdwn | 5 + ..._fe2f0e7a4688865faf21c2c0467852b7._comment | 8 + ...ing_selected_big_binaries_recursively.mdwn | 12 + ..._6ff6031a5a44caf17f36c3569cca5512._comment | 23 + ..._872bef6902ddb362b62d5e9ec1afe864._comment | 26 + ..._4be5ca7a22db19a3152b54bee943f58c._comment | 19 + ..._83b62738f79c434f5a2cacc9316e5d2b._comment | 9 + ...me_content_under_different_file_names.mdwn | 17 + ..._7c659668f62577612eaf8f463383a185._comment | 16 + ..._217052fe47822f73ffc765afd6386a7e._comment | 21 + ..._58___git-annex_slows_down_my_macbook.mdwn | 21 + ..._af8ab0a47cd379fcb1445e50782ad086._comment | 12 + ..._a7202bcbdda36a3801833d2432db1965._comment | 25 + doc/forum/All_repos_on_same_filesystem.mdwn | 14 + ..._a6666a89f62dc7e2d40e028782e5a25a._comment | 14 + .../Alternative_modes_for_annex_repos.mdwn | 35 + ...ative_to_Tor_for_remote_pairing__63__.mdwn | 5 + ..._39417a8bd5e6834041d759ea3666d894._comment | 14 + .../Alternative_to_XMPP_on_Windows__63__.mdwn | 1 + ..._4084abf5b26fcc92e577eea34c331a15._comment | 8 + ...opy_which_is_as_fast_as_git_annex_get.mdwn | 15 + ..._7f62ed07749308a46f0028a9586a10a4._comment | 13 + ..._a0c58c65091f36b426e016c700ec2f1c._comment | 9 + ..._102047d2676af0bc62791fa0f18ac49f._comment | 25 + ..._717078ebeb3b69dd9c52c8abe457824a._comment | 16 + ..._0630abbcb27e1f9dc5e9269b09a99b09._comment | 13 + .../Always_sync_all_content_to_remote.mdwn | 5 + ..._241c19cad6249fbd0832c76028c8b373._comment | 11 + ..._3eda671cea0f8869f1aac0194cae7146._comment | 34 + ...___40__unknown_revision_or_path__41__.mdwn | 148 + doc/forum/Ambiguous_repo_names__63__.mdwn | 8 + ..._9695c42113ad6c873b1eae1c1f04e70a._comment | 13 + doc/forum/Android_-_ext3__47__4__47__....mdwn | 1 + doc/forum/Android__58___Cabal_hell.mdwn | 32 + ..._34e869c1092f2885f54f627fb77a6057._comment | 13 + ..._ed5b2b37d37278458fdf2dc37539e741._comment | 10 + ..._fe71aa84ed5e1bb1e19a7d0f4e42eccd._comment | 9 + ..._da004cee7c0cf5617291dbd520af2e96._comment | 10 + ..._12e2cb09ac2ee07b392cd9be064a3cbe._comment | 8 + ...Android__58___Encrypted_Remotes__63__.mdwn | 3 + ..._6b16cd372a9bd4f99d4c8b09a82ce3ed._comment | 10 + ..._--content_not_run_in_all_repos__63__.mdwn | 24 + ..._aff6a984ab076433fbce32bacae6660e._comment | 13 + ..._5b1565955ed88554e5ef4a00c0f4a754._comment | 8 + ...t_high_cpu_usage_to_be_expected__63__.mdwn | 3 + ..._7880fc38792a1fcbf3e5c47e8bcaabce._comment | 8 + ..._840fbce18b4fdec21ee557fdf52c366e._comment | 10 + ...sitory_is_not_initialized_for_use_by_.mdwn | 22 + ..._ef3dbc83f24f00c49b7d7cf626af44aa._comment | 12 + ..._719abfa1dc9a64b1245376dedbccca6e._comment | 10 + ..._027130ce7e8a56551e1d16cbbae6d115._comment | 30 + ..._99d78dca3534c4d54f6925a095f1d43f._comment | 23 + ...ow_with_moderately_sized_repositories.mdwn | 67 + ..._c5c655ee3ec2501c1c3c60fd83574914._comment | 8 + .../Android___34__Bad_system_call__34__.mdwn | 89 + ..._d53c57d0f42e3eb5efd6ff5d47b73698._comment | 94 + ..._74a33b262400ed74a7e0e3bbeac651d5._comment | 17 + ..._818a652075a2e283e0be57a11e10a14b._comment | 8 + doc/forum/Android_version_does_not_sync.mdwn | 23 + ..._ed9e33eef2c6d651847dca9d3f7a63f6._comment | 8 + ..._4eafd3e989611f835c489b379bd6ec8a._comment | 8 + ..._2a4efec37015ea44509e7ed16b36a72d._comment | 13 + ..._1ad06842dd96be14e66cde67f32d50f8._comment | 26 + ...Annex_contents_just_disappeared__63__.mdwn | 12 + ..._4ab5ca00f912c0c95fabc10f2d9600d3._comment | 12 + ..._657f737c5d64d440aa133ddb41408fbc._comment | 8 + ..._9b4c35feb14b37d43d053d7430da9abf._comment | 12 + ..._c3625409652bff5f2165260803269a8a._comment | 10 + doc/forum/Annex_dropping_files.mdwn | 12 + ..._62fbea95248fda2ff075b5a8952a728f._comment | 8 + doc/forum/Annex_keeps_dropping_content.mdwn | 9 + ...nnex_slow_on_Windows__47__direct_mode.mdwn | 11 + ..._d80839f4582fc2a6269db31e30e1dbab._comment | 9 + ..._593e1e01b70a2b6a15ad6bca09a80c7b._comment | 8 + ..._c4e4c596f31aa97645fe1e1527dc2c31._comment | 12 + ..._92db0b99ada9af15a5383da41397ebd7._comment | 19 + ..._3d628c9db9ebdfd5bff92af105c47719._comment | 13 + ..._db7965fa928c093233769ed52b2fcd43._comment | 10 + ..._674f52c5e5484207db403b18efc986c6._comment | 8 + .../Annex_v7_repos_and_plain_git_files.mdwn | 23 + ..._3bf39b5e6990d4343d9154465d951a77._comment | 8 + ..._a0628a013b57c00ea449b40b93edd385._comment | 15 + ..._6095eaa58aa298aca72237381f567ffb._comment | 8 + ..._fd1a3658ed6f3b6af2297c768b3f1ac2._comment | 8 + ..._f47fec91d4ceebe653bc3fb221e2f8df._comment | 17 + ..._21648eecfaf9673b25d40327d11f7b59._comment | 8 + ..._official__41___OpenBSD_support__63__.mdwn | 10 + ..._0d87a7d0f6ae556deb999403a2fb5461._comment | 13 + ..._c7fc9be88dad09f71774664b233bc8a3._comment | 11 + ..._89330ea5d2754d59766a096e0c35d791._comment | 19 + ..._4cfc6b550dfb24c8468df97428d2cf8a._comment | 10 + ..._82ce026c2dc9627ca2f1563caedfa458._comment | 8 + ..._dfca53829fbe845f7f56e35638faf9fc._comment | 8 + ...d___34__.git__34___to_git-annex__63__.mdwn | 9 + ..._51f4392e718d857e2f155d6217727a53._comment | 10 + ..._9698c4a8f0d8785ee89a6228e0e85ca9._comment | 8 + doc/forum/Apple_M1_Silicon.mdwn | 1 + ..._5646c616f1897c797ce383f6d4210ce4._comment | 24 + ..._72129be313d82db95d4fe109793fc3fc._comment | 8 + ..._b62bcd53f260613fc9043008f0e9df19._comment | 14 + ..._c4ea06ee4c929f171eb6eaea0947bfe7._comment | 10 + ..._540e6d6f579174bb953824817f5822aa._comment | 10 + ..._e2aaf539d43951a20ea48d827082fe83._comment | 9 + ..._eeed553a1684f0b4ed07e5a7de62db5f._comment | 8 + ..._bed7d9e5565c6bb462e2ba8f4d815725._comment | 15 + ..._07c410bacefa5da582ce2064ef345def._comment | 8 + ..._2efc89b2c4f3ff408ccd015f297d743b._comment | 9 + ..._0fc6e261c00f1df8698c92c8de6f3a27._comment | 15 + ..._c60e046cb8b138aee16af2d4c66c803c._comment | 12 + ..._4620929361fb5ad8faea15ed3905d67f._comment | 8 + ..._d77519ba5ca217cb3ec6348567731b9d._comment | 9 + ...e_USB_drive_not_working_as_documented.mdwn | 171 + ..._59de1e101e5e427abb1df3a71c6f1b04._comment | 23 + ..._3541fdd31d398a494a8fa452ac2c277f._comment | 14 + ...ance_required_for_a_specific_workflow.mdwn | 19 + ..._7c803b6f2759f6fa74c514e79a26f369._comment | 10 + ..._4a00c4307a492ffe736cf981ced9f57a._comment | 39 + ...et_atomic__40__ish__41___states__63__.mdwn | 10 + ..._44c97c54066ca0487d8903cc01a356a3._comment | 10 + ..._98eb671596e84466e24004f55724660a._comment | 8 + ..._e3c506ae998a8ae681727d3c432f95d2._comment | 13 + doc/forum/Assistant_Droping_Files.mdwn | 8 + .../Assistant__58___configure_auto-sync.mdwn | 11 + ..._c8cabd38114582bbdbad49f2d81959d7._comment | 13 + ...omatically_use_only_available_remotes.mdwn | 18 + ...fails_to_authenticate_to_rsync_remote.mdwn | 17 + ..._fdbadd7ae4c0236301944136ac62346a._comment | 12 + ..._a395406abd3eb4cf07dc6467506a7e77._comment | 7 + ...dows_only_watches_one_repo_on_startup.mdwn | 19 + ..._48b43fe2ec186cea5930bf641522081d._comment | 8 + doc/forum/Assistant_invariants.mdwn | 20 + ..._0426e10ffe45f42658d89756ea5ef5be._comment | 12 + ..._7d3990582435203e0f94a8a3a2f1ef5a._comment | 13 + .../Assistant_loosing_advantages__63__.mdwn | 10 + ..._cdbc827d9e00aeeaefafe45de64b8d2c._comment | 10 + doc/forum/Assistant_not_syncing_to_Rsync.mdwn | 15 + ..._2178a7fc0d66643e84597b0938ef65f2._comment | 10 + ..._650651398443e128c2adc6a2a2d320d0._comment | 12 + ..._e6d0c9620b148acc72342862a8b4cfef._comment | 10 + ..._b91f9febdb8b69d8b487ba4ea08c119a._comment | 11 + ..._c5ad7c1546a17d8459c995c9c8c26414._comment | 31 + ..._4c12587f972eced91c5128d4885800b5._comment | 30 + ..._6ecaaee9316bcf0c65688676d60fc055._comment | 8 + ..._daa9a9a6188afa0394833e1b682f7cd4._comment | 10 + ...pair_fails_with_everincreasing_deltas.mdwn | 21 + ..._a8effe196e4a040630d183803768c5a1._comment | 10 + ..._9f032e43b132bcad656e1337ab2551ad._comment | 10 + ..._5a09f65c77dce3c62236c13aa90a1191._comment | 10 + doc/forum/Auto_archiving.mdwn | 17 + doc/forum/Auto_ignore_non-reachable_repo.mdwn | 15 + ..._40d7aab5e43c75ede3414ed48f0c7066._comment | 8 + ..._74c297d8d5e9f7d131c461ed5e803071._comment | 16 + doc/forum/Auto_sync_with_music_player.mdwn | 1 + ..._81ad1c15cfd753531c01dae8945d1caf._comment | 8 + ..._a15e3f298c3d3faa5b3295355f9bb794._comment | 11 + ..._99f65a0efaf5d5f9b8ff530acc122860._comment | 8 + doc/forum/Auto_update_not_working.mdwn | 6 + ...es_due_to_external_modification__63__.mdwn | 46 + ..._dab1099ee56541c194de319c593f1268._comment | 9 + ..._b5faccf132fb47e3cda778a6600fd9ef._comment | 8 + ...ic_commit_messages_for_git_annex_sync.mdwn | 1 + ..._ea2ec57bc695da4df8a30a35d433959d._comment | 15 + ..._af71f53dbbca35d5a5c66ff131887ada._comment | 8 + doc/forum/Automatically_dropping_files.mdwn | 7 + ..._f5fc608f9cb0edf3272b586b62050637._comment | 12 + ...lly_syncronise_centralised_repository.mdwn | 14 + ..._6a2047daa9faf4309d2ed27d5cc48b76._comment | 10 + ..._3be7b45bc2284019f17a81375637a576._comment | 10 + doc/forum/Autostart_the_assistant.mdwn | 9 + ..._a5421711102fb1649d98d916e5ced86b._comment | 7 + ..._df70bd0f5caab43503a3c9d805323289._comment | 35 + ..._42de896f64adb49c60ec3f7e0aeebda6._comment | 19 + ..._5c6e085b1077b0792a1805f032ac6a4b._comment | 11 + .../Back_up_videos_to_youtube__63__.mdwn | 24 + ..._e81f72bfe678e2aceded518338be1473._comment | 13 + ..._6cb19f9c371d7cb046302ed193c77489._comment | 10 + ..._ccb5cb5fe520b3f2a4822d85c246296f._comment | 8 + ..._303b4f755dd117f8b22c98669e7bf932._comment | 8 + ...Backend_migration_and_special_remotes.mdwn | 22 + ..._cf6d45c43b14719fc5ea41d0cbfb612d._comment | 20 + doc/forum/Backing_up_photos_to_the_cloud.mdwn | 13 + doc/forum/Backup_of_git-annex_repos.mdwn | 15 + ..._ed90e524606e394f7669fcba10846930._comment | 11 + doc/forum/Backup_of_whole_Linux_system.mdwn | 16 + ..._bf48d93872bfadb5daaf02a10e699b79._comment | 10 + ..._af49edff9174c2ee17391e78ac97d5f3._comment | 11 + doc/forum/Balanced_Parity.mdwn | 41 + ...repo_on_USB_drive_not_providing_files.mdwn | 17 + ..._0738174fb6984b777ec0a221502106ac._comment | 30 + ..._1e07d1a9ddb88c0e1d84d8d88b7b4cc4._comment | 10 + ..._65d007284287e709a8f6f07dd8630f15._comment | 12 + ..._3bbce5d12ece481b669be10ef9a70f40._comment | 28 + ..._5e6202c319e75a9758bb8c2f32152e0f._comment | 16 + doc/forum/Basic_set_up_with_one_remote.mdwn | 14 + ..._3ad06a0dbebf62e6440f549e77af59b6._comment | 15 + ..._59e18e759c907b8adabf8c34eef08065._comment | 10 + ..._5221a713ee3f65fa2740c9fa6cb1db0f._comment | 27 + ..._62e554a546e4b50d211f5f65446fd289._comment | 13 + ...rocess__44___git_rm__44___and_locking.mdwn | 7 + ..._6cb866b48f6426e7ecc4f8d6af5b710d._comment | 16 + ..._51667179ddb52ca5fa1166196c5d37e2._comment | 8 + ..._593879cc70e9a07a49fa663677f5c045._comment | 22 + ...__w_access_on_shared_git-annex_server.mdwn | 13 + ..._871b5a42f1134a059df520993bb55268._comment | 11 + ..._68d675096d9ea32780b8ec8526544b12._comment | 7 + doc/forum/Behaviour_of_fsck.mdwn | 13 + ..._0e40f158b3f4ccdcaab1408d858b68b8._comment | 8 + ..._ead36a23c3e6efa1c41e4555f93e014e._comment | 19 + ..._97848f9a3db89c0427cfb671ba13300e._comment | 19 + ..._e4911dc6793f98fb81151daacbe49968._comment | 8 + ..._unlocked_file_mode_V6_vs_locked_mode.mdwn | 4 + ..._fef0122752291bdc583fdcfdd400d250._comment | 10 + ...or_central_sharing_and_multiple_users.mdwn | 8 + ..._48ffb50b92588daec6887bf08f1b97f5._comment | 10 + ..._6b9a20f9707da9d2cfc3697a538d6935._comment | 12 + ...for_dropable_compression_+_encryption.mdwn | 15 + ..._1d55eb39e46eee8c5dd6e142e71289ad._comment | 9 + ..._704eed4d3607ebbfc9c6f5c64e7a1507._comment | 8 + ...ect_names__41___in_absence_of_git_log.mdwn | 18 + ..._a1827481a3ac140d58a4184121328d87._comment | 15 + ...manage_files_on_removable_media__63__.mdwn | 18 + ..._direct_and_crippled_annex_repository.mdwn | 17 + ..._552e74f9573a34ec178f396b83252c3e._comment | 12 + ..._33c57922714f204fc63c260b838f3712._comment | 8 + ...o_remove_old_version_of_specific_file.mdwn | 24 + ..._1663dd9118cb1fee92ae3f8d812df79c._comment | 17 + ..._6580f6790404694b55d07a0e57d83336._comment | 8 + ..._c1f34ec908d7c4ad05c4360e29e68fb4._comment | 8 + ..._160011717157fa8fca3a33b543c4d28d._comment | 14 + ..._dfec54344742e2c8d6904333ff848c8c._comment | 50 + ..._e854d6b778bcb7dc1578cbc9c8fcaa42._comment | 14 + .../Big_repository_vs._multiple_small.mdwn | 8 + ..._8e21ee3c674ef6e595bdab53dd5c2356._comment | 8 + ..._656c62351502492d20e8490242e51169._comment | 14 + ..._e9c44ea364513f090844f46af2ea46a1._comment | 8 + ..._82e13580426dc648688e4c26e7ed91ec._comment | 8 + ..._632aceb71dc6a4a9a4bb03de25a9b21a._comment | 23 + ..._doesn__39__t_appear_in_the_Assistant.mdwn | 37 + ..._239ae08d8eb8b0d7fe52991b0bddc653._comment | 11 + ..._8b91328473b384f347710ec634be710a._comment | 8 + ..._12a6bc61a7492650fd2baf9a1b796997._comment | 17 + ...emoved_any_time_a_copy_is_found__41__.mdwn | 55 + ..._a224bf8ed9502053e9b95317db7b4bfa._comment | 24 + ..._0f2e7cf29ad9d41e0041924e69425050._comment | 27 + ..._a2cac051ef2d36e1ffb550c4a788c111._comment | 101 + ..._d95647d91a33d1164a87344939cb769a._comment | 10 + doc/forum/Borg_and_xattrs.mdwn | 2 + ..._703c9a9be1e0b0ca9ce4dd0309546a04._comment | 8 + ..._a1f4e0758c3e02f4f8558d167a26c0c4._comment | 8 + ...sn__39__t_been_working_for_a_few_days.mdwn | 72 + ..._6ca872c241399b9129cf9a18f42ebd43._comment | 8 + .../Broken_symlinks_remain_after_drop.mdwn | 7 + ..._d4a59b9e58d43d7a3d437e521dd5c4e1._comment | 12 + ..._399ba969a17a41a022c69a1f7c480857._comment | 8 + doc/forum/Building_Android_app_fails.mdwn | 69 + ..._094b90cbc1e2e069900c0037fec145ad._comment | 11 + ...uilding_a_Debian_package_of_git-annex.mdwn | 27 + ..._0848513c46f3efa21bc34784554ae88a._comment | 10 + .../Building_git-annex-3.20121112-19309.mdwn | 78 + ..._b115e28c77fe748ee6643c41f766beb4._comment | 12 + ..._8c6ae1fd74f14da12ccfa77dbd27fc65._comment | 16 + ..._2f30b301c14f3a7fa0f52715d6140353._comment | 13 + ..._1e3c3903a71a2ff7109372aa4dd5742a._comment | 8 + doc/forum/CD-R_as_special_remote.mdwn | 10 + ..._e5d6d72953575d2bbfb6c620bb4c9454._comment | 10 + ...esolve_dependencies___40__yesod__41__.mdwn | 19 + ..._2eb4f410b54a25fcc895893a3c631c43._comment | 8 + ..._44cd6f6dd674df105d6f0b3f320f3236._comment | 19 + ..._992af6855901df79a2018a07941cb8b6._comment | 8 + .../Calculating_Annex_Cost_by_Ping_Times.mdwn | 1 + ..._9b4a6bc8d52ecbbdd537e8cf76757a80._comment | 15 + ..._7e04f85c6ba74c18c8dde148aef9bf80._comment | 8 + ..._annex__47__transfer_directory___63__.mdwn | 11 + ..._3510190e7c5d08f906b24e5743245f87._comment | 13 + ..._bfd829aed28817a5aada3f237496c865._comment | 25 + ..._cf2ae4db1fdb421b59d85edd9e58b868._comment | 19 + ...remove_a_groupwanted_expression__63__.mdwn | 7 + ..._23d18b52d87468ffadf0a3e04bf8052d._comment | 8 + ...in_the_git-annex_git_repository__63__.mdwn | 6 + ..._c8f9923d8dc76b8bed25dce5ae09b520._comment | 8 + doc/forum/Can_Not_Sync_to_Git_Repo.mdwn | 1 + ..._e0f82074eb1a4b8258729d9a23a7f421._comment | 33 + ..._842aaf685aa843c21bf3eef0b61f8630._comment | 8 + ..._b4f8be428a08db01dbd004e1f06dcffd._comment | 10 + ..._45132d348807fbf8ed32198e110d2caa._comment | 26 + ..._d2bb44a7607f3b2cddfd98cc2fa456d6._comment | 12 + ..._80344c54804ddee81d89c0b40731fb9c._comment | 8 + ..._1797c2fef5c20e885b56b8a2c6330ff0._comment | 8 + ..._fb23d640f9634cab2da91848f1848627._comment | 58 + ..._a947736911e68856f2c3494963063df8._comment | 8 + ..._ce0e77143cfd2d578b1e5a71e35060da._comment | 18 + ..._10e114da6a2bb54b860b44767ba1ca94._comment | 17 + ..._415bab6a7ab564e671f42cfad83e0e58._comment | 10 + ..._36abd829ea71a44c7cded1123a7c913d._comment | 8 + ..._2fb745aaffe544f97bbdc670261fd4fd._comment | 14 + ..._file_present_in_special_remotes_only.mdwn | 72 + ..._e03ec3be310f5c0e02457ac053e6afdd._comment | 30 + ..._1bea8772a170277420faa898dcf2ab83._comment | 10 + ..._c061fef62b272d34b605d94a176cd577._comment | 8 + ..._2f6d31ada3a8f3f43bc53ce9ee2c70b8._comment | 14 + ..._d25b7eb756f08c94a2b2ada472cd0f87._comment | 13 + ...git-annex_merge_to_work_from_git_hook.mdwn | 41 + ..._8b71cb6772b219c27c17392d5099907a._comment | 12 + ..._af2a2634d8d128868022d033d6adb549._comment | 13 + ..._31ec762a0684d2ce87d229ed2924db93._comment | 16 + ..._cfa52c727baaf683e91c3fbb1c78072c._comment | 8 + doc/forum/Can__39__t_get_jabber_working.mdwn | 7 + ..._def20bf0b3c1a188e4dad5ec67b455d8._comment | 8 + ..._7cb49c0ebfec6e0fe6784e189ed65d40._comment | 8 + ..._852dc402a286e38b77b99f174c33f8d1._comment | 8 + ..._259741e146906ff70540390bdfe07002._comment | 8 + doc/forum/Can__39__t_get_pairing_to_work.mdwn | 5 + ..._b981977b4fb942fd109c37fcf40f35d7._comment | 22 + ..._341e2ff6c88ace1b1422e16781edf580._comment | 8 + ..._0c8cce48f179f2564ff0844bb7ef6bd1._comment | 8 + ..._169d77b30cea05125068ee1eeb2ef328._comment | 25 + ..._70e6c4f4f01277be1767b38ca8374793._comment | 11 + ..._2cd014a76fac6e08269dfd8146957418._comment | 10 + ..._b9b715084d5a5562998b1724699d49e5._comment | 8 + ...__39__t_get_some_files_from_bare_repo.mdwn | 21 + ..._ead60b63efb06249c99202631ef0b247._comment | 29 + ..._82a5d9005dca476916e4b5df671e3111._comment | 25 + ..._430c7854e33ff3e821ebd00b436dbf45._comment | 8 + doc/forum/Can__39__t_init_git_annex.mdwn | 15 + ..._c4d2ab1ecf69718a2211c3ea7b27092b._comment | 10 + ..._fca9ed3707e097bee2cd642424681005._comment | 8 + ..._a294b5e7e52aa9f66a708866be16f137._comment | 10 + ..._fcf678d5188821d63b4c9ea5b59474a8._comment | 13 + ..._c83f7dea7d5304e226e52eb3c43ef14a._comment | 9 + ..._06a01dd51ffbfd006c0afb8eab40b530._comment | 8 + ..._53c33484bded57abc60f0449331c7b05._comment | 11 + ..._9e0ff44f6e62581bfc83f9f1da3e0100._comment | 14 + ..._7f96b5ef05e2faf4a3dbe8bfc39b810e._comment | 10 + ..._65ab8463716f4ddd7721a5bcfcd18fa0._comment | 8 + ..._31a45f6a72266190b3ed7a7b02e03d5b._comment | 8 + ...an__39__t_install__58___Mac_OS_10.8.2.mdwn | 36 + ..._c44023d81e9e4f7c9341af0e4271a1e4._comment | 10 + ..._dfbcd39eedff28dc9ed866a8f1411ef3._comment | 30 + ..._b37b2a9906ffb956cca91adb4bb4e521._comment | 8 + ..._afddf16f8faedc78d458835480f10dc3._comment | 15 + ...__39__t_upload_data_to_glacier_remote.mdwn | 55 + ..._cb18d5d63663f73a343c8972faadc83a._comment | 9 + ..._9b6a397d1c85da87481d36b8a4bd1ba6._comment | 252 + ..._6625da96f8cdc8b367b4c2bc275f2aee._comment | 14 + ...d_as___34__must_have_file__63____34__.mdwn | 5 + ..._14d4d3f84eacc36dcc55af783d189619._comment | 10 + ..._409d6a97f5c3d1f1fc5e932a2965e227._comment | 16 + ...icates_honour_multiple_backends__63__.mdwn | 25 + ..._5730767d5247e8997b4fa5b20c4cb281._comment | 35 + ..._c2846031bd79fa60cd903fb4d5bcebaf._comment | 10 + ..._or_Dropbox...__41___substitute__63__.mdwn | 76 + ..._a3fbae205c0312436f8861f432643811._comment | 10 + ..._de49cf261c644a6e7f6ac881a48d4e6c._comment | 10 + doc/forum/Can_not_delete_Repository.mdwn | 3 + ..._b1a9420974e2e50c9c86a379ad62502c._comment | 12 + doc/forum/Can_not_drop_unused_file.mdwn | 14 + ..._cea83dfdf4cdb4f6efb3f2b33a39a51f._comment | 16 + ..._ed1543cff5e6e81ca18c43b716ca8199._comment | 42 + ..._0c9c9c0ed557af4845a67434c21bb4bc._comment | 10 + ...40__autocommit__61__false__41____63__.mdwn | 6 + ..._bc838634442883e541de1ceab520d71e._comment | 13 + ..._676a8c3586d16afedff9e47d9ffd7431._comment | 21 + ..._e584a99e46f881358bf848131a94e293._comment | 9 + ...motes_that_aren__39__t_tracked__63___.mdwn | 13 + ..._35e5a963b9e58ed7773dfcb884f8ecbd._comment | 10 + ..._7cde9785886c8450e1475f0b54481ae3._comment | 10 + ..._you_use_git_annex_on_gocryptfs__63__.mdwn | 7 + ..._3e8c83a9d0a8dbb7a5a3fd25136cf0b4._comment | 8 + ..._9a46e613745c8c80dedce6a3cd799e0b._comment | 17 + ..._de92ff891493737021cb264394a0a6bb._comment | 16 + ..._2689a87a68dc459615d9542ad908b7a3._comment | 75 + ..._a1f8d718be941f4dd5e7b06fd6431c10._comment | 73 + ..._375b8234fc79d75f3cb39004cbe4d9e3._comment | 25 + ..._ff7f26601e375146a08b454a2e448f1b._comment | 9 + .../Cannot_find_git-annex_in_server.mdwn | 10 + ..._bf7e98e6130698ad0dc92e3a6a63ade3._comment | 15 + ..._168dda4aed09f90a510bc453e8a7cda7._comment | 10 + .../Cannot_get_file_from_special_remote.mdwn | 62 + ..._7fd5cebf26042ff0de30746bf8a6adcf._comment | 8 + ..._bbb832f022d23b1f020d07f3fe99577f._comment | 7 + ..._81a6054bc3b64f1325f4d85979f2b12a._comment | 24 + ..._6e7252449b3eb9ca5d45b5c3889cacd4._comment | 23 + doc/forum/Cannot_get_file_with_git-annex.mdwn | 95 + ..._d16cff700d5899c56011f66b655ad9ff._comment | 33 + ..._50c375c6af20b38dec08eff10113dee2._comment | 8 + .../Cannot_get_unlocked_file_contents.mdwn | 8 + ..._1905d2a9ae0142838f42aff4efd5c643._comment | 8 + ..._496503ae9878d402261910e2dd9bc385._comment | 9 + ..._57ee489f24b26b73b28f64566e2b8ff5._comment | 10 + ..._be1f3ec26c14ca9adc9d8f24ea096976._comment | 11 + ...unch_webapp_on_ubuntu_12.04_using_ppa.mdwn | 6 + ..._9345551f5772c3a6f1490b00e1edbf69._comment | 8 + ..._0b688a442b6a911a0353e73097a24cb6._comment | 12 + ..._7e246caa00005560bb489c927c663046._comment | 12 + ..._1d8025aabe8bc72711a77f691f67da5f._comment | 8 + ..._7c2f95da65190016192424e7c622122f._comment | 8 + ..._9b8465cefe609e7a696e7573b8892e38._comment | 8 + ..._af6472762a598a454ba52ac0caa059aa._comment | 10 + ...nt_see_git-annex-shell_via_SSH_in_OSX.mdwn | 119 + ..._1fafdc4ed4a0f601918361dca688aa6c._comment | 14 + ...e_search_with_find_list_whereis__63__.mdwn | 1 + ..._b893fd9a250d25ebc62913131cb0a479._comment | 8 + ..._e19abfe33b0f071ffc059e9976fc6d91._comment | 7 + ...nex_server_that_always_keeps_one_copy.mdwn | 1 + ..._e786c8df6e48d88cf15b555af1b8639a._comment | 10 + ..._b0a091e11c18c8640888b0aedfbff5c5._comment | 19 + ...ith_automatically_merged_working_tree.mdwn | 30 + ..._bc850e25e48598a09353850021c6368c._comment | 17 + .../Centralized_repository_with_webapp.mdwn | 13 + ..._dcb9b07fd154f4d4fdef4809cc37ce77._comment | 18 + ..._08c84f2703f89dc12982eba9dd2a06d1._comment | 11 + .../Change_a_special_remote__39__s_type.mdwn | 7 + ..._9d7c23f5c985d44ffa78b3957ddc3d15._comment | 8 + ..._c514ca0dd8b883e02de7c70b46991152._comment | 8 + ..._b89db83045d4baa82cc96b7610caecda._comment | 7 + ...Change_annex_id_after_harddrive_clone.mdwn | 5 + ..._2e8ba624f404edf2923d08ae27d12a60._comment | 10 + doc/forum/Change_or_add_S3_credentials.mdwn | 6 + ..._864932114dcc7aaf1d88edb0673f1d86._comment | 10 + doc/forum/Change_remote_server_address.mdwn | 6 + ..._401c3d2530ac7ba41dd3857ab4737ed5._comment | 10 + ..._93a4c44d552efe6d51584e0aab3605e7._comment | 10 + .../Changing_files_during_git_annex_runs.mdwn | 12 + ..._8067077c49dafbe2afa7d182b3314df4._comment | 14 + ..._target_of_an_external_special_remote.mdwn | 1 + ..._db1112fb1b4626f2d2c1b7b78ab3f5e5._comment | 11 + ...t_test_for_an_initialized_annex__63__.mdwn | 11 + ..._abe1af7fc49f91e3aa15915190dc5dfd._comment | 10 + ..._3d6f353d087cb945a0288f0594a1d1e0._comment | 11 + .../Check_if_remote_is_using_GPG__63__.mdwn | 1 + ..._db8ce8ef50fc33a28860ee475988450f._comment | 14 + ..._11c7033904c9c7a1df766e915632c386._comment | 8 + ..._a7ab70ad87a334c36761ddb3d830d99b._comment | 8 + .../Check_when_your_last_fsck_was__63__.mdwn | 4 + ..._ee98a1fcd796fe4fd7af6f77d0c1837d._comment | 10 + ..._7238740d7904a6a9715c1cd7d8a529d4._comment | 21 + ..._8fa3680b084fad45d7a184d1191fedce._comment | 9 + ..._in_S3___40__reduced_redundancy__41__.mdwn | 5 + ..._793b3d9f78562f3aecf27dd926bbcf82._comment | 8 + ...Checking_that_everything_is_committed.mdwn | 32 + ..._875c22110d65c0d8e6ef6aebced87e95._comment | 23 + ...ut_only_some_files_with_the_assistant.mdwn | 14 + ..._23d8ab1a05e3e9d3611bd12a4ba70b0c._comment | 10 + ..._bf095ff5b5af95b062ae1f7da566a279._comment | 12 + ..._7c026e36e1cdd52053c34638c87d793c._comment | 10 + doc/forum/Clarification_in_usage_case.mdwn | 8 + ..._555ff0df9be2e25dcc784bc7956dcfe7._comment | 16 + ..._8b43bc642656243cdf43cf77ae1c1851._comment | 10 + ...ions_about_how_to_work_with_git-annex.mdwn | 11 + ..._7f9857887a25df617a99cdab119761d8._comment | 14 + ..._up_after_aborted_sync_in_direct_mode.mdwn | 19 + ..._3440b2e1662d3b113c18283afcbf4520._comment | 8 + ..._9a61ba8ac4a375f1d69cd09b5a6f8091._comment | 14 + ..._6b9d8c48547f3d0a911310622ba91df7._comment | 13 + doc/forum/Combine_tags_in_view_branches.mdwn | 24 + doc/forum/Coming_from_git_world.mdwn | 9 + ..._098bef38c2688607e869425a557cc482._comment | 8 + ..._98d75a1415e0c3689ab4231855e61233._comment | 12 + ..._5e7079e9bf3e4d97191333c66ac00e52._comment | 10 + ..._357443dc601ae38784c01cf18552f4d5._comment | 14 + ..._ed1847dd3f47a9d013b8dd0455fb80ff._comment | 8 + ..._09c6bb83a73d34dff2b8bc185a14a1db._comment | 18 + ..._6c731bb9a8d21dd9ab8c09612b23f908._comment | 16 + ..._e719d99af5afd90da3d3db692eff28dc._comment | 11 + ..._85a42106944dba9995fb3f4bfee3443a._comment | 10 + ..._90623294b910ceca3dc8ebd41b50fc9b._comment | 38 + ..._28dbee30eb54877418f72eb8935302d8._comment | 8 + ..._6edb36ea9535030fa3766937398e5bc7._comment | 8 + ...arison_with_other_big_files_solutions.mdwn | 11 + ..._Problem_with_latest_git_pull_version.mdwn | 23 + ..._0b87183756e860d93b8c0197bac3c0b1._comment | 16 + ..._1dd40ce31bcf994656fdfee7f8af43d2._comment | 8 + ..._f8e52610a592c68f9bc733bd31fa9659._comment | 10 + ...tes___40__specifically_S3__41____63__.mdwn | 1 + ..._9c6c4ca0c9dc6976ba7cf27e84683bf0._comment | 8 + ...usion_about_Webapp___40__on_OSX__41__.mdwn | 9 + ..._868b326cc5eb0767390ffdf45a594cff._comment | 10 + ..._9b38b92d584395e5468bed03395c927f._comment | 12 + ..._7d790a158b7c22206b0b523a4227bacb._comment | 8 + doc/forum/Consistency_Check_for_S3.mdwn | 1 + ..._40385806ef1cc082232cd2723a24be1a._comment | 8 + ..._ebfe40d9f777c9c0a83c44afd0f5802d._comment | 8 + ..._ec9de6882a0eef4d2786e55b583ad020._comment | 10 + .../Content-sensitive_chunking__63__.mdwn | 9 + doc/forum/Content_branch.mdwn | 5 + ..._564724cb1508524700b71950b81a5058._comment | 10 + ...sent_and_get_doesn__39__t_retrieve_it.mdwn | 7 + ..._55e676477623db9e26e871d7189a1a88._comment | 10 + ..._cb404061683de3bfd5c24ce7e5ee6b82._comment | 10 + ..._74055eed54696331af07ba1721055562._comment | 16 + .../Controlling_content_on_mobile_device.mdwn | 46 + ..._708649b7f30d8619d7b34dcb0ef46515._comment | 12 + ..._dba1a1b0917332a1dee387b1183bd2cb._comment | 8 + ...egular_git-annex_repo_to_a_rsync_repo.mdwn | 1 + ..._e6065f9c44c85030c7628e2cfa0fd0fa._comment | 12 + ..._76bfb11396dc20a5105376b22e7e773b._comment | 10 + ..._b34d6ae0718ab0ff6bc1d7b8f2470b9b._comment | 16 + ..._8f5e323b29745591f9f2f0f867353f69._comment | 8 + ..._9824c953694770afa0611ff7276737bf._comment | 12 + ..._5899741cb7f83e1b22c5ee3509c5ff21._comment | 8 + ...ctory_to_rsync_remotes_possible__63__.mdwn | 16 + ..._6a598b2a0fc6c241aa051f663dca9842._comment | 11 + ..._09b7f1dd1fa4589b3fe0be0086849bf3._comment | 8 + ...at_only_wants_content_already_present.mdwn | 14 + ..._fb09f84abeebc55df9741b059dc50674._comment | 10 + ..._0b13914351aeb57fd7684ff2041618ee._comment | 8 + .../Copying_and_dropping_right_after.mdwn | 18 + ..._87d81911964c2628ccb6156b0b631aa0._comment | 8 + ..._87a14d14014aefc33f811bb15ea27e13._comment | 15 + ...oes_not_work_-_chunking_does_not_work.mdwn | 47 + ..._ec390a7d521c697eb6b17e8db1dc9d1d._comment | 10 + ..._14a584567ef42d5b7955ee970200e74d._comment | 10 + ..._6cbd7329f1f11edf8dd90df27d45158f._comment | 10 + ...unreliable_private_server_and_box.com.mdwn | 3 + ..._9c357a4a99930936124a58ffe105f87f._comment | 8 + ..._b4aec96cbcd8752f273ecd810400acef._comment | 41 + .../Corrupt_Repository_Invalid_Object.mdwn | 10 + ..._b7fd4b6212b50400342931e70684b96c._comment | 14 + ..._repository__44___can_not_be_repaired.mdwn | 40 + ..._297ea9c13096f6360358b3a3e7197c03._comment | 37 + ..._c3aabffbe9568cf7acb4018e445f22a5._comment | 13 + ..._baee46af6b2dbaf92be406ab22007a85._comment | 12 + ...ight_checkouts_on_the_same_filesystem.mdwn | 7 + ..._dc219eec54b62803831c854a620aceae._comment | 20 + ..._1263830d015a458024a2346540f10f31._comment | 11 + ...ating_a_more_secure_shared_encryption.mdwn | 7 + ..._read_perms_from_dropped_files__63___.mdwn | 3 + ..._53941b83ff173025934e002a26031d9b._comment | 15 + doc/forum/Curious_file_in_repository.mdwn | 17 + doc/forum/DBus_on_Ubuntu_12.04__63__.mdwn | 3 + ..._dc14a40b64b7eda94d1a3fd766cd39cc._comment | 28 + ..._608a30e274e6a691a39f69503720e320._comment | 10 + ..._791b9978b410c1aff7fd8ef05c38f5f9._comment | 40 + ..._8665c95299916138c4af375626d9ec7d._comment | 8 + ..._NOT_use_ntfs-3g_on_mac_osx_for_annex.mdwn | 41 + .../DS__95__Store_files_are_not_added.mdwn | 3 + ..._30687306da9bd35ec02a806193c5e240._comment | 7 + ...ompatibility_seems_like_a_showstopper.mdwn | 15 + ..._d2640d4cd5bd28df5ecf389d17a2e52b._comment | 13 + .../Data_loss_if_symlink_target_edited.mdwn | 7 + ..._599b96a2299f3c998f0317f4321eeff4._comment | 26 + ..._synced_from_my_local_repos_to_amazon.mdwn | 45 + ...repo_content_is_not_considered_unused.mdwn | 15 + ..._e78552e939891b950a8352e4e3bdff92._comment | 22 + ...ing_with_crippled_Android_file_system.mdwn | 15 + ..._1b17852211108d9ab4d3959d7f57a9df._comment | 20 + ..._af66edabeeafcefb45b1d5c5d13dda92._comment | 21 + ..._8a555490bf1735c2f05a95cdb281ec80._comment | 11 + ..._051a08b7acd718ebae66a6aab69edb6e._comment | 11 + ..._a210b77d8567643667bbe92b40b5bef0._comment | 19 + ..._91f81669519dbf1dfbad2259f48ab99d._comment | 23 + ..._087fdae633144482473c7391ea338c5c._comment | 15 + ..._a2bafe08ff3e7a236ba560dafc9c4d85._comment | 18 + doc/forum/Dealing_with_long_filenames.mdwn | 8 + ..._373798ea9763d3a0be5ce78f7e3f79f0._comment | 16 + doc/forum/Debugging_Git_Annex.mdwn | 4 + ..._ce63b2ee641a2338f1ad5ded9e6f09a8._comment | 7 + ..._1d70ff052d00f33c34fd45730ea13040._comment | 12 + .../Debugging_of_transfer_considerations.mdwn | 6 + ..._e68ab187c15b3b6f9384a990da07f358._comment | 39 + ..._f7cd207b08fe365d0a6248316c91ed78._comment | 8 + ..._508b5b4155f0f9c0c2a7d2e990a1bf92._comment | 14 + doc/forum/Deduplication_in_direct_mode.mdwn | 18 + ..._cb8eaa8c19f5bb9e145a5e4c8995a8ca._comment | 22 + doc/forum/Default_annex.largefiles.mdwn | 1 + ..._74a3ad2388e41f1ff17f64a00485a35a._comment | 8 + doc/forum/Default_text__47__html_handler.mdwn | 2 + ..._4730061916c7e12b7a41906152f847ee._comment | 12 + .../Delete_unused_files__47__metadata.mdwn | 7 + ..._3efc19895c8dec89b71ae3778b583fea._comment | 11 + ..._23597d9468347b3d94257f3c02afe1b8._comment | 8 + ...ing_remotes_doesn__39__t_work__8230__.mdwn | 1 + ..._01d244f44d439ad08681af88284103c8._comment | 7 + ..._a33c699726e5a913da72671ceb9be989._comment | 8 + doc/forum/Desktop_as_transfer_repository.mdwn | 33 + ..._b211b8f0ab58b8e59ce31d6ed6cb3c8c._comment | 46 + ..._9a943bcfe7679e469acc6fa1f78324b7._comment | 35 + ..._17165386df0c8c0085de29659f46f084._comment | 7 + ..._986e7d7bb536685f48731ffbbab4dc7c._comment | 10 + doc/forum/Detached_git_work_tree__63__.mdwn | 11 + ..._656c737772bf92be2c7a2f33bd2bb0f0._comment | 10 + ..._28ac35a325fba250721d9f1b7c994960._comment | 8 + ..._7128c26bbc8efea04a5a317edf0ca9f2._comment | 13 + ..._a3c22f905748ff2c803e8621c74a87a0._comment | 8 + ..._8063921241760458349e7cb0cadf3d4e._comment | 8 + ..._4510a787255cb03e7d0c3e7b830b7d52._comment | 16 + ..._ffd9c67ecc5b46ae98996018573f5591._comment | 10 + ..._36ca007643c983604fc4aed6ec8cb3d2._comment | 8 + ..._b7a2da4fbace7156e11c48a496a19dc9._comment | 8 + ..._f9fa237a693d28178f0451799209f7e2._comment | 8 + ...between_copy__44___move_and_get__63__.mdwn | 24 + ..._26ee8192af3a62178c1ccf17c6da5ca5._comment | 10 + ...between_unlocked_and_directory_remote.mdwn | 7 + ..._6f4501e32029b1dbb52c9a7b4d2f17a0._comment | 10 + ..._164489438245c38383645822a93cb80c._comment | 26 + ...pointing_to_same_special_remote__63__.mdwn | 6 + ..._359f46805e6508d03aadd90429937546._comment | 10 + ..._branches_for_different_devices__63__.mdwn | 17 + ..._a7d2c26298e8da715e1deb13baaf002e._comment | 9 + ..._214c71d2ab43e4d1bf564ea8337909b7._comment | 10 + ..._534f1e2cfcc0b6d184ef4968ec33dc89._comment | 10 + ...fferent_preferred_content_for_subdirs.mdwn | 13 + ..._5c1e1e6375360cc9416821085b5a68a8._comment | 17 + ..._cc72b229b0a9a8f0ae0f42d6c2a145fd._comment | 47 + ..._c6764ea73c13b59645f1b378e77984b6._comment | 13 + ...ile_from_Full_Backup_Repository__63__.mdwn | 14 + ..._67ac7e8b53a4374baf640d32dac79030._comment | 8 + ..._eb6df2bfcb3892ae22050a8c5f67ee90._comment | 8 + ..._15f36487383a631f16e041e2885c44ec._comment | 10 + ..._9293831aff5b6cef490f65d03638d34d._comment | 12 + doc/forum/Direct_special_remotes.mdwn | 26 + ..._50357130a1c57ad2fab70f71925faf02._comment | 8 + ..._e94a722ca056a068bcc16eb822008602._comment | 18 + ..._187036bbfee0508e2914afb51ead3c71._comment | 16 + ..._6bfbf60f2061d49b7d34c844e7e1dea2._comment | 66 + ..._69c34c655e4b153dfc0d1b8580091124._comment | 8 + ..._b054cfc3d3f81873f3faae7eb4f5337c._comment | 8 + ..._5f9d8a0ef2f13f242594848825d29ee7._comment | 8 + ...o_adjusted__40__unlocked__41___branch.mdwn | 3 + doc/forum/Disable_ssl_verification__63__.mdwn | 34 + ..._39af4df2a16e363f93f75a7a57af048c._comment | 12 + ..._8ff8769a1e62caf4f515b04db38d13f0._comment | 9 + ..._cf39af1d8ff11ab602363a717be074c6._comment | 8 + ...ges_of_WORM__58___long_filename__63__.mdwn | 13 + ..._cc5502b55fb71c8fdb235ea9d17216ff._comment | 12 + ..._d04b7adcc17a305fb1d7f1c1a3641be1._comment | 24 + .../Disconnected_Archive_and_Backups.mdwn | 18 + ..._c56f2d3328c0d127efc21067dc52df15._comment | 20 + ..._63b934b773b5f7a3c128dd9685f671ab._comment | 23 + ..._fae320f7453cf8c7147a109f19be22ba._comment | 16 + ..._b3d39d1b85489ce4059a72b9a912624c._comment | 36 + ..._93bed4629304725297f88cfa3d494720._comment | 9 + .../Disk_usage_during___96__import__96__.mdwn | 5 + ..._3ed4d9a36cacb9be96860cfaae8cee90._comment | 8 + .../Distributing_data_to_a_set_of_drives.mdwn | 1 + ..._f1fa72879f4e1db13bf59dea33c91624._comment | 8 + ..._e13b4e5c1e6f1f503f93d521b504d5c1._comment | 16 + ..._I_have_naming_ssh_remote_issue__63__.mdwn | 45 + ..._f3e5ef9d7440cba467ebda1f2e8b12ea._comment | 25 + ..._work_when_the_buddy_is_offline__63__.mdwn | 1 + ..._f290dd8547176793934f8077374e1c0a._comment | 17 + ..._c358eb51047f333e582bd824be5e0e65._comment | 8 + ..._a2332c0e7b29110b9aed2ab69ce9d8c4._comment | 12 + ...oes_git-annex_version_big_files__63__.mdwn | 5 + ..._0b44003c1dc53adb807298ae452f8004._comment | 8 + ..._ca40b67abd7bd36155d16d0396d7472c._comment | 14 + ..._32de3501feedce51b43ed9dcc399c7a9._comment | 15 + ..._8c65a7f8bda3c876971c2801fb6a76a1._comment | 8 + ...ly___95__read_only__95___source__41__.mdwn | 8 + ..._25572571debe2c91447b0ed952f45cb2._comment | 19 + ..._46c27b242c6df76f9df198bbd6f14030._comment | 8 + ..._2d9baeb81857b354931251a8b8a756e5._comment | 12 + ...s_migrate_ensure_data_integrity__63__.mdwn | 7 + ..._cef50b32c46f4406c6f918c5866ddc15._comment | 11 + ..._f389b924c8531b35fdf5dedd10fc8000._comment | 8 + ...sion_install_iStartSurf_malware__63__.mdwn | 3 + ..._0536085a1f969802a7e8607093eee97d._comment | 24 + ...py_files_to_exporttree__61__no_remote.mdwn | 5 + ..._9f8e1ac58e319540b3d9a5b9962e1f8f._comment | 8 + ..._f398f38ff29d2e681548b1640080dff3._comment | 8 + ..._53759e189b2f13b8ea1f48f3b6fb7fca._comment | 19 + ..._c3d9048668596f6be3975026ec1debc1._comment | 23 + ..._e9ea995c99785dd6dffba91ef0fceb02._comment | 12 + ...tand_how_to_delete__47__recover_files.mdwn | 25 + ..._b307bfb0b70d649897f411eb753bd50a._comment | 14 + ..._58a6a1476274b8c4feb3d43ecd998759._comment | 41 + ..._4b857f481db7b2437ac9f8137a8510e2._comment | 11 + ..._828db3bf2863d98c0b0fb4074aa7f066._comment | 33 + ..._cb2063d6a4e08a5c12bf3723d0fa74e0._comment | 8 + ..._1759bcd5708f591f91b9c410f6dc5c54._comment | 14 + ..._2a389f01eb5131042ea1e71a73c9787a._comment | 21 + ...39__t_understand_local_vs._known_keys.mdwn | 19 + ..._10749c0d76e824217dd1ff8c8a6e42a5._comment | 10 + ..._db9f1b6d9638c2b0a7e241c2727e8cfb._comment | 13 + ...39__t_understand_sync_with_ssh_remote.mdwn | 54 + ..._be10d6b564e130f4a516d438831681d1._comment | 18 + ...p__47__move_unused_files_older_than_x.mdwn | 1 + ..._626facc640a9018a04f203d10aff7676._comment | 22 + ...d_objects_keeping___35__n_more_recent.mdwn | 18 + ..._2e16a4c08568ea37c16f4ea74203ae12._comment | 29 + doc/forum/Drop_with_assistant.mdwn | 5 + ..._048f5a31c549afb19b76a65bddd0cd24._comment | 13 + ..._527d7b6a8efa85b904111f179912d926._comment | 8 + ..._c50857506869bb1cd306b66acf37fba8._comment | 14 + ..._1ea37445d5eb96c3efa182e88e07b867._comment | 8 + ..._c08908ea5232cbe067c73ecd12d0e218._comment | 10 + ..._015134228cb865f97326fbb7193636ea._comment | 8 + ..._950759930667588f21659cd6d7065fbb._comment | 17 + ..._773e540e46adc43487323e8d38ceb2d9._comment | 23 + ..._d85d120d7219ea6c179c2619a17bdae9._comment | 15 + doc/forum/Dropping_checksum_from_URL_key.mdwn | 9 + ..._ce952a9db35d398a9e67adcd7f927d59._comment | 17 + ..._bb458296d464c2025f96502338f34000._comment | 16 + ..._files_in_an_annex.thin_v7_repository.mdwn | 16 + ..._9f2dcdfe6a689902f348211db6b7a758._comment | 15 + ...ate_entries_in_location_tracking_logs.mdwn | 25 + ..._3afb76397519b8ca8b55958a344f1871._comment | 10 + ..._6f327444772ee1e660a12e7442162df5._comment | 10 + doc/forum/Duplicate_files_not_detected.mdwn | 1 + ..._d49a34aae5decafed804f45a573c0027._comment | 8 + ..._c1afe87e818ac3eea66d5216bb15d727._comment | 10 + ..._c07b9634f571b5f12665b368c0ad3c80._comment | 8 + ...Editing_Metadata_in_your___36__EDITOR.mdwn | 26 + ...Editing_files_in_metadata_driven_view.mdwn | 3 + ..._acb4656e0dafc5689c84d4cca760bafa._comment | 22 + .../Effectively_replicating_backup_files.mdwn | 25 + ..._b1ab0da82db076c5244b0dcc95282ddd._comment | 14 + ..._472ab9c973b475f7f3ce7e3934f94281._comment | 19 + ..._826493bd59b81786c1f6a56f1c438004._comment | 10 + ...y_move_files_from_one_repo_to_another.mdwn | 26 + ..._191ca3a984412be76f64aa31b55b8d50._comment | 7 + ..._0cc04ef5e511241a5152a0702f943538._comment | 8 + ..._be029c0880e76d6b5672eed394140438._comment | 22 + ..._c2f4b10fa1789a4966aed298e00dbc75._comment | 8 + ..._65bbee3637d09bb6078ec7b118852fd8._comment | 10 + ..._45c1788b39953cd7237f014fa94e086b._comment | 8 + ..._23b3a1a1412866fa06e736f0f5bab583._comment | 9 + ..._fba097cd3187d1d8b7517594d875c373._comment | 14 + ..._b8f81522e519bab56036cc8628f29ce9._comment | 12 + ..._3e5f41a5cce30c21cea629009f91dd31._comment | 14 + .../Encrypted_Content_Remote_Daemon_.mdwn | 1 + ..._96f63e509e23c081c48302274e21db78._comment | 10 + ..._acd0ffdc3f5079265858073c2af81557._comment | 8 + ...ypted_ssh_remote__44___synced_folders.mdwn | 87 + ..._7b9b4ef614c90e0b222d24678d1b9026._comment | 10 + .../Ensure_all_versions_are_on_remotes.mdwn | 36 + ..._b8b674dc99999dcdb5a435f34b96c1ea._comment | 10 + ..._ad5f1f0b98032361e64bb7275d23e97c._comment | 20 + ..._d9bd5f9ef8c8a8cc08cc39396f0a6f67._comment | 10 + ..._8d07699b69676d9afd53744f267bb615._comment | 116 + ..._2202121e5311b56b1d73f9bb1503c5e3._comment | 12 + doc/forum/Equivalent_to_git_bundle__63__.mdwn | 10 + ..._e42936a9bc36fbee69f48e32df303dee._comment | 9 + ..._2b8b5c237d8572fdd27202f3502bea96._comment | 13 + .../Error__58___failed_to_push_some_refs.mdwn | 25 + .../Error_adding_ssh_remote_in_assistant.mdwn | 17 + ..._eecc0660db4083cc91c5330587f74610._comment | 8 + ..._3e6aad22e8020b12ff7ef914b75281d1._comment | 8 + ..._3ea529e16502071fc0980c6d5c60a036._comment | 8 + ..._on_creation_of_gcrypt_special_remote.mdwn | 28 + ..._2a69ce8607f97aabdf3cc402c1091d7a._comment | 30 + ..._a112f0bc1a30fa41504e3f52f679053b._comment | 11 + ..._does_a_v5_to_v7_upgrade_entail__63__.mdwn | 3 + ..._04a920f5b86a203d050ee4a9a0f8a33d._comment | 35 + ..._b43fda0acca8cc9027f36f51b9489aa3._comment | 22 + ..._380240e562358efb25a8acb65b5d4cc7._comment | 8 + ..._752b1c3e2394ef432c1e21a5639648be._comment | 10 + ..._e5d4ba2bb9f78380dfa94446cb1f4b54._comment | 8 + ..._cec779ef77336ea30728815739be78b6._comment | 8 + ..._e349403ef92a96a08195a7dd1dbf9561._comment | 8 + ..._bca507381436a8282645a931aa39fb20._comment | 10 + ..._specific_files_from_a_special_remote.mdwn | 3 + ..._d5a9f3308e09a9b9460014904d23ef48._comment | 18 + ..._671790686bd4724aadcadd8d8aad2c98._comment | 8 + ...hat_aren__39__t_locally_present__63__.mdwn | 7 + ..._278b70c7bd7397e634df4a257fb604f9._comment | 8 + ...4___even_if_not_in_preferred_contents.mdwn | 3 + ..._8276c225867733e7a79ba47be2447b1e._comment | 8 + ..._dc1e718d0043686987abc9526a459dc3._comment | 10 + ...it-annex_branch_but_not_master_branch.mdwn | 1 + ..._9a909e3d89061adacbd8ed370520250c._comment | 9 + ..._0dd489b264374b7b1065b89e1ff7561b._comment | 8 + ...xtra___38___missing_folders_on_remote.mdwn | 9 + doc/forum/Failed_to_push_on_git-lfs.mdwn | 23 + ..._f83dbcfdd09de3ce908c0d4a9daef458._comment | 13 + ..._52051b251bea7a5ed452769d0320602a._comment | 9 + ..._get_files_from_rclone_special_remote.mdwn | 104 + ..._4a762c369e4049bdedecca4a32242f18._comment | 30 + ..._cfb6be6c940350dbed6cc9e98ee1d633._comment | 10 + ..._58282be918139a3154938850793a80fb._comment | 11 + ..._1360ee3e3b711990f59e0320e7892cd2._comment | 10 + ...et_file_from_s3._How_to_recover__63__.mdwn | 16 + ..._c769dcbb9d5f082d54b8a091a44c9de4._comment | 21 + ..._50e35159f7e670ca6b7280121821b494._comment | 21 + ..._471ff0cdb00b311f2a3d801b04e9edef._comment | 26 + ..._e0f80d306a2b4d19d65d268cde25ac31._comment | 7 + ..._f648049cc1a82f183bbc7dc84cd170e2._comment | 8 + ..._c2686480c6c77ea7297f739780ea6d3b._comment | 11 + ..._6f3d056e449366746aef4f45673515d5._comment | 12 + ..._785e012f478631f4b69fefbd0394f1b8._comment | 9 + ..._e021705e0fae6645a0b6459757260084._comment | 18 + doc/forum/Fast_cloning_a_repo_initially.mdwn | 3 + ..._0db0caafe30dd1b6f15fb1679dec8f9f._comment | 10 + ..._e17abc209c2b3ba20158be76801ce04a._comment | 8 + ...size_when_adding_files_to_URL_backend.mdwn | 10 + ..._9d2fa7d796fd40718d0df9feeea654aa._comment | 20 + ...st__58___add_filename_to_hash_objects.mdwn | 6 + ..._73dc0a9cad486cf2d34faf064c6193b1._comment | 10 + ..._f818b3ecfeb1d1dd83df4668c061718a._comment | 8 + ...quiet_for_fsck__44___import__44___etc.mdwn | 9 + ..._cbcc3df01a346c6ee6720c90421ee023._comment | 8 + ...t__58___Multiple_concurrent_transfers.mdwn | 19 + ..._aa666349e9b524fd5394a259ad622c3b._comment | 8 + ...nnex_copy_--auto_does_the_right_thing.mdwn | 5 + ..._bbac7d0810a79eb1f42a01e1b31d5c4c._comment | 12 + ...pp_support_for_centralized_bare_repos.mdwn | 1 + ..._0522e3df450efb6b2d264857e07997dc._comment | 8 + ..._e0fc126b0d500d41a563b076a4f6ed6d._comment | 8 + .../File_downloaded_again_and_again.mdwn | 53 + ..._666b907935d467d5d7c0e57831d76631._comment | 28 + doc/forum/File_history.mdwn | 10 + ..._6c15cdf71b99ae3bf8fd5de489a7d3ee._comment | 10 + ..._ebe8025d4769d22cafa81ad0f2ae969a._comment | 8 + ..._16aae9a5fdd5cfed816f5cdd96adf7ba._comment | 10 + ..._1b72655106507f111192231ab62cbe7e._comment | 8 + ..._72d1b2ff307df69add474a288f92d8c3._comment | 19 + ...ill_symlinked_after_git_annex_unannex.mdwn | 22 + ..._55f1a5f16fe2f8a85034a85c5450bad2._comment | 12 + ...too_big_for_file_system_of_git_remote.mdwn | 1 + ..._937df2f51506c42ddd2345735efd8f21._comment | 12 + ...4___xfs__44___you_name_it__41____63__.mdwn | 74 + ..._fcf7f132f771de28553bd20f4fb014cb._comment | 8 + ...kaging_on_downloads.kitenet.net__63__.mdwn | 11 + ..._0d89d709e799442d77b0fc92f97fc3ae._comment | 7 + ..._cccbc5c1d9b010ae38a8b5cfd9056cfe._comment | 11 + ...that_lack_a_certain_field_in_metadata.mdwn | 5 + ..._476e52563ccd3ad1b43e3a2da4dfaa82._comment | 10 + .../Find_out_if_file_is_in_annex__63__.mdwn | 8 + ..._3936ff53d5c9f7e5795b15beadf437c7._comment | 9 + .../Find_unlocked__47__locked_files.mdwn | 23 + ..._a34ce29b644c80789bf8cbfd575ffe1a._comment | 8 + ..._85d90a43142d087e7b6183dd9f8be8cf._comment | 11 + ...ut_why_file_is_not_being_auto-dropped.mdwn | 22 + ..._d3881fe94e3588c90e74c6bb3db2783c._comment | 20 + ...t_at_an_OSX_launcher___40__.app__41__.mdwn | 3 + ..._97c261b9080c5ecc5424683066bbe05b._comment | 14 + ..._ae45f9703b635c235409682cf252d36c._comment | 8 + ..._066ca31a2e5dfe55a58092ba85231c7c._comment | 10 + ..._a0a9f7f44cadb8036fcddfc21bb0781f._comment | 10 + ..._92240b3f8629f1f2bbe1829700082a79._comment | 10 + doc/forum/Fix_duplicate_UUID.mdwn | 5 + ..._1186caf5aa6830c2412f8584a43d8d86._comment | 18 + ..._b0f06b58ef63dbb770773f28dfa1a29d._comment | 9 + ..._525b2838985392eb65e705ad354d02c4._comment | 8 + ..._ce58bf264e63a07a214956436d96f1a5._comment | 7 + ...ong_rsync_with_git_annex_reinit__63__.mdwn | 38 + ..._26cb6d46a408c1002aa2fbc6618242f3._comment | 11 + ..._14ddf5ddf2b85c9d5ed5ca070744f1fe._comment | 10 + doc/forum/Fixing_up_corrupt_annexes.mdwn | 10 + ..._cea21f96bcfb56aaab7ea03c1c804d2d._comment | 7 + ..._5cdd2fcfa61b3f6255e5ad63a3ab00ce._comment | 8 + ...ve_disrupted_the_file_structure__63__.mdwn | 20 + ...Forcing_offline_copies_seem_available.mdwn | 3 + ..._75e8597a24c925981edf83c517d5a799._comment | 32 + ..._7d0e219628ad19093c6b6410d24c5f9a._comment | 8 + ..._3d57e187679b36be62f3918eb996c3df._comment | 10 + ...e_repo_to_contain_a_copy_of_all_files.mdwn | 1 + ..._702b1b94c735f1b9cde16daa77a80c12._comment | 8 + ..._3df7fcbcd482bb9377ead238b314995b._comment | 8 + ...t_about_accidentally_added_file__63__.mdwn | 5 + ..._a7e6b1f6abe4caf8bd93be879c960cec._comment | 8 + ..._6beeec3a8bc9697481aa08738902203a._comment | 10 + ..._6bf46255cd212942d8db8b01c95443b2._comment | 8 + ..._2183fee162740918e5f67f9bd460b18d._comment | 8 + ..._2b248738c6fb871875cf1aa7413198cc._comment | 12 + ..._1fcfcb5dca366d8fd610c03654e15704._comment | 12 + ..._a982dd633e7f29ec80c8e4362ebc064a._comment | 15 + ..._ed88d2b82fc3283540caf3a255a88188._comment | 14 + ..._23cc8cec09f9e8fb56c0cb81c9b361bc._comment | 8 + doc/forum/Fsck_by_refs_or_keys__63__.mdwn | 5 + ..._345daa76cdd13538054e886a755bf29d._comment | 14 + ..._1d74ad47cf3bef9bcc0ccdff4ccb69b9._comment | 7 + ..._b00a9522bb6dd91fed5d1c790153a230._comment | 9 + ...tore_from_an_encrypted_special_remote.mdwn | 3 + ..._f3a7a766ae1fe8e586cd67148761f156._comment | 9 + doc/forum/Full_workflow_guide.mdwn | 16 + ..._14664efebb1218a1449577eaa4653a77._comment | 45 + ...very_with_an_encrypted_special_remote.mdwn | 9 + ..._2eb2f05477a86f1352e734d163301ffa._comment | 44 + ..._c2f7542ac9a4c423c5ae06c16d42a24f._comment | 17 + ..._9a9da0ad1538ba59e76a5c4f9fc7fcf7._comment | 18 + ..._27901f1c2c5de211f697972d9b21c104._comment | 11 + ..._56994d9252e8651b3f33044f5c8599b3._comment | 7 + ..._5aecb8c58d501e929e746d5536032c81._comment | 13 + ..._ab0b660e5a3d7fc7d3d3a4b460022da5._comment | 139 + ..._b96077c98792997cdf344725374abb5c._comment | 27 + ..._e9597062bbc530920343e5159a7b7ea1._comment | 10 + ..._756aeeee7be8cb67c5cc9dfa6ea7b82c._comment | 25 + ...cal_sensitive_hashing___40__LSH__41__.mdwn | 9 + ..._29f2396e04251d266b68ba68b8b32215._comment | 11 + doc/forum/GIT__95__SSH.mdwn | 3 + ..._c2e827eeac7524845cad42671d77af95._comment | 14 + doc/forum/GPG_passphrase_handling.mdwn | 78 + ..._11ba130e8bea6698858d0a1a5b01830f._comment | 15 + ..._ef9d58d15b7bbe0b3c7140bb01d73a31._comment | 15 + ..._84eb129c8483b87b3ae6ecaf8b4a8309._comment | 12 + ..._8724297f6d7ac140ab395a940bab0d7d._comment | 8 + doc/forum/General_questions_and_help.mdwn | 9 + ..._adfef0ecc191dd2ad85b4e0f6a4df67d._comment | 10 + ..._972231014d3da4fcd8fb2a77d76e7b77._comment | 10 + ..._1a071d4a7e62701c47d8531c4faa9dcb._comment | 10 + ..._51b8cd9f1b8b53bcf880ea56d1858f23._comment | 13 + ..._0105e241e13f9469bf749735cb9f3e03._comment | 10 + ...rating_a_Temp_View_of_Available_Files.mdwn | 1 + ..._to_automatically_drop_with_assistant.mdwn | 88 + ..._ead4b5b7ec0d085d4fa87fb4e29c4d55._comment | 49 + ..._835dba9de7a5eea868635dc793d4e75b._comment | 15 + ..._553542a4a2b2530863a006a1afe91637._comment | 19 + ..._4540a15672f9b48b0f9310c97f1a0b86._comment | 11 + ...ithout_persistent_configuration__63__.mdwn | 83 + ..._0ae170680841f86279b95febaafa0440._comment | 8 + ..._1f46bcb05d7866af35779830ceb632e2._comment | 9 + ..._177db535bf756cfb4c231a41cd02e137._comment | 8 + ..._cb4f95866113ac6f689ed9f219a1d8e1._comment | 12 + ..._748a794bf4cda242923177352e34976c._comment | 24 + ..._994e3e64184a020f9afe21cd9ea34b38._comment | 10 + ..._b215a9ab1c37688cc22dbe4ec63347ad._comment | 8 + ..._15de9ba04480697bdf4086cdf91226e4._comment | 13 + ..._f642798f8d1c753dca3aad67d0bd9ace._comment | 9 + ..._018442fba01a2aac43531f2eaecc1117._comment | 14 + ..._577c3dfc1f77ad0821ed8fcbbac3772c._comment | 9 + ..._7a3a21b3995f79710ebb5a8428709f66._comment | 8 + ..._95fe371e2e5083c8dc06b24b2f8d87e1._comment | 68 + ..._ae600abfb5a82f69981f59e9de55c056._comment | 11 + ..._d97c211a0e87212ffd2617a96263faa2._comment | 107 + ...4___that_do_not_exist_in_repository_B.mdwn | 17 + ..._c09c45c64f75bd30deaae9c8d8633236._comment | 8 + ...ecent_git-annex_version_with_anaconda.mdwn | 1 + ..._2987d3516235e90621335d055426a808._comment | 11 + ..._3046a4711853c88ba7f763fb04b73a5a._comment | 9 + ..._ece2ad657025186c267aeb20405ea1e5._comment | 8 + ..._f54f3ef05da471ff4d370511e3629e05._comment | 8 + ..._59365f2d382103f1f8c30d4c52085fd6._comment | 15 + ...peration___40__handle_is_closed__41__.mdwn | 13 + ..._9ff60145d7dfb6785bb11f2a23040948._comment | 19 + ..._7c88ebd9d7cdf4a009aa2580cc55787d._comment | 20 + ..._976cb63e97774859023123536bdc9d99._comment | 8 + doc/forum/Getting_metadata.mdwn | 30 + ..._24bef8f59f370897d6fd6b2b43ed1f39._comment | 13 + doc/forum/Getting_started_with_Amazon_S3.mdwn | 28 + ..._f50883133d5d4903cc95c0dcaa52d052._comment | 10 + ..._e90aa3259d9a12cd67daa27d42d69ab5._comment | 8 + ..._c3adce7c0f29e71ed9dd07103ede2c1a._comment | 8 + ...atus_of_a_remotely_changed_annex_file.mdwn | 75 + ..._e323c21d27bb0946993ba1438429c457._comment | 14 + ...roid_sync_files_are_missing_on_Linuxx.mdwn | 4 + ..._72d7811990e78fba0b7fc2e1c7ee515f._comment | 15 + ..._cfb7139958ed24c1c64f8b133c99f336._comment | 11 + doc/forum/Git-Annex_with_Asustor_NAS.mdwn | 4 + ..._44445200e5b716caeec225972a5d5dce._comment | 10 + ...ex_and_Microsoft_Office_files_on_OS_X.mdwn | 1 + ..._71fdd5e7061d6deb357290057804cc27._comment | 8 + ..._files_and_older_versions_saved__63__.mdwn | 9 + ..._645af86feb8506c3ea2134badac68e0b._comment | 7 + ..._d9acd44c00676d814e19613d6fd276a2._comment | 13 + ..._45928886d1ae4a76e2daefb355967729._comment | 19 + ..._1249bf921ea7709b4f7ae25e613bf60a._comment | 11 + ..._616cb76a510fa32c2aa48c25d24c6044._comment | 10 + ..._100fc29a95923e5ef92eaf87d76bbc6f._comment | 37 + ..._9b19ae8e8c0c70e3827c9f362c1c1dea._comment | 9 + ..._0c1c76bb082c108f3074b725bcc272c9._comment | 9 + ..._1d7c8c8c5b34cbc7166f8d4d52b91761._comment | 8 + ..._2bfb2eaf1a72e0822341cfeba9058aa7._comment | 13 + ...le__40__s__41___location__40__s__41__.mdwn | 6 + ..._5baffd4d6994bbcb23614b17777a0ffe._comment | 10 + ...es__44___how_can_I_recover_them__63__.mdwn | 19 + ..._65b41a6eb28261e04e4fe8732f97a1f1._comment | 9 + ..._200a869f335909566b9ddab3032fd5a2._comment | 10 + doc/forum/Git-annex_fsck_backend_warning.mdwn | 42 + ..._a504439397db6661788d916cb7c96da1._comment | 30 + ..._a5415299d07283f393319b37ba9335ff._comment | 7 + ..._300bbfdd90d18619e88310de5a128ef0._comment | 8 + .../Git-annex_init_gets_stuck_on_exFAT.mdwn | 30 + ..._48da28dbc7da82d4e06fd3ce7962dfc5._comment | 16 + ...it-annex_link_to_different_file_names.mdwn | 41 + ..._17ab85276bcf495a656c7091753c086f._comment | 60 + ...slow._Why__63___How_to_fix_this__63__.mdwn | 35 + ..._e102345b520423eafb4c202a0d6e276d._comment | 19 + ..._dd1cce225e4d4791b37dad5480936f76._comment | 11 + ..._56c132612785da00b09f088c75f903a7._comment | 8 + ..._b92198e15a0d6154c951cb731eca828a._comment | 13 + ...32_devices_not_a_valid_use_case__63__.mdwn | 5 + ..._ee72caf2aeab4a8a2818f87653dc1cd2._comment | 15 + ..._3be98f57bcb2ba838046105276d1afd4._comment | 19 + ..._b17f2361b18420c950eef25d3fff8841._comment | 13 + ..._a8a79961d97fe773c1855632b4772c5b._comment | 11 + ..._da422adacdeb36163186a38f1aa6c06b._comment | 9 + ..._6f16af7d1668320d1b80472c76f892fb._comment | 9 + ..._2d9460736189575a8af99c50557a8e50._comment | 14 + .../GitBlit_as_a_centralized_repository.mdwn | 2 + ..._06bedf5fbac45415e0cc81f41b25a5a0._comment | 8 + ...oses_Files_and_Gives_Dangling_Symlink.mdwn | 9 + ..._7b3cb1d52767b89cf46d57005bf57b06._comment | 11 + ..._52ad16f63ec47b34485a0d0f4db9e2c8._comment | 13 + ..._a60bc9a6e766c0f29835c088c0863cf5._comment | 8 + ..._c8088fd093312685f130af07e5ca2e22._comment | 11 + ...stant__58___How_to_add_a_remote__63__.mdwn | 11 + ..._d0a3d0090928790d5a05e9f8e5f05320._comment | 12 + ...39__t_backup_files_to_removable_drive.mdwn | 3 + ..._a1d1ae9488924b08682b355aff51130d._comment | 17 + ..._6649077583bc14730a08aaaca7ccb62e._comment | 8 + ..._f359d9b9356de7ee10b9e725a011cc43._comment | 8 + doc/forum/Git_Annex_Sync_Delinks_Files.mdwn | 11 + ..._8b03707777a9d8e38715cb77d2a0addc._comment | 12 + ..._a625e7d88e321532ace103548b31b67b._comment | 18 + ..._5278164dab570755ed58afe466dfad42._comment | 12 + ..._e43ede0bdc20de9aa10ab6ce387d8582._comment | 92 + ..._dc71987f0e19f04a920561201f9552b4._comment | 15 + ..._257a89f81858659c4dac4d116e7cf0a3._comment | 32 + doc/forum/Git_Annex_Transfer_Protocols.mdwn | 9 + ..._a870ec991078c95a6bb683d6962ab56e._comment | 8 + ..._71419376ef50a679ea8f0f9e16991c17._comment | 8 + ..._fea43664a500111ca99f4043e0dadb14._comment | 8 + ..._56fb2dab1d4030c9820be32b495afdf0._comment | 8 + ..._a6ec9c5a4a3c0bac1df87f1df9be140b._comment | 8 + ..._1678452fb7114aeabcf0cc3d5f6c69b0._comment | 8 + ...Git_Annex_not_dropping_unused_content.mdwn | 9 + ..._da47b6af512b19cba077499f41455189._comment | 23 + .../Git_Annex_shirts_at_hellotux.com.mdwn | 3 + ..._fa72689070c39054d166d32fa144fabc._comment | 10 + doc/forum/Git_LFS_lock_feature.mdwn | 15 + ..._8f5878db6dd2a21893cc6b5a1200b010._comment | 16 + ...__44___windows_and_remote_linux_issue.mdwn | 1 + ..._c9239f9c67b2441ab0e1ac42c53db531._comment | 9 + ...t_annex___39__corrupting__39___itself.mdwn | 34 + ..._bcf50a215e2f8771e098aadfff4c300c._comment | 43 + ..._75f957e7be6c1ad8936c0a2a5374db3e._comment | 20 + ..._ab062b1df3b55fd49852a6220c98249e._comment | 10 + ..._45974f60a81ed2d00b87ffb1a7963c6f._comment | 8 + ..._t_find_rsync_nor_git-annex_on_server.mdwn | 14 + ..._75c599cc26e7d3645f69173861d4f8be._comment | 9 + ..._496e2f3a61b609ebb28ab55e5c30022b._comment | 12 + ..._e202a6dd2803f733bd30ec8b6ddbe7bf._comment | 19 + .../Git_annex_assistant_in_command_line.mdwn | 2 + ..._ce05226307ade8db90ada2dbf290bd58._comment | 10 + doc/forum/Git_annex_assistant_on_EC2.mdwn | 5 + ..._bbdb4611373117a2176c225378110a05._comment | 8 + ..._614ed11f7134137d6376d36a61c293f5._comment | 8 + doc/forum/Git_annex_drop.mdwn | 4 + ..._541399d5fff0db0627c786f5e056fabb._comment | 8 + ..._423ffd4abca9dbb8dba8ce887dee5faf._comment | 17 + doc/forum/Git_annex_hangs.mdwn | 2 + ..._ce5355b358f1acc63270331f3749fdcd._comment | 25 + ..._e0b4616c25405fa3c496f7e85800ac43._comment | 9 + ..._053666d256e26803b911d68622257cd5._comment | 11 + ..._f28528c9b9766fe8e2d344e5f27ade65._comment | 19 + ..._e6b854d4625ae3015aea9c5de71a28ef._comment | 8 + ..._4f848771e60c38321a97361b0d1b33dd._comment | 8 + ..._a07abdd1dc21a69ad6be0526edaeffc1._comment | 13 + ..._2ba5992c32753ed03ddd5c12264e9acf._comment | 8 + ..._5fd749f92343079b3916a4d32ddf39c7._comment | 12 + ..._4abe6aa966feea4e1881f6a2fbe7a007._comment | 8 + ..._f3ea42dc6699275143ba44e7f57e7d5e._comment | 15 + ..._1bad17001364d192e0d9affe5f0ea554._comment | 12 + ..._07ae4582a4403b4f0185dbc1830642ad._comment | 54 + ...ays_showing_annexed_files_as_modified.mdwn | 33 + ..._b6e8f634187d1f5840641633cb82301a._comment | 7 + ..._ab24dacf101a1a7e33e5976f72f6fe05._comment | 25 + ..._cade18a9487c583329249c2d3e72ca46._comment | 7 + ..._1d2281f79cd0c2a1a3599cae42df0187._comment | 8 + ..._5f2f2275ee9de47273671a8009217fb9._comment | 10 + ..._54155343eef8c6f95574dffb3910fc61._comment | 46 + ..._cbf7035b218566a9fa1cb656290a9cf0._comment | 9 + ...ex_syncing_speed__44___possible__63__.mdwn | 21 + ..._8aa224b3016dc38e4cea8ee1865a3ab6._comment | 12 + ...__58___smudgeToFile_and_cleanFromFile.mdwn | 7 + ..._f21dc5255ce986ef0317503ebd40b4f5._comment | 27 + ..._4ded2a4b866102450ef96c76b7be94fe._comment | 15 + ..._____40__bitbucket__44___github__41__.mdwn | 1 + ..._8a6de753ac0aa56f470b2aefca628388._comment | 10 + doc/forum/Git_repos_in_git_annex__63__.mdwn | 7 + ..._8aaa0d83e8fcd5997f6b0097f3b21622._comment | 14 + ..._8546341a561a5f55216c2f437f8ec0c2._comment | 32 + ..._88e37911a0280d817559b2d51ddb1d4e._comment | 10 + .../Git_repositories_in_the_annex__63__.mdwn | 5 + .../Github_pull_request_with_git-annex.mdwn | 11 + ..._03023d2fba47e84d03573d996e8366cf._comment | 22 + doc/forum/Gitolite_problems.mdwn | 11 + ..._3a41f9b6bddc060b1fa9e35b9ce8b55f._comment | 10 + ..._ef156bf7a1e17496c5fc1f592d45f2ad._comment | 9 + doc/forum/HTTP_uploads.mdwn | 133 + ..._e22213816c53e6e3555532c452eceb49._comment | 41 + ..._d99641f1908073724f45dc3b170f3794._comment | 11 + .../Handling_a_large_number_of_files.mdwn | 3 + ..._33d2e19fbfdf5a0bfb7b4fbc840824a2._comment | 13 + ..._a46bde96e3be5a105eb1c87bf637f8b6._comment | 7 + ..._c6564d8cfc217c5b70b2a7a8fe60039b._comment | 9 + ..._f9e25d63417d0354de158c47235cb3be._comment | 20 + ...ndling_merge_conflicts_in_direct_mode.mdwn | 27 + ..._7046393b0c4329466a0d6803b718f786._comment | 14 + ...ndling_permissions_in_a_shared_folder.mdwn | 17 + ..._220b33912339f06fbc9f6c9fbe1a4756._comment | 11 + ..._f0d010731ad51bf8512e5ff93864fb53._comment | 8 + ..._9ceff336ab112ada10db1f22436dee43._comment | 8 + ..._9ce6d042fc1826d814f8362ae2716251._comment | 9 + ...ial_remote_when_content_changes__63__.mdwn | 19 + ..._05ee6a1b1943ef3c90634e52233bde1c._comment | 12 + ..._48d82e391812d8ec0d4e6562d0607fe7._comment | 10 + ...stead_of_symlinks_in_locked+thin_mode.mdwn | 25 + ..._ae978190d2d4fc1c4cdadc8256e6ca3d._comment | 27 + ..._6498a44801996cc5a412558c75f6157e._comment | 44 + ..._4bd03153c8ad61596ba55b719ad287ee._comment | 12 + .../Hashes_instead_of_content_in_files.mdwn | 1 + ..._800d875c0d980614792207641cedb3ea._comment | 11 + ..._a111296eecf7d69ff30f6a82e9f1e6d4._comment | 7 + ..._574964b83563df3afea9049754b1cfa2._comment | 7 + ..._67733580e8f8806b5036406e6712b6a1._comment | 8 + doc/forum/Help_Windows_walkthrough.mdwn | 177 + ..._5fc22393a1b28235eabb2871ad83d0a7._comment | 12 + doc/forum/Help_fixing_S3_mistake.mdwn | 7 + ..._dc60d08da4c0b90705b0b88b4c834f05._comment | 9 + ..._f105714b9bac7f45fdcb9a47e77255ac._comment | 24 + ..._a00bca3b6b0d7b6c20ca1ca749c93469._comment | 16 + ..._34333d0f3eeaf2929089535632759ba1._comment | 11 + ..._7060bcd3424caab3570dcc7cbd3df93e._comment | 12 + doc/forum/Help_on_my_usecase.mdwn | 22 + ..._a35b35c7927640f21d47c3df4f91dabb._comment | 12 + ...lp_with_assistant_and_Adobe_Lightroom.mdwn | 3 + ..._3adf9f5c60558b3c70a8aa041dbbe966._comment | 13 + doc/forum/Help_with_get.mdwn | 1 + ..._439c7562d94a969fd841cc44628abedd._comment | 9 + ..._137f89ea9c381cdbf57da78308a46078._comment | 8 + ..._f523e44daca53b3d99350e0d3f7a8874._comment | 16 + ..._863d03a8e52335d8a210320d8a02c553._comment | 15 + ..._92e48d21fd83c0f7e69a5bb7b4c4f4ee._comment | 8 + ...Help_with_git-annex_and_controlmaster.mdwn | 42 + ..._2742e65d9faebab80bc5fa0877ef7d29._comment | 8 + ..._5e57d563d351cc8c850c9cc4726ad23b._comment | 23 + ..._4fe0973f6b7f912e2e4163ebf5dfc5d4._comment | 8 + ..._51312d1662d0794e4258551c59877434._comment | 10 + ..._0b4e2314c23df5eda18661c245f9f057._comment | 11 + .../Help_with_syncing_file_contents.mdwn | 68 + ..._7ec34de3140983739080115c82966bf5._comment | 18 + ..._7dba58d3c62d6f64a270298e4e4329a4._comment | 10 + ..._b26cfa20dc81517d93e760f4809bdc24._comment | 12 + doc/forum/HowTo_Conflict_Resolution.mdwn | 66 + ..._81c06a0590ee828749b8d07e008028bb._comment | 19 + ..._e0ec78f09e5aba83ad3a7252695e4d96._comment | 16 + ..._495aea6e73fd7a2d7a387f539496ac3a._comment | 16 + ..._b209d4527bec4620e1014fe759cbdde7._comment | 14 + ..._446186626e5b2d08d078e3b48be06bfa._comment | 9 + ..._83cafddb480fa9e5b5d87d27b994b2bc._comment | 7 + ...ow_To_Permanently_Delete_a_File__63__.mdwn | 13 + ..._7f2cefb0991789be5a960eb9c0a9df3f._comment | 22 + ..._d13b456c5b3990082c16e78a50f5db91._comment | 14 + ..._854c17ff8cb38486c4bef618d1e94919._comment | 24 + ..._9572ad02bbf6845b1ab6d7c612c12a2a._comment | 19 + ..._9c28faabb7d7bd1e83d551e2938d3532._comment | 14 + ...le_handling_the_v8_repo_upgrade__63__.mdwn | 13 + ..._30fb300ec5dbdb166f2bb979c6f2ee78._comment | 8 + ..._23cfa4b9abe96e4477f06c5271b706b2._comment | 23 + ..._b05a8c63d2594290769aeeaabc91f491._comment | 11 + ..._and_still_be_reliable_and_fast__63__.mdwn | 8 + ..._99e7e1b178bbb17fffea0892538d4049._comment | 9 + ..._6a7a3c372599eed7c52d5f54e5287577._comment | 18 + ..._cc62f722b3e1db7d75d6976ef3854f94._comment | 7 + ..._given_file_is___34__used__34____63__.mdwn | 25 + ..._30217e593a04cefa30619025d0a58108._comment | 15 + ..._6793035e1c0fb329b3094bf66a982fa3._comment | 18 + ..._7cc944d96f4620e98fe22a554684ad22._comment | 12 + ..._8323e9160d81a4a65f2ca545c4469869._comment | 8 + ..._a74ece6acb2184c4990b434d7357ea00._comment | 7 + ...can_I_recover_from_misadventure__63__.mdwn | 10 + ..._1e8ce32e1e8adf32acf7af28c7ab0d0b._comment | 10 + ..._94f5435529802ea9d1980ee07025c6eb._comment | 36 + ..._484fc154c68ba59939aae4452c663ce6._comment | 18 + ...in_directory_that_have_content__63___.mdwn | 6 + ..._e897d8fc10474cf865279dc22f22ecb7._comment | 10 + ..._3af326205db6ee04f2a8644baa1dd566._comment | 8 + ...ackup_my_data_to_blue_ray_disks__63__.mdwn | 1 + ..._ea2f6ca0768c55fa136606cf091471cd._comment | 25 + ..._d79387905af9f8dce77f9aa85f2d6a03._comment | 8 + ..._Android_git-annex_installation__63__.mdwn | 1 + ..._e14757c2c106770c2d7069ace4987b3b._comment | 8 + ...ow_do_I_do_with_.gitrefs__47_____63__.mdwn | 1 + ..._5e235af2ea13fd4f6a226c842f69965e._comment | 8 + ..._50d0c643537175b514d5eae604fb5bea._comment | 51 + ..._3d342c32b14c7edbece596ba970a8415._comment | 10 + ...dropunused_with_an_rsync_remote__63__.mdwn | 3 + ..._8db3cb5348b845eb99c2c829957db9ea._comment | 8 + ..._6cc909d9d74bc1ccb8a7b0d7d234c7cd._comment | 10 + ..._f24d678e4192a70322aa164ed9b71fc8._comment | 8 + ..._9233decd0aaf9211447f36e0d9346445._comment | 15 + ..._e1deb110f752e5495d5c77ec444abac5._comment | 8 + ..._get_rid_of_a_wrong_remote_uuid__63__.mdwn | 16 + ..._b3c215cedba51fb47992ef10c60d6acc._comment | 8 + ..._85415e1fceb737919cc1cd9f37242458._comment | 10 + ..._fb3a591dc60182f7922fc2b5c24f50f1._comment | 11 + ..._aed0be32e579c7a39c63aa7e3ec5f67b._comment | 29 + ..._0c9a6c8a92d6c6e04ae3a8349b799c60._comment | 22 + ..._not_present_in_the_local_annex__63__.mdwn | 2 + ..._005e9254a1239164df34ab5fbf2115a8._comment | 27 + ..._f376604560c36a0aa5afa4619797b396._comment | 9 + ..._1ed5e10e51078a0aa7e6968ef48687a3._comment | 10 + ...w_do_I_list_links_with_0_copies__63__.mdwn | 5 + ..._ee222f0e227f1c65f84f73af399239e5._comment | 10 + ..._1528b3c96d6ad5637c2fdda33057c12f._comment | 10 + ..._e629a5393e56755a42581be9f6942adb._comment | 12 + ..._61a441f83ef690da8e799b0503526c47._comment | 14 + ..._66def7cfeef20866eb3caced831b0d3e._comment | 10 + ...ack_to_specific_commit_with_git_annex.mdwn | 8 + ..._ab8896c4f0e20fb351477e3dc92a35d8._comment | 8 + ..._8f02d0c400d22866e38cc521dd55b2c2._comment | 17 + ..._1b84261a9e6389bcad1766b82add4930._comment | 52 + ..._577f586843c1d7e54d115796988f912d._comment | 15 + ..._do_I_set_up_git_annex_with_nextcloud.mdwn | 10 + ..._2528e595b04232de60571279ded4c2e8._comment | 8 + ..._562dbc96302644f915a0b8e33428c69a._comment | 8 + ..._7fa312e85acd3f9afbfd97d46057e6db._comment | 7 + ..._7980af82df895cdd4b5c527bbb2f4c72._comment | 7 + ..._1fe66285d3369da85c08d8c69ad9746a._comment | 7 + ...ync_files_from_mobile_to_a_repo__63__.mdwn | 13 + ..._fc914b5998a09943fc8c1917a0e36096._comment | 8 + ..._fd5257eff7f94971557c031a94ac2766._comment | 8 + ..._5a11c45f92bae1328a5120945bee1fa0._comment | 36 + ..._404a8f9daa86c20a046b4c9f9051dfc0._comment | 16 + ..._3dcdaef370d0df38e7285f1fa11c6bb3._comment | 8 + ...now_when_something_fails_a_fsck__63__.mdwn | 4 + ..._1c14981916dd55376d5e9f95023556cb._comment | 32 + ...url_on_external_special_remotes__63__.mdwn | 72 + ..._3ee29c9b0239af732d3734855417dd5a._comment | 14 + ...rent_OSes_with_regards_to_UTF-8__63__.mdwn | 4 + ..._f4b439f7d9ce20d4b5dc8d728cb2e180._comment | 13 + ..._7393a4b2e94f9d36c3c9ca977a8f67b6._comment | 8 + ..._a38e2bbe229cb7e1f4f334bd93d91656._comment | 8 + .../How_does_git_annex_handle_swp_files.mdwn | 1 + ..._8f0b81139fb66f28f9262e919692ecbd._comment | 7 + ...ex_assistant__39__s_web_browser__63__.mdwn | 7 + ..._f4402eabda2327da3a0bbc64ed3baf9a._comment | 12 + ..._cdb41f2c7b6bc5bf40d88582dcbf45aa._comment | 10 + ..._ca75e928c245eb23a02b5f40ec69cbb1._comment | 8 + ..._1635f136909711295b9b70d1255e0378._comment | 11 + ..._ee0cbe9498c518de98480a2ad229f685._comment | 10 + ..._799b9d9d3ffbc2c14eca8d442e2aff8c._comment | 11 + ..._71ff45948487e9ac8de809a5ccc3d874._comment | 29 + ...ge_the_number_of_simultaneous_uploads.mdwn | 3 + ..._d5559994ee45a5c185a55c9a4d824aa4._comment | 12 + ...exing_a_file_with___34__git_add__34__.mdwn | 14 + ..._68ed73d8898bf2ce0a14e0e5909cc64b._comment | 24 + ..._176a92a6ce5d8f356dafc29021242b2d._comment | 8 + ..._0cdd9683709d55bb7340fb41fef265fa._comment | 11 + ..._to_add_dotfiles_in_direct_mode__63__.mdwn | 6 + ..._d62d4b9ae5f1ec825fc58090689f7571._comment | 16 + ..._c7269cde1db02069149268b6c6a50786._comment | 13 + ...low_clones_to_get_files_via_URL__63__.mdwn | 52 + doc/forum/How_to_cancel_an_add__63__.mdwn | 5 + ..._f768ce5dc7c76f96ee6eb352f167be44._comment | 8 + ...change_the_name_of_a_repo_on_S3__63__.mdwn | 2 + ..._be74d63e1951f515948d232e096b4862._comment | 8 + ..._d54a7163cfe9a94b7ba337860958e5c5._comment | 8 + ...king_of_a_deleted_file_in_direct_mode.mdwn | 7 + ..._c6bd2ef90516dde928ff18ded36df625._comment | 8 + ...7__ssh_backend_to_other_backend__63__.mdwn | 14 + ..._7973928b1aa9e0fcfeb6bf80885441f5._comment | 10 + ...th_renamed_files_in_direct_mode__63__.mdwn | 3 + ..._fe38fedbbc9e4a9e13bf19950e63c7ac._comment | 10 + .../How_to_deal_with_spotlight_and_macOS.mdwn | 21 + ..._3d76fbb8f13bd66d729819a4d037ab4f._comment | 26 + doc/forum/How_to_debug_failing_sync.mdwn | 5 + ..._a597b868182e55e5f39394f154740534._comment | 10 + ..._db0a5652d76e4e568a4d7808195bc59c._comment | 10 + ...to_define_a_balanced_prefered_content.mdwn | 5 + ..._d4c94791a5fc7d2e618a7e11bc5db569._comment | 8 + ...url_for_a_git_remote_repository__63__.mdwn | 7 + ..._52918b5ec25e55837215439fe1bb1a14._comment | 8 + ..._3a1567c9f484b5e12e5560cdcc2cfddd._comment | 8 + ..._48c3a80c14a85f27d742482b2ccbe628._comment | 8 + ...to_delete_a_file_in_direct_mode__63__.mdwn | 31 + ..._995f3b8cf511921719774f8911e24907._comment | 15 + doc/forum/How_to_delete_a_remote__63__.mdwn | 1 + ..._8cba186bb67079ff41bf6d0b04613f4a._comment | 10 + ..._33c429ffa7e9e2ed9c5fac760ee8e82c._comment | 12 + ..._e9c5508092ca2983f458b16bf1e07082._comment | 14 + ..._688a8473d074830303133ba939438084._comment | 12 + ..._de7dff2dc4357d8cc617d86a06e35b1b._comment | 8 + ...tes_with_git_annex_assistant_and_ext4.mdwn | 28 + ..._42ca6cfbbb79fe63514805b8119ac16b._comment | 8 + ..._c94ce6a9767c624e2445a7d9eea40396._comment | 29 + ..._bcda51053b62bbb20ce71a59469e1b26._comment | 10 + ..._48e5b9eae920e5f13812de8d6f6bc640._comment | 8 + ..._787c0bfdc1d309db1486c3a37723a957._comment | 13 + ..._8894beb06443f234e9200b03b5f3badf._comment | 8 + ..._457f62ee3e58f68a55f66c5bde6002fd._comment | 10 + ..._bd2b412116a66107bc0ff0efd7e39a58._comment | 10 + ...ay_sync__34__s_in_a_direct_repo__63__.mdwn | 9 + ..._c5226964b4b64bd47d888b5616ff970b._comment | 22 + ..._748d243bac14a8d55be4ac324c581c1d._comment | 62 + ..._cf9234339bad14ad9a9d3027f9066936._comment | 49 + ..._d899cf35801636e618e4675d91d6104a._comment | 24 + ..._of_files_that_have_been_edited__63__.mdwn | 7 + ..._dccf4dc4483d08e5e2936b2cadeafeaf._comment | 8 + ..._5710294c1c8652c12b6df2233255a45e._comment | 8 + ...that_I_know_have_been_backed_up__63__.mdwn | 9 + ..._8332f71241335a31e270407477bd84f3._comment | 18 + ..._984286a35ec828f1e8dda928ea577571._comment | 35 + ..._29f6f9df1ad22113e9690b0d1da36ba0._comment | 13 + ..._43549b3d231f52cf53a66c477c34a708._comment | 15 + ..._94aca10f84783f35d927dbefbeba263a._comment | 16 + ...if_assistant_is_still_repairing__63__.mdwn | 1 + ..._9dd192a8e0bfa9e533b22070b87792af._comment | 7 + ...ransfer_already_in_progress__44___or_.mdwn | 7 + ..._345a7439720e8dc2cc6cb5eed6bcf73f._comment | 30 + ..._55ad844ee650a6a5026fdf5764dd9470._comment | 11 + doc/forum/How_to_fix_bad_merge.mdwn | 7 + ..._4a32a727560ab85203d1dd76feff2e1e._comment | 10 + ...t_keys_that_get_can__39__t_find__63__.mdwn | 22 + ..._5962c2c7b3a668429a62f7bede990801._comment | 8 + ..._f84a8e545da95e72b3e2b03a782335ce._comment | 8 + ..._74f14ae50e37d94fbd2950924a7bee28._comment | 10 + ..._ee99cdb44671eea30eaa4351dbb9dc96._comment | 15 + ..._d0d7674589574ae92e2595d23d000f61._comment | 8 + ..._information_on_special_remotes__63__.mdwn | 1 + ..._f1eca38ca0c1edb66e64ac64f0321829._comment | 8 + ..._73f8b7ebde5870f92bec02d15a533ef3._comment | 7 + ...rypted_name_from_special_remote__63__.mdwn | 1 + ..._47ce17796de422fe996f45083a6b79b0._comment | 13 + ...et_git-annex_to_forget_a_commit__63__.mdwn | 54 + ..._65471c42e163ac8ee6ec109f1397271b._comment | 12 + ..._cc991abd9155a8e4d935b04ba432744f._comment | 8 + .../How_to_handle_cold_storage__63__.mdwn | 7 + ..._ff49a65d4adaff3cf3902c2850227ea2._comment | 16 + ..._to_handle_the_git-annex_branch__63__.mdwn | 5 + ..._800bd55b322e72f229882d7fd3888b14._comment | 8 + doc/forum/How_to_hide_broken_symlinks.mdwn | 45 + ..._07a70090a9ac8f675233b08b24f55544._comment | 22 + ..._011f6b97b1eaee1ae513a4a0e445d105._comment | 12 + ..._e3606aa746f516fc771d5d9bf93d70af._comment | 7 + ..._c6e3ef3ba5f6e9e54d998bcbe3035650._comment | 8 + ..._1ed5e10e51078a0aa7e6968ef48687a3._comment | 10 + ...prove_performance_with_v6_repos__63__.mdwn | 3 + ..._56e0fead15a88ea12262e6091972c6d6._comment | 7 + ..._93a6a0779f52bdd3de6e4d2500cfd223._comment | 10 + ...ep_connected_files_with_another__63__.mdwn | 5 + ..._89e04a7dc25a3df849aa2ada4dbc8439._comment | 14 + ..._20e8dba904eff7cc8f72ee12b8119632._comment | 17 + ..._7b14aa71a166cf14e852ae896b05ee74._comment | 10 + ..._a33437b28ea7fc74eb221d90efaec487._comment | 10 + ...ading_a_file_to_a_transfer_repository.mdwn | 3 + ..._17db96492e6bc0e243fc7cb62565c4c4._comment | 17 + ..._e772ea0383ac690cbcbcf125258986cf._comment | 16 + ...ist_all_existing_metadata_types__63__.mdwn | 15 + ..._a8c30f697f32a3807661a59482d79b18._comment | 19 + ...n_releases_work_with_git_annex___63__.mdwn | 5 + ..._9298aa55771b68873de02e6a7964bbdc._comment | 8 + .../How_to_make_a_server_store_the_files.mdwn | 1 + ..._20196067475918e788afa0debc4d5ce5._comment | 9 + ..._to_make_this_workflow_possible__63__.mdwn | 22 + ..._38d7c0531d68803b1d7910c598aab38c._comment | 35 + ...in_the_same_repo_without_unlocking_it.mdwn | 1 + ..._a272d179a77682e8c64bd4fc20cddee0._comment | 10 + .../How_to_organise_backup_to_S3__63__.mdwn | 10 + ..._13c6421a3637e30193dc77b54dec4b8d._comment | 11 + ..._e0ae05276ef7e1dcb21ef0986b6f7531._comment | 16 + ..._7697112a04cdc9a53551257d71143eb5._comment | 8 + .../How_to_overwrite_local_changes__63__.mdwn | 7 + ..._1753d8c7a0daf04b64d639567a349190._comment | 20 + ...play_a_video_from_WSL2_on_Windows_VLC.mdwn | 17 + ..._4b2b04e4cd61d08dfa44b2cc86023ba2._comment | 10 + ..._single_device_and_use_only_hardlinks.mdwn | 13 + ..._b59a72142e8f752d7b68a63a6ac1bbfe._comment | 10 + ..._e4bfea21f664a0cb1aa8ec18ee88fc50._comment | 11 + ..._ee247d9316df963fd584df2199b80fe2._comment | 12 + ..._51548724d72e2cc6cb2c6e8c3b82e3e4._comment | 13 + ...stant_from_downloading_all_data__63__.mdwn | 9 + ..._fd8b287758ad77b3527ae71017cffabf._comment | 8 + ..._e8e75b4451aaf55461edf2f3d68797ed._comment | 8 + ...over_from_failed_branch_updates__63__.mdwn | 28 + ..._f296d4870a6fdef5c57bc8bb1a1e0474._comment | 11 + ..._0edc7239488f78345f9e624ef210ebac._comment | 25 + ..._for_an_external_special_remote__63__.mdwn | 11 + ..._6dd92d0737b72b927fc6b82636084c54._comment | 13 + ..._789445dff9a5905ed105ac344f6949ad._comment | 12 + ..._93e91e2ab98c35d4cb6082eea01b6abc._comment | 8 + ..._64c0d3c061ff463f9ce16b52d2a70a1f._comment | 16 + ..._d1c47c1a2f9b4dd570c0ebd9fbd1ad8b._comment | 10 + ..._e0753fef2b93ae5a114894dbdc014ec4._comment | 14 + .../How_to_remove_annex_on_osx__63__.mdwn | 5 + ..._18fc46bdb5bc44916e355a9900e9c0d1._comment | 10 + doc/forum/How_to_rename_a_remote__63__.mdwn | 1 + ..._a9bfbd82f7bb47661f0d9e0e0d904332._comment | 28 + ...nterrupted_merge_in_direct_mode__63__.mdwn | 65 + ..._8e2a14842b44844f90c80b862a1b3a6d._comment | 10 + ..._031ab6b5a2765ed9e2b185b24a8cbd78._comment | 8 + ..._93f20519483837c59a75821621e22dee._comment | 10 + doc/forum/How_to_restore_symlinks.mdwn | 1 + ..._c67e752cf7d5431096fab4b3304790a7._comment | 11 + ..._f9ec6096595e2c149c48924e3b54542f._comment | 14 + ..._4ff80729787a2a4e2baf05dd1db37da3._comment | 12 + ...ly_annex_a_file_already_in_a_git_repo.mdwn | 5 + doc/forum/How_to_revert_metadata_changes.mdwn | 25 + ..._de40f1a3f364ca6d2f9bb489f4d64cb3._comment | 39 + ...w_to_see_what_will_go_to_annex_vs_git.mdwn | 10 + ..._d26ea587da51a6f663d64ebb19976a2b._comment | 8 + ..._316becb188245c1fbbe6daa63505bc34._comment | 14 + ..._93f3bc4f8e9e2aeef4e417bba2041ee4._comment | 24 + ..._558abc4b928649ff3b199a7154c052bf._comment | 8 + ..._ce998d6fc7868a2f129bad755d04b186._comment | 11 + ..._based_on_file_size_in_.gitattributes.mdwn | 16 + ..._c8ac6b924d4446d4a1a12fb34532fd69._comment | 8 + ..._one_shared_transfer_repository__63__.mdwn | 15 + ..._bedaf308cfc70b9e751914a400ebcbc2._comment | 10 + ..._d665b1514253c8aa487ebf8b2728e3b1._comment | 10 + ..._aef42387a3673ab6710fb23e878d7e17._comment | 10 + ..._bfbcc041db472f4808979e6b3d7c4be2._comment | 10 + .../How_to_shrink_transfer_repo__63__.mdwn | 27 + ..._6b110311f4c147dc315c4f610cf56afa._comment | 19 + ..._8e596cd606935d82bd6604f5c9c500a2._comment | 21 + ..._c536a946b717e9bdcb883b58cd0336ae._comment | 7 + ...tories_handled_by_the_assistant__63__.mdwn | 40 + ..._1c913395f076ee203caaab057da8afbe._comment | 13 + ..._081793c52bf15c74a7f48a67c49ff818._comment | 12 + ..._f8e0376beb486cf8ce52384ff511ecf2._comment | 11 + ..._from_a___39__full_backup__39____63__.mdwn | 4 + ..._c4e972c8635f2fa460cd6621f3d993c6._comment | 23 + ..._e06abc9a2f7cf055523f3d35e4eed9bc._comment | 11 + ..._81d128be0fa60475062e795f34d920f7._comment | 9 + ..._43615e11f1c6d08f5850458d540f5bac._comment | 9 + ..._sync_without_enumerating_files__63__.mdwn | 7 + ..._ad78c67ae1bb4dc8ed800779c0298158._comment | 16 + ...o_use_--jobs__61__10_by_default__63__.mdwn | 1 + ..._3c47ad3f0c17e475ea42438a42085f9c._comment | 13 + ..._progress_of_in-progress_upload__63__.mdwn | 17 + ..._794cc9bdf728c96dd7c50cf402573cf5._comment | 11 + ..._6347e08b599239b6416957e9a7114157._comment | 9 + ...rk_with_transfer_repos_manually__63__.mdwn | 18 + ..._3dec369405e6b6a4a6e5121546c03712._comment | 11 + ..._b8f3c09b470d99578a4a17064498dd39._comment | 12 + ..._be2c594bc1d162cfb1acc3a01fc284f2._comment | 7 + .../Howto_remove_a_repository__63__.mdwn | 4 + ..._b55fa4e92bb457ecaa5ca8f5cee7be1d._comment | 8 + doc/forum/Howto_remove_unused_files.mdwn | 31 + ..._f2a7948268ce3cb3967a9fdd8ccc570a._comment | 16 + ..._9b4d198c2d8a52adef3d166a8196fc0d._comment | 8 + ..._441d10901d5c055ac3ed2a6cb61c075c._comment | 8 + ...ifferent_directories_of_same_machines.mdwn | 127 + ..._445766c0f646e9cb5b45b863ad87e85a._comment | 136 + ..._b3953f30fb817ee3753f888a871de51f._comment | 12 + ...yncing_back_and_forth_creates_commits.mdwn | 7 + ..._e6a60889876bd49855fe60849db147ef._comment | 8 + ..._1053e88c417e8b46648f645a466145e2._comment | 9 + ..._577f62d506a66770e746a50fc103901d._comment | 110 + ..._0079c41305493873521d3af45075a2c4._comment | 277 + ..._4879d44cc69022a71fc8baf8f31a890f._comment | 175 + doc/forum/Ignoring_folders__63__.mdwn | 1 + ..._5fbf4d1ae75434118876470b04e2fd72._comment | 7 + ..._1adafdf1fddf8e1256e51b0f56d3a89e._comment | 8 + ...remotes__41___from_another_repo__63__.mdwn | 3 + ..._32586d9e43dc0c5d0a9e94671586f763._comment | 9 + doc/forum/Import_existing_files.mdwn | 17 + ..._890dea22857d0a38260009602ccf0ec6._comment | 14 + ..._362ce3b030970db82c8dd0d98791186b._comment | 35 + ..._69188f669e6fe5ca1a8c34c3dc3ec201._comment | 20 + ..._9c7677838ad28d540a2a514d718f9f1d._comment | 13 + ..._d88cedb3d70342071621c1695c8aeb05._comment | 34 + ..._be5331f1203b9610259a84c783b429b0._comment | 21 + doc/forum/Import_options.mdwn | 14 + ..._118a5f978090a3909299876a01c0adec._comment | 21 + ..._21da91f08cb6b28ae3e79ade033db516._comment | 17 + doc/forum/Improving_the_git-annex_forum.mdwn | 23 + ..._63c52c977689a5da34fec65391c25fd6._comment | 34 + ..._7b4b8d78148f41df332d8f9125ca9842._comment | 15 + ..._71d5568d2ac64f83dba11100124addd1._comment | 30 + ..._847be68ea1992e6c2ceb2c79cfb65f5f._comment | 8 + ...al_remote_with_already_existing_files.mdwn | 17 + ..._f2a2f7309145d26d124c73ce6fcb32a5._comment | 26 + ..._c1740ce07be483d198880f5844fea7e0._comment | 52 + ...al_macOS_setup_between_two_local_Macs.mdwn | 32 + ...l_git_annex_v6_in_Ubuntu_14.04_Trusty.mdwn | 1 + ..._9c715cbb0550cad29402dd2fca1917f9._comment | 13 + doc/forum/Install_without_root__63__.mdwn | 3 + ..._097bbbde8a91e1d0cee9da6cba23ae5c._comment | 8 + ..._891cd24fb0806ae9087cd83d22d8ce6e._comment | 10 + ..._23fe7b46c6f48072618f05c1368a8917._comment | 8 + ..._f015ab0bfed0b440b915c233be73c316._comment | 8 + ...nnex_get_into_git_checkout_with_hooks.mdwn | 7 + ..._7258d0203a0578d0f4e0221295511237._comment | 13 + ..._9ca7b7dfc039c443c4afa9b6ea7c78bd._comment | 15 + ...nex_with_Windows_Git_Extensions__63__.mdwn | 10 + ..._2dac6e3ccf559d98f74c456c0ca7aafc._comment | 8 + ..._181c6c87c64e4fbe798c108537c6a597._comment | 12 + doc/forum/Invalid_cross-device_link.mdwn | 9 + ..._46c35e04c8f8cb7205f08aa71cc4912a._comment | 15 + ...e__63___Questions_about_the_long_term.mdwn | 20 + ..._9984f65d6e89f0f88b33cbd499e859eb._comment | 9 + ..._d7bdfeb33bac7f139b0bdc1c6fb53237._comment | 10 + ..._7dc224cb0b88bf07879e03717efffa17._comment | 8 + ..._a538f8a4272b5ce134607dc7201e3f04._comment | 9 + ...s__34___storage_class_supported__63__.mdwn | 1 + ..._ddc2a1f2b1d810a40b459896993d2e8d._comment | 11 + ...nup__96___by_default_a_bad_idea__63__.mdwn | 3 + ..._51e5f78a1cbd37598f3f0f6746df7320._comment | 17 + ...de_of_the_object_directory_safe__63__.mdwn | 9 + ..._c25900b9d2d62cc0b8c77150bcfebadf._comment | 13 + ...state_before_the_initial_commit__63__.mdwn | 18 + ..._f9decde3955f10148febc4646fba5a68._comment | 12 + ..._ed32a48edce4f150bedf24cfe91de254._comment | 8 + ..._ef9618850e5e688bac3c646983f00ed8._comment | 10 + ..._4bf460c5826c36b205e418c4f3f7d770._comment | 15 + ...me_parts_of__41___the_git_annex_tools.mdwn | 12 + ..._5c593876993bef4dfaa052278a3ba5be._comment | 8 + ..._02ecc1b9f370f6bba84dd598030e0fcd._comment | 24 + ..._7d9d45716e9e847f3bde214949796222._comment | 20 + ..._ba3422afc8ae83bd822616cc1a99a5b9._comment | 10 + ..._d8c402765b3a5896db91605f43149001._comment | 38 + ..._2d78e647a46cfbb002cf66e6318043ab._comment | 10 + ...ible_to_cherry_pick_from_a_repo__63__.mdwn | 5 + ..._82efe5c0b37fdcb31b6a4ca62b66123f._comment | 17 + ...42__dont__42___have_a_field_set__63__.mdwn | 3 + ..._f452c911b24ba40aef3be5bdaac9f9ee._comment | 11 + ..._7373ec002ca78f4f382ef9297f39639e._comment | 8 + ..._cda315119bd3ccce74bc3df8dd56bf1a._comment | 22 + ...e_git-sync_not_nullify_symlinks__63__.mdwn | 23 + ..._d6f2d2cdc5f4ffde9eee9f3a8c215a06._comment | 10 + ...etup_a_git-annex_Glacier_gatway__63__.mdwn | 25 + ..._a35571c77eaab5bcc0d841543a13162f._comment | 14 + ..._c8f185b0751ccd17a657e954cbeb2864._comment | 11 + ...to_push_to_checked_out_branches__63__.mdwn | 11 + ..._e74ddd1bf47f856369568b1fcd8d4f9c._comment | 18 + ..._c47c27ce283cc4fcb80949860e2a4927._comment | 23 + ..._47511f7b731cdefd108241bedb116f68._comment | 8 + ..._07a190aa19006611739cccfc5aac5a6f._comment | 9 + ..._different_directories_possible__63__.mdwn | 31 + ..._34af73f211cce966927757f7deec88eb._comment | 24 + ...reloadindex_safe_with_git_annex__63__.mdwn | 1 + ..._c250362236a33d8dc9bf5ed825318c40._comment | 23 + ...nex_cat-file__34___type_command__63__.mdwn | 20 + ..._fe3dc778b35119d3ede2d341cac7a15b._comment | 11 + ...assistant_configuration_attempt__63__.mdwn | 28 + ..._d77fbbbe3a7438a1e79f175df1f69ef3._comment | 17 + ...have_assistant_add_files_locked__63__.mdwn | 5 + ..._70c8e23c87a6c48e728a6685e7189e98._comment | 8 + ..._c0c6e38fe99dd273764071574c8b3c1d._comment | 13 + ..._c80d15f6844e29dee2bf7ba0a6d6d093._comment | 8 + ..._a8ebda7dd8d52e6c1137dbb646e21e5c._comment | 13 + ..._022f36242ef57158feab0918f41a7ff1._comment | 8 + ..._5527d611a132f3e9bc0d71c593abf673._comment | 20 + ..._92bf43545c46d302089820cfdd03141b._comment | 10 + ..._a6ae8bc3b5caf0d3d49a919ab5ec5778._comment | 8 + ..._7fcc62493d261c22149f85f48bb95efc._comment | 13 + ...normally_works_for_coding_files__63__.mdwn | 11 + ..._e30310472df6ed2928dfd63464c6bae7._comment | 8 + ..._f093b16307bd369399574fc651569b73._comment | 10 + ..._1edab7e44e7eae6d8f06a917704b17ec._comment | 12 + ...override_the_import_destination__63__.mdwn | 5 + ..._5f094cc606eebd2aeeaaa4b861cf2c21._comment | 9 + ...ere_a_way_to_unannex_some_file___63__.mdwn | 3 + ..._82095cef37dd815bcd1d101a1715e3c7._comment | 12 + ..._3b05e9eaa554b70594f0195dfcef831d._comment | 8 + ...st__39___to_NEVER_access_remote__63__.mdwn | 19 + ..._3760d5b8c8012405eef17e4d07cf151c._comment | 30 + ..._b95ce6b13ae45a2fca05260a7f77148f._comment | 19 + ..._1c8f023b8d7a50cfce6d3464b12e446b._comment | 17 + ..._f1e234e80a6873b33986bec8d51c1001._comment | 7 + ..._2c43830a95cd8955da20cc6dba27a9b6._comment | 10 + ...handling_for_file_modifications__63__.mdwn | 20 + ..._d901ac998c9fdb844c593d782c31cc73._comment | 9 + ..._e46cb391ce377c3a8eb40155a5d0f001._comment | 8 + .../Issues_with_IPFS_special_remote.mdwn | 7 + ..._d13e439c3c242606d8b4377831e38a2b._comment | 35 + ..._e53b0158471605950896cafac7aac4da._comment | 7 + ..._74c586e5af079f0d6c42975ac294e766._comment | 8 + ..._283aafce5dc1735310daa8329a432002._comment | 10 + ..._fa017d01e9eca59074adf2224e20994b._comment | 8 + ..._e49c62ca2e0f0d455469d5bc4483aff3._comment | 9 + ..._2147808f9b15be995988e2c71bc0b271._comment | 12 + ..._3a34db5281419578201f5f74cf97a830._comment | 10 + ..._765fef6f0b5da3e5c87c029fea2362a1._comment | 128 + ..._edd64d315651d5c7d5e1f802b68b8b68._comment | 8 + ..._07b1f3c1e744e910f1738925d79e3d1a._comment | 11 + doc/forum/Issues_with_non-sync_workflow.mdwn | 13 + ..._99f89201446005f77d9278a7a889638d._comment | 10 + ..._f27ec2462e5a8f6f96c6e2b7dd3f87ca._comment | 10 + ..._db02b002a977b57be0102d8ac7c2037f._comment | 8 + ..._a93d502253cf9f164fbcd23ca755db9d._comment | 8 + ...nt_and_gitlab_as_a_metadata_only_repo.mdwn | 63 + ..._b61139816f55dbc4f7eac22207f243c0._comment | 11 + ..._f6196f814ed388d276947ffcc92ff37c._comment | 9 + ..._1556ebbb2a8db4aa859e3852160df044._comment | 24 + ...ypeScript_API_for_git-annex_available.mdwn | 13 + ..._69cdea649eb79fa796fb3713dc0ac23f._comment | 7 + ..._would_you_guess_v6_to_be_ready__63__.mdwn | 3 + ..._08d3fd14a57b5d4dfb2cac411aba757f._comment | 10 + ..._ff5b55e81c0d48968e59e1783943f286._comment | 10 + ..._f63a66196db731fb04d8e078136eeb3d._comment | 10 + ..._a7ea99c0b8bdc257c0c3453bdb5ce1ca._comment | 8 + ...ybase_encrypted_git_as_a_remote__63__.mdwn | 6 + ..._38d868bf2e93c43091f9f337d9ec840d._comment | 10 + ...ebapp_on_Trisquel__47__Ubuntu_Precise.mdwn | 7 + ..._6bd27bd31833336c1df783253378ccae._comment | 10 + doc/forum/Large_Uploads_to_S3__63__.mdwn | 12 + ..._c1fd2ed0b74ce58f818ab53158e581f3._comment | 26 + ...indows_annexes_with___42__nix_remotes.mdwn | 33 + ..._a38e0ecef49a81a1d2b3d2eaabab65ab._comment | 17 + ..._c59077a9d6500df0cd88ac5a18085085._comment | 28 + ..._bfc92cb2117b26eec95687950827c78b._comment | 7 + ...ch_between_symlinks_and_annex_objects.mdwn | 14 + ..._854786810dc4246cdaa38ff10c55bbca._comment | 9 + ..._9134154ba2ef3575c39c7848136b79a9._comment | 21 + .../Let_watch_selectively_annex_files.mdwn | 27 + ..._8379de87d16502d9aadf252da01e4d9a._comment | 10 + ..._2219ff6b4dc927eb2a299cd1af90aed8._comment | 8 + ...ad_of_broken_link_when_possible__63__.mdwn | 4 + ..._ce0464d5fca6ada9f1477831fd47ce09._comment | 8 + ..._or_actual_files__63___Confused__33__.mdwn | 21 + ..._779cee2448d7070b1dd636d01296c01e._comment | 8 + ..._bccda88697ab7beec0b9fe9ee0230688._comment | 18 + ..._c2a9da3f03b55ff294dc0d2010380119._comment | 8 + ...ed_files_in_chronological_order__63__.mdwn | 1 + ..._825c950574b3a2f083554f474c9f7b50._comment | 12 + ...f_files_are_stored_in_annex_or_in_git.mdwn | 7 + ..._9206087f7320982ef26ef401d39a394f._comment | 20 + ..._2eeef9505e976288e7a09f31d0c09dda._comment | 12 + .../Local_and_remote_in_direct_mode.mdwn | 7 + ..._45f89ebcb6092d1b2582feebc8a5e9d7._comment | 15 + ..._90eeb2bffdb2db8032f9a0eac630ed56._comment | 8 + ..._859ec2b3a8e938073b2099fdc5781109._comment | 8 + doc/forum/Locating_errors_on_fsck.mdwn | 7 + ..._5a4c54b59f2a3f8519f2dab608a1e92d._comment | 8 + ..._0277bac79694efffba0e59706aa66c63._comment | 8 + ..._file_results_in_file_changed_warning.mdwn | 20 + ..._25a04c7345f5b626aa71524603c833ed._comment | 8 + ..._7146a3c69749b9b1001fffc6e7a8bcda._comment | 12 + ..._fd39e6ceffd9bf0709658c34945d8699._comment | 16 + doc/forum/Looking_at_the_webapp_on_OSX.mdwn | 18 + ..._68820f2f469356633c1abb18a47e0c59._comment | 12 + ..._4ce86546d8a135df9cfab46b4612fa0b._comment | 23 + ..._6d398a2cceff14a1b774b85ee1725073._comment | 12 + ..._5e503787a4b1d3534c5e20da5480b763._comment | 8 + ..._c735841bc230efc61594ea013fc2902b._comment | 8 + ..._0e489fbfc89d282e9eb47f1b814ff70c._comment | 8 + ...sitory._Recovery_from_S3_remote__63__.mdwn | 14 + ..._a9028f00461ec1eddbeb699dadcbab72._comment | 12 + ..._0dbf6fcd15007ba66323ecf2b154ad2e._comment | 12 + doc/forum/Lots_of_4k_symlinks.mdwn | 24 + ..._96384eaeef1d067a24678c7aa3613063._comment | 21 + ..._be9617e8cbc231069c44bc9f077ce673._comment | 32 + ..._80b3a84e6d79871bbbef13d4bc87cc37._comment | 14 + ..._be12d26936b3502445e880be997b8877._comment | 14 + ..._ab3884748f3271a77ba3320f25d74414._comment | 25 + ..._fa72056ee788ac0f2c15bb57d9876cf6._comment | 16 + ..._bd6b81815e5888c26d7a8a96e565519e._comment | 23 + doc/forum/Lyve_Home.mdwn | 6 + ...5E_backends_no_longer_available__63__.mdwn | 5 + ..._e21fa57a2f2dc4e99737877c6a48cbfe._comment | 11 + ..._5025d16f59f314711e49537e542b7c83._comment | 7 + ...ke_GA_aware_of_externally-made_copies.mdwn | 15 + ..._0e2edea494810a8614f628ec46b934e4._comment | 9 + ..._b7fcfd87efb17d5159ec49eb218fbd8e._comment | 32 + ..._c1d69396c7bb208b6f82f2f65a282cfb._comment | 14 + ..._b0d7ef111f4862d6b759cde45696a676._comment | 10 + .../Make_whereis_output_more_compact.mdwn | 13 + ...efox_not_dereference_symlinks_on_open.mdwn | 3 + ..._a7b092f2291fa515279cf7dce23df20d._comment | 8 + ...nnexy_symlink___34__known__34____63__.mdwn | 7 + ..._e04edbe950a41887c4c11a226ca77dce._comment | 20 + ..._de77cc2bee45706c4bbe407d8846778e._comment | 13 + ...ng_a_public_read-write_git-annex_repo.mdwn | 9 + ..._8279171695a9a7a7501d5ee8c7bab66c._comment | 10 + ..._2cd770a12bfe3b44531b024c41570758._comment | 8 + ..._19694d397813fe1bb949fd3b6ae49f4b._comment | 10 + ..._c8b104eb34efdd7c7670f2133081d1d8._comment | 12 + ..._48e247fddb0d302102c74cac7f2228ff._comment | 10 + ...git-annex_a_self-funded_project__63__.mdwn | 10 + ..._4a1ba95b7231ba973ddb672d2419e28c._comment | 8 + ..._7c476ae92e63c991f229708678874ca2._comment | 8 + .../Making_git-annex_less_necessary.mdwn | 5 + ..._03faaa3866778d24cd03887b85dc9954._comment | 12 + ..._2db02a94dffd525885c9d7fc6c5fa464._comment | 12 + ..._429ec656e0ac02f98843f8d7f3c02d6a._comment | 11 + ..._384813dd022dfd9c1ef14e0f1479a123._comment | 18 + ...reserve_file_name__44___and_directory.mdwn | 10 + ..._03a5369518a96c0550e68af520ed0060._comment | 8 + ..._64863e149cc62a778b006ffe2bf82d06._comment | 10 + ..._bbd3ea45cf560031856e9e8416b4d126._comment | 8 + ..._2c36e30b3e2f6874c63e03307207a6b9._comment | 11 + doc/forum/Malicious_autoenabled_remotes.mdwn | 9 + ..._c82464f40eb1442aadd0f1e89b72f41e._comment | 42 + ..._37456c0a159453fa984c5a003578d1eb._comment | 21 + ..._608213f5d0df482b731ae1502cdd87af._comment | 20 + ...ead-only_medium___40__E.G._DVDs__41__.mdwn | 118 + ..._a061d300b718ad943c940e122cc57220._comment | 23 + ..._76529080054407570611b4357ce4f3ed._comment | 8 + ..._9acf5ce41a023f3848a51891cceeb51b._comment | 21 + ..._0a343a8fdad66765371ca22581b35b84._comment | 24 + ..._b315c50d796d73bfc35acebee1836f40._comment | 66 + ..._9ddd6278ea00c5594083347b5b9b8405._comment | 24 + ..._c3f6cb58dd2328b7af8dd2657c2e2a1e._comment | 31 + ..._455ab8b72c477769d68eb4348e911234._comment | 10 + ..._679ad639cbba7f9a4d28131219d20178._comment | 25 + ..._854531569edbb5c152c4d6b0d764a6c5._comment | 8 + ..._25e65ee3949e7d918376298cf11585f2._comment | 10 + ..._a80b9ce3a78fb44c9d60e877146d9e59._comment | 12 + ..._8a71ca048f9de29a198a6afb17d5315e._comment | 11 + ..._e3d1d3a3d3d831432ec940a8ab6f31e9._comment | 14 + ..._26a33eae98b4faaf6baf6635e3d28a8f._comment | 27 + ..._49ac298d39c824b0e52a239961463e09._comment | 14 + ..._55a4a3616ea59654da1c2f9902561e3b._comment | 13 + ..._92a2af3e0e328bb48bcc67a69187ee57._comment | 13 + ..._f6e39e71882d55cdc061166aea3e2bd3._comment | 26 + ..._6c45a6264d69e22800c329a0f8a2d470._comment | 8 + ...multiple_annexes_with_assistant__63__.mdwn | 13 + ..._ba8c70e4a46441b48ad910625636eee5._comment | 8 + ..._4b4f0a7d84a51ae92536e2c190256069._comment | 10 + ..._86daadc565f96db5db13b6dbcbc66db3._comment | 8 + ..._e43d71ddfdfdb7bcb13bfb894de6a5ec._comment | 8 + ..._e94d33be83b45918d1a39d6e16fba4b4._comment | 8 + ...tiple_repositories_concurrently__63__.mdwn | 5 + ..._ebec1ddad71e961cdc9b21cbddfbcdaf._comment | 10 + ..._a_git-annex_repo_from_an_Android_app.mdwn | 21 + ..._c59ec715eb02fbdd63780b2450ff2de1._comment | 12 + ..._20ee5f900a2ff6154c0d90263579723e._comment | 13 + doc/forum/Manual_Setup_of_a_Central_Repo.mdwn | 1 + ..._3a163fd5629dc40423f1290a78ae1c07._comment | 12 + .../Manual_commit_message_in_direct_mode.mdwn | 3 + ..._32f95eefec25bb127ed96248446c21b1._comment | 8 + ..._bf1d10067379c802ac5020d8becd6d35._comment | 10 + ...al_local_pairing_without_webapp__63__.mdwn | 5 + ..._1f280e38bf5fa81d3a8cc4887f32e590._comment | 22 + ..._d83cc10b2359eb3578c6c4dd299cf308._comment | 10 + ...l_mode_option_in_assistant_auto-syncs.mdwn | 11 + ..._4a0468b6ca2ffff8ef8f19800597567d._comment | 10 + doc/forum/Manual_webapp_behaviour_on_ARM.mdwn | 15 + ..._5431a57aa7d659faf0aee12e638dd1ba._comment | 56 + ...ally_moving_annex_objects_to_new_repo.mdwn | 12 + ..._f9b894bafc5ab19ec7b0b500ddfe00ef._comment | 8 + ..._6125e6a7d6b15dee7bf6a6bfe99bcf73._comment | 12 + ..._8203d8e0444471b9360b679f49f67fac._comment | 8 + ...rop_in_performance_with_--jobs_option.mdwn | 9 + ..._8a9b5bc3b8a8ef947f2620422307c465._comment | 27 + ..._c9fea9db7116e7ee82a09c23f22b54e9._comment | 30 + ...hing_options_not_working_in_windows_7.mdwn | 18 + ..._616f6c6d26088207ce9c044f4b61eec5._comment | 16 + ..._b0319c1214c26f64058eb9c38ef6fb0d._comment | 7 + ..._d834a6cb0ae1bd47e5280b10ecbaa72d._comment | 16 + doc/forum/MegaAnnex_not_working.mdwn | 32 + ..._5aa3fd366d4c78ca79bb58005a49791c._comment | 8 + ..._f3eaf1ee06ebac951514d865f298f9d3._comment | 8 + ...git-annex_repositories_together__63__.mdwn | 7 + ..._b96bb95cdbbc78c0b4b348861e2264bd._comment | 8 + ..._539a33b268be5c6954f3112d89dd34ef._comment | 10 + ...ed_up_repo_by_syncing_to_wrong_remote.mdwn | 40 + ..._d1358e46d488532e1922a1bf7c471980._comment | 13 + ...chanism_for_special_remote_to_another.mdwn | 44 + ..._6e8e3350ae26b6c59daa56b7e86cc46a._comment | 14 + ..._db4b772371ee49c743605c728e23c91a._comment | 19 + doc/forum/Migrate_mark_files_dead.mdwn | 254 + ..._fa155c961d5aecbe055f67d8ace0c208._comment | 8 + ..._a4512fb8a59f3a4d4ee85651a979f00f._comment | 11 + ..._a10dbdd505742d5cf03fd435e206d9a2._comment | 15 + ...Missing_git-annex.linux__47__runshell.mdwn | 44 + ..._f29a5105649579ef15e79d983c4e1f8e._comment | 8 + ..._content_repos_with_import_and_export.mdwn | 7 + ..._0486a067491456d92220ca638e3095bf._comment | 13 + ..._d0e73dbcf22704cf1c9af8a56533aebe._comment | 10 + ..._d15b0e5a034deeac85806790e53aefaf._comment | 11 + ..._3f7d0f8d1a48d60612aa8477e32fb6f1._comment | 8 + ..._9f11132002d2fee9917e91a7b80a94b3._comment | 84 + ...d_in_synchronized_remote_copies__63__.mdwn | 5 + ..._2b13584998108af0522b898c5d396ba4._comment | 8 + .../Modus_operandi_for_local_full_backup.mdwn | 20 + ..._fa8ac55ebd94312a36b284047b6cf932._comment | 9 + ..._fc2ac75608e91018f67c3753e9b09f76._comment | 8 + ..._6089f53d8af5746f2a410d0214567943._comment | 15 + ..._4c27aae1361465993fb60997bb0eadf8._comment | 8 + ..._in_git_annex___40__direct_mode__41__.mdwn | 22 + ..._6426aca2296b5e03b333d5253ae7d88c._comment | 12 + doc/forum/Move_history.mdwn | 5 + ..._da64814a7dfc2322200130a17bb79923._comment | 8 + ..._46ce6990e5921238f98749af830ac5ec._comment | 11 + ..._b720837e8e4ab8f4b0648f8ac336a605._comment | 8 + ..._17b8c2fd3ac706cd666ad5f5c0a21715._comment | 11 + ..._9ff881c26c3bd7f3a61595ffc1df743a._comment | 33 + ..._d0c97744e9ccca21e4023f657e9f5f30._comment | 28 + ..._0655707fe70710408b93b5f53f8d6f26._comment | 20 + ..._f2e1d20e269648358b1eced616727e63._comment | 26 + ..._acd690861b31e55352497b32b7c0fd6e._comment | 12 + ..._0e4b1629d2bb9d360a1ba65494dd8ccd._comment | 28 + ..._1153476304000f417292fdce1f9727bf._comment | 14 + .../Move_unsynced_file_in_direct_mode.mdwn | 97 + ..._12a797cba753168dfde9e6339c00f481._comment | 10 + ..._f3aec24668c35780a033f2b035df10ee._comment | 20 + doc/forum/Moving_S3_special_remote.mdwn | 1 + ..._b030a7afcbf1a329bb35260cf338ff96._comment | 9 + ..._3c4b8afa81590a1f1e2291a08d633b16._comment | 10 + ...ithin_the_repo_without_copying___63__.mdwn | 19 + ..._9e3290138133d5a23a80f72342f47ec4._comment | 8 + ..._232b77894dda51d02cbc34bd25d3213b._comment | 13 + ..._d35ac1bdb3fa6e303ad92348ba174158._comment | 11 + ..._4b443ec6b47eaabe214d0c2222083e4a._comment | 8 + ...s_file_content_without_doing_checkout.mdwn | 4 + ..._f114b75b29123453758b493fae7f5167._comment | 8 + ..._e377b7614c2961b460a10e285f3db274._comment | 10 + ..._d251958795ab0867c65cf182e54a6ffe._comment | 8 + ...tiple_group_groupwanted_settings_help.mdwn | 34 + ..._e78d0aa6b23225c509b9e97549fe915b._comment | 34 + ..._b3d95d5c03c7b985d39a4d5a45ba3dec._comment | 27 + .../Multiple_interface_to_the_same_annex.mdwn | 29 + ..._ea9e3a987112d8bf6421be234bf61d3c._comment | 15 + ...ple_machine_remotes_on_external_drive.mdwn | 7 + .../Multiple_prefered_content_groups.mdwn | 66 + ..._b401d234c0730412053f0f6a6f9cf2d6._comment | 32 + ..._a91177f4f02500e8fa6594933e128ef0._comment | 11 + .../Multiple_remotes_with_the_same_path.mdwn | 67 + ..._78f2d8e3906c11ba5753478d08973bd2._comment | 18 + ..._8cd3edf2e71e904f1b651abdfd7a4499._comment | 8 + doc/forum/Multiple_repos_on_same_path.mdwn | 12 + ..._67ed823c4c40f5acf12b48eb75d7afa8._comment | 32 + ..._e1c4ac71eb0f9ff6ae1701b3a6d738dd._comment | 26 + doc/forum/Multisession_compatible__63__.mdwn | 8 + ..._dab5a92416314a7d4c02663d4e46cd60._comment | 11 + ..._1c8d0f97d353c3e1d290edbe0a48b359._comment | 16 + ..._c1dc4294cc2a43cfecfb7279d6411924._comment | 21 + ..._b7148c3afd31ce1effd135a4f7c92dbc._comment | 16 + ..._d0ddac05268d978e950c91e76b023ffe._comment | 11 + ..._e2319f774eda62600c27ab9d2d0d1e50._comment | 10 + ..._0e6c8ab32c589f0d971d4c208a8d1645._comment | 10 + ...es_be_accessible_to_one_another__63__.mdwn | 9 + ..._7af462f69b9efc3bbe18d0dbc839cb39._comment | 8 + ..._882d9e6b7b2297dfd29266bbd429b046._comment | 9 + ...r_some_weeks_with_git-annex_assistant.mdwn | 57 + ..._9d4019a54fb508e286a5d6d2660361d9._comment | 26 + ..._109534a45881ce94a4586c8a83945f9f._comment | 85 + doc/forum/NTFS_drive_mounted_on_Linux.mdwn | 6 + ...linux_unable_to_connect_to_ssh_remote.mdwn | 29 + ..._b2d2bf6be441dc2e4443d06ef8db7134._comment | 12 + ..._75abe6da74cd0432e616e391f5be6fe3._comment | 14 + ..._build_instructions_for_Debian_stable.mdwn | 5 + ..._8c1eea6dfec8b7e1c7a371b6e9c26118._comment | 8 + ..._f6ff8306c946219dbe39bb8938a349ab._comment | 21 + ..._bcda70cbfc7c1a14fa82da70f9f876e2._comment | 8 + .../Need_some_help_installing_on_freeBSD.mdwn | 48 + ..._3962871e646280e2c4fdff8a08bed485._comment | 14 + ..._528fdd2c385809b971eceee1eb70ee38._comment | 11 + ..._5ae3cd6e24a25d6dc803ec2adea0414f._comment | 9 + ..._1dcc43aaad2099bb1684873d24da668f._comment | 9 + ..._527bf6df2485c5e906f1d50930ec01fe._comment | 9 + .../Need_some_help_to_fix_my_repository.mdwn | 31 + ..._f0d279c530b796b2c93d793f85d147e8._comment | 13 + ..._a3fcfa1f8eadec5fa8a9efacca174048._comment | 10 + ..._7878f9b76ddfa3392c9ec6a1810cb745._comment | 10 + ...nused_files_because_of_bad_sync__63__.mdwn | 23 + ..._af0ed0730645c1e3c9a4946acd48c18a._comment | 8 + ..._12f3c2bb2458b69e6355c8f94bab868f._comment | 13 + ..._b233b4daac32c452776e1e3d9a29f2cc._comment | 12 + ..._8e079e92929dcfdf19f6adec16f800e5._comment | 23 + .../New_Arch_Linux_package_for_git-annex.mdwn | 7 + ..._5881a5974ec1c4f701775c30b814ee2f._comment | 7 + ..._f41f9248f4d5039309e8fd98524e86bc._comment | 8 + ..._ab1f6e45625e6ab80770d4ff65ec4242._comment | 7 + ...ew_external_special_remote_for_rclone.mdwn | 7 + ..._8845852338bbb7e46c0d5585d5884faf._comment | 15 + ..._4057e28ed32aeab048f7c97a733f180f._comment | 11 + ..._4412a5a25ac933de71772afd23cd66bd._comment | 8 + ..._9a23f4e9d673b4dcf60b3425fa4df4aa._comment | 16 + ..._cf45b8efbb296013493e7756cdfcf291._comment | 24 + ..._36a0260f013ccbd06460dea83fe22278._comment | 7 + ..._4d7f07a872ef3cc2c4928dcd1580bd0a._comment | 9 + ...nnex_integration_mode_for_Emacs_users.mdwn | 3 + doc/forum/New_user_misunderstandings.mdwn | 24 + ..._c1785924109b5d5cde9aa3d3460cf955._comment | 10 + .../Newb_question_on_sneekernet_sync.mdwn | 7 + ..._409cc5ba605d63331b386066d32f797b._comment | 31 + .../Newbie_question_for_a_simple_task.mdwn | 11 + ..._51cf643c8d843dd2ab49c83aaf4fd218._comment | 9 + ..._a9d18e6fb1c6b064f50467c23bc89d2e._comment | 9 + ...to_connect_to_the_Jabber_server__34__.mdwn | 5 + ..._59158afcedac18a7285d57491b2a468a._comment | 8 + ..._2a70ac08bb95774415b09dab7d7f8605._comment | 8 + ..._92a52b523ed4c68b70ddcabc2a050b76._comment | 12 + ..._c52a75761ea107f6d69c09bac64f0f0a._comment | 12 + ..._2685e3a87464ccd37d593516d94ba5cf._comment | 10 + doc/forum/No_SSL_traffic_for_S3__63__.mdwn | 8 + ..._f509bf273896180e6df8c771438dd093._comment | 11 + ..._358635d19c82202c63014ca84de7fc3b._comment | 8 + doc/forum/No_known_copies_exist_of.mdwn | 31 + ...ting_forgetfulness_does_not_propagate.mdwn | 26 + ..._b4aaabb50743dd11b70ce0cd2b85df5e._comment | 9 + ..._81c98f50953860c15473e958c55d1e4b._comment | 15 + ..._350cc2d2025655804a58ed520a157c2e._comment | 9 + ...git-annex_status_v5.20131224-g692aa01.mdwn | 16 + ..._b014f1edcb7ce39da9b582683d3b80c0._comment | 10 + ..._24602de6cfe1f3d988c5105e7266a518._comment | 8 + doc/forum/Non-ASCII_filenames.mdwn | 64 + doc/forum/Not_enough_free_space.mdwn | 42 + ..._4721e6e6c263c2a624d6cc77f6575860._comment | 8 + ..._69e5a25b63457e702436b54d26f6d482._comment | 18 + ..._c6ad0934136448a014f6b1c317bba3e6._comment | 15 + ..._c05f95ae6d69cdc214a2b31ebc296a3b._comment | 16 + ..._f8206862e22fa354d97cc3d9d2af8d5c._comment | 10 + ..._06d27155323cf5609b17c4e1197ab9ac._comment | 41 + ..._7cf8cf6d15324b840336be561423d34b._comment | 29 + ...Not_sure_how_to_get_my_s3_remote_back.mdwn | 31 + ..._ed35a6ec605e8f79ec107856af6d1a46._comment | 18 + ..._e48b6efa42159dc83e1be11bfb54abcd._comment | 14 + ..._b58232d0e3fa4649565c0c7d4ce2e82e._comment | 31 + ..._85368b60091dc3ce2efb58013ffe9f83._comment | 10 + ..._e65281bef23e0076936c508728a87897._comment | 25 + ..._fffb59ad5a197d2980dd0ec35cf4aafa._comment | 10 + ..._0cfcc2075bff556b9fde5acc3dc1d599._comment | 8 + ..._6fe2ff1282fb14a4ce26ef8dc775d07e._comment | 8 + ..._64338d2d77dcbabd16b55eb145f40dc6._comment | 12 + ..._dd66c9ea0c83388f6826751944330d10._comment | 16 + ..._dc0c5e395e4c443b7227afdb157194e5._comment | 10 + ..._3c0ea4c76cdd889707f7308576e3efa0._comment | 65 + ..._36519ee4499a19f0864e4fcd264e9933._comment | 20 + ..._85b23f375e53469fb09b24b945b3aba9._comment | 17 + doc/forum/OSX_Finder_extension.mdwn | 5 + ..._4aa37c3fbe3c260d71f2ed16fd4f20bc._comment | 7 + ..._e16092041890f81dc65a6ab28b2224a6._comment | 12 + doc/forum/OSX_Mavericks_anyone__63__.mdwn | 3 + ..._3075b02aeb57adcbf4addf9fb4c123ba._comment | 11 + ..._c2b6110fc4a3d3481ed8a4b48efb9635._comment | 17 + ..._7df9ba63cb1f385681242b4b58d6a87c._comment | 8 + ..._740fee31c4ca9d84428f97f63ffc075a._comment | 8 + ..._sshd_behaviour_has_limited_paths_set.mdwn | 12 + ..._a136ff877389f0930c066ba118edd9fd._comment | 10 + ..._5fcc52a62770fb932a4a2101f5badbc0._comment | 17 + ..._521f34c340ad54cef6458a8b6cfff8a9._comment | 13 + ...kell-platform_statically_links_things.mdwn | 17 + ...iled_to_check_if_upgrade_is_available.mdwn | 36 + ..._ac7c1f39e723cbcd49d6497649e7e44f._comment | 13 + doc/forum/Odd_Hybrid_Symlinks_To_Content.mdwn | 27 + ...opped_even_though_enough_copies_exist.mdwn | 45 + ..._d43c3b97af1d9d2d4534b40a43567420._comment | 13 + ..._81e3664c6746fbeb2d76cca7160cf58a._comment | 11 + ..._d5b2b68f22796c3ecd2929f47db3601e._comment | 8 + doc/forum/One_repo_with_multiple_remotes.mdwn | 20 + ..._4b9b3137396a3e830fe96726401270b8._comment | 9 + doc/forum/OpenOffice___47___Libre_Office.mdwn | 5 + ..._98ed542fedd820d47bf8deb7d3232725._comment | 8 + ..._f313fdaa23863c2ae99cfbfe9ec2e1e0._comment | 8 + ...th_files_bigger_than_available_memory.mdwn | 34 + ..._2e89bcc3fbd069e5d9eb12c1c19993ad._comment | 14 + ..._cf8065e697a0a83cf3461672cb6421e0._comment | 9 + ..._e6bd4eb070a094116e13064dca6d5bb5._comment | 11 + ..._42adc29a2c3216910a3bcda04d6f6a6b._comment | 17 + .../Overwriting_data_without_getting_it.mdwn | 3 + ..._f1c0199ee9bffcc84287370b89361294._comment | 26 + ..._6a1d08dbca206129ef6cf8aa97daeee1._comment | 8 + ..._52958e76e506fdbb6b533681ab619b3b._comment | 8 + ...ing_git-annex-add_or_git-annex-status.mdwn | 15 + ..._4df2625cc1f1de8f164aa9500eb80e13._comment | 8 + ...anged_in_.git__47__annex__47__objects.mdwn | 31 + ..._e89aa61303d97bfd433e24173867723a._comment | 10 + ..._3e467d256ef7c2f4d469073c00cacbca._comment | 17 + ..._119c181afe351a412e8a13c59175ec45._comment | 19 + ..._0a9cec8f4e26c2e2365b54b29c91ee3d._comment | 41 + ..._df986910016ce53a6155edf96f4c312d._comment | 8 + ..._c4fe35a93ed32f7b14c5ffd5a4a8ec27._comment | 77 + doc/forum/Per_directory_numcopies.mdwn | 5 + ..._33497e3a46926595920eb3dcdb58447c._comment | 9 + ..._00572e3c15e5a9d253fb4ea57b45ff0d._comment | 8 + ...ns_of_triply_nested_objects_directory.mdwn | 23 + ..._068a8f120d188b8fa5d3e5b687fd02dc._comment | 8 + ..._cc0f5be21fd1523bdddc7bcf6ff04435._comment | 10 + ..._1133795276371c86cdd52b25a8b20c52._comment | 28 + ..._4e44289e6913797844e103f9cdf4c5a2._comment | 8 + ...ormance_of_V6__44___V7__44___V8_repos.mdwn | 8 + ..._981279bae881a07185707c29e6c58b28._comment | 17 + ..._01e6d32c85524a23399a33b5fb12ec06._comment | 14 + ..._71e8d6ed7b1a6088cdb5abb5667ee619._comment | 16 + ...rmission_denied_-_what_is_wrong__63__.mdwn | 28 + ..._b850a32cce4c9782e59fc91076b6cae7._comment | 14 + ..._e8d2170e5f830d0f98bc8251caf8bc5e._comment | 14 + ...ickey__41___On_second_Step_...___63__.mdwn | 36 + ..._6c74f0b43c457fe97b2d8630ca4fde29._comment | 10 + ..._b7a384e853e1756a684774348fad29e6._comment | 22 + ..._3a8a7f51cb04a92c576549d379b57248._comment | 12 + ..._582ad3ba0c62a77b08a10b37a780c670._comment | 15 + ...with_ssh_key_authentication_to_remote.mdwn | 24 + ..._39a096f92f0280db9502397b9fc55541._comment | 9 + ...g__58___drop_jpeg_if_raw_is_available.mdwn | 1 + ..._3f365138be319ac2c81bdefb3f59b0d8._comment | 12 + ..._0186f593ec084e12216ad2f7da49474e._comment | 8 + ..._0bc307a3fbe000059b23cf681d125ce6._comment | 17 + ..._0dc16ef1d592be0dfeb63c28014a70b2._comment | 8 + ..._9eb36b5b43b77de790f99ae1d764e4ea._comment | 10 + ..._a34d404dbecd6730c1cc28af9c0eac26._comment | 16 + ..._88b04371b3906f01c7b33d110838dc71._comment | 12 + ..._b3e9100b92aaed66b22c76141f7c08d5._comment | 14 + ...emove_sha-inside-sha_single-file-dirs.mdwn | 20 + ..._616f610876e08828e6ad6b89b9e561be._comment | 10 + ...git_status__96___is_slow_after_update.mdwn | 74 + ..._68429f9e44ce24250c608da8ffffe643._comment | 8 + ..._cefd5742da29e19f5ab3406698a13f9f._comment | 17 + ..._ab005dba805922597a533ddd661f20c8._comment | 10 + ...Please_fix_compatibility_with_ghc_7.0.mdwn | 1 + ..._d1d10217ebd0151e947b3a6cd37399ce._comment | 8 + ..._help__44___half_my_files_disappeared.mdwn | 14 + ..._ba7c79dd7805aa9ec1b90d643f6bf555._comment | 16 + ..._help_me_help_my_photographer_friends.mdwn | 18 + ...new_releases_not_shorter_than_11_days.mdwn | 6 + ..._da3d39de5be47ebe8b25a42ed1f36510._comment | 8 + doc/forum/Podcast_syncing_use-case.mdwn | 34 + ..._ace6f9d3a950348a3ac0ff592b62e786._comment | 10 + ..._930a6620b4d516e69ed952f9da5371bb._comment | 8 + doc/forum/Poor_man__39__s_IMAP.mdwn | 6 + ..._258ff23c462dc88b88ced405c4f5040f._comment | 11 + ..._c88d1abdda4cb526a6ee45a710c75bc4._comment | 10 + ..._3847e371db1c2788c075e7dca1fbd33e._comment | 8 + ..._cf6cc21f2cf2aa5c949844e24a7b4075._comment | 8 + ..._d861fa69475ce526841b3195be8ee356._comment | 10 + ..._1e81bd4bb62652bc674cdcd7ed57ac5c._comment | 12 + ..._b3929281dff6078d77f1b9ae42e25bb6._comment | 16 + ..._69506e8c519196f44b9ed15b32f00106._comment | 22 + ...able_version_of_git-annex_for_windows.mdwn | 22 + ..._e5e60fa8d104a09152a8164d5a906aec._comment | 10 + ..._d8d1aa0920351e880ba6678bb97585de._comment | 10 + ...le_bug_in_setting_up_Rsync.net_remote.mdwn | 24 + ..._dba203d6c701365685f1a0d4269633a3._comment | 18 + ..._47b14e71ce0dd653a300dabe8ab0ac3a._comment | 33 + ..._753ff00c43be5f9bef6bcb529ad68bb9._comment | 11 + ..._43f04bfbaeb4f04a5980ade59a36ae91._comment | 8 + ..._6dd6819103814056d8b71356804be56a._comment | 12 + ..._b90f349f00ea283d018681505b4feaf5._comment | 35 + ...ore_from_an_encrypted_s3_remote__63__.mdwn | 5 + ..._98033f3324bf78af886fa0f003f5eff8._comment | 9 + ..._ddd6a56d583fd5b9d676365f4ebd9b68._comment | 30 + doc/forum/Post-Kickstarter.mdwn | 5 + ...tings_for_sets_of_backup_drives__63__.mdwn | 3 + ..._54cdea3a60d61dad6332af31b2968bdd._comment | 16 + ..._c21e128f6bdd5408607b51c963854d4d._comment | 8 + ...ed_contents_based_on_presence_in_repo.mdwn | 5 + ..._2109fe43fccc6576e782a2e765eb6b50._comment | 17 + ..._f3adab92e7015245735f4bcad1d7a146._comment | 10 + ..._6aaf8226051e9dd104da206b032cfe5a._comment | 30 + ..._ffda2c94cbccab1d462a4e333816773b._comment | 8 + ...simple_USB_backup___40__for_WAF__41__.mdwn | 5 + ..._a02dd00950793814ea9617e0eec738ba._comment | 8 + ...serving_Directories_in_Metadata_Views.mdwn | 47 + ..._30332d3828324455600b0b452e3b6c5a._comment | 16 + ..._0decf76e18bb9fbc9b55e94f647a466d._comment | 19 + doc/forum/Preserving_extended_attributes.mdwn | 5 + ...in_directory_tree_below_objects__47__.mdwn | 77 + ..._5dd978f9b5a0771f44ab9e086bf5a07f._comment | 14 + ..._9f51947b35ee04e473655e20d56c740a._comment | 16 + doc/forum/Preserving_the_v5_experience.mdwn | 14 + ..._9b188fecb7eaeb3ec3ba47f4c5e17e37._comment | 10 + ..._d2da6d56980b535431d7f0360f58d04c._comment | 10 + ..._b15c92675cf6a5087ced6a649dd1b6c7._comment | 13 + ...n_Android___47___Termux_not_permitted.mdwn | 13 + .../Preventing_annex.ignore_for_remote.mdwn | 3 + ..._ec28f3ed75f2abad3d01a90c5b79c4b8._comment | 12 + ..._57703f8d610aae7fadb8980e77a408b0._comment | 8 + ...revious_versions_in_direct_mode__63__.mdwn | 3 + ..._352d460acd5500587e679d934180eee4._comment | 10 + .../Problem_compiling_current_master.mdwn | 14 + ..._135df61ec850c06e3b48ccfef7b5b031._comment | 8 + ..._fb3e27b6014e84bd919a7a4a95e39ef9._comment | 20 + ..._b737b3945103c5e2aa798b4e65fbce06._comment | 8 + ..._28c1b335ae388d4e1f22b711ac1c001f._comment | 8 + ...ith_Anaconda_and_git-annex_on_Windows.mdwn | 1 + doc/forum/Problem_with_corrupt_SQLite_DB.mdwn | 17 + ..._4e10e6d1882feba8d0c1ad058e01143c._comment | 9 + ..._98020b857e5b52ebbbaaeba1313f2697._comment | 7 + ..._079359513b6b9fcf0030f49df0eaf64d._comment | 8 + ..._6a5f8590e6a60be5afe6bc6ffce1c94e._comment | 17 + doc/forum/Problems_syncing_with_box.com.mdwn | 26 + ..._8db642849da4d42cd9a43142e2b7cb70._comment | 12 + ..._cd18f33647aebc04af5469e4ce1fbcd2._comment | 11 + doc/forum/Problems_using_blake2_backend.mdwn | 26 + ..._f3ffd27a9b515e867041b6cebfeeafad._comment | 12 + ...using_submodules_with_git-annex__63__.mdwn | 1 + ..._c7a927736d419d3c31c912001ff16ee4._comment | 7 + ..._26f6581b5969eb2cb77495c40de88951._comment | 11 + .../Problems_when_cloning_a_repository.mdwn | 22 + ..._191c091c384d8d97d24f8a77e8ff90ee._comment | 9 + ..._74ccbb09677444478074e9eab405fbaf._comment | 16 + ..._3436e26dd9fe07233a070d4e95d81cdf._comment | 16 + .../Problems_with_Assistant_on_Android.mdwn | 1 + doc/forum/Problems_with_FAT_links.mdwn | 52 + ..._1628c68ef7bdaedb01fcb897a447bb91._comment | 8 + ..._734850345a66d5df38c468ffaa1182cd._comment | 25 + ..._2728cd609cb5e792d1dc722d450e4c8d._comment | 17 + ..._0a5f0239b3b6376672c8d91eaf68a460._comment | 20 + ..._3c9dd1e2586b27911422066ca71f5298._comment | 20 + .../Problems_with_large_numbers_of_files.mdwn | 8 + ..._08791cb78b982087c2a07316fe3ed46c._comment | 22 + ..._0392a11219463e40c53bae73c8188b69._comment | 25 + ..._537e9884c1488a7a4bcf131ea63b71f7._comment | 8 + ..._7cb65d013e72bd2b7e90452079d42ac9._comment | 29 + ..._86a42ee3173a5d38f803e64b79496ab3._comment | 14 + ..._4551274288383c9cc27cbf85b122d307._comment | 11 + ..._d18cf944352f8303799c86f2c0354e8e._comment | 8 + ...te_changes_and_remove_adjusted_branch.mdwn | 55 + ..._84651b939b10b84df5e685393546732e._comment | 30 + ..._git_annex_proxy_to_mimc_undo_--depth.mdwn | 15 + .../Pruning_out_unwanted_Git_objects.mdwn | 3 + ..._0cf7a12bfa2957260f4b2f79b0cadf2f._comment | 8 + ..._7472943c02cfe2808b0d566e06caa1a5._comment | 8 + ..._6a1e7a83d94394454fc085f6d2728cd7._comment | 8 + doc/forum/Pull_files_through_cloud.mdwn | 10 + ..._ae71f9876c8376ba0d0ab424bfb66e72._comment | 8 + ..._f4dfc4b212e23f7443abfb28b5613f63._comment | 10 + doc/forum/Purge_a_remote.mdwn | 2 + ..._78b3b77f457c65d31fd8a5abf714905d._comment | 8 + ..._dc65719157dee63b3979563ed57ee0ce._comment | 10 + ..._63e0280273b816fa4b837724e102f813._comment | 8 + ..._7fad1c4798ca03a4095ac3241c279f6d._comment | 11 + doc/forum/Purge_whereis.mdwn | 9 + ..._89d2446e3c9a58ab7b2a85ff941f7c8d._comment | 9 + ..._0307ce47de9b719adc2096600d94dff6._comment | 8 + ..._e87b53ebbf8053bb17caeb2aed871212._comment | 7 + ..._72b6c28d8a4865ad8c84b1f7dfefb78a._comment | 10 + ..._966e0285639a41ee9db3e9fb337e2699._comment | 11 + .../Push__47__Pull_with_the_Assistant.mdwn | 1 + ..._f7b63d379c2d21794adf8658f546f8a7._comment | 10 + ..._aec8cc20576e7ffd5a8be4348d1a0073._comment | 21 + ...to_repair_hangs__44___broken_symlinks.mdwn | 77 + ..._c89b64b0dc7c5a760a84a9d2cfd8982c._comment | 11 + ..._c511691c4ea6c77e63ef85c28c921be9._comment | 12 + ...g_git_annex_repo_to_a_remote_ssh_host.mdwn | 1 + ..._4008b735809161d5950b7991d69d3f68._comment | 12 + ..._git_repo_to_AWS_S3_from_behind_proxy.mdwn | 9 + ...tion__58___git-annex-only_repo___63__.mdwn | 3 + ..._ada27f7b8c7dc3c388e6c56ef095e682._comment | 8 + ..._531e6a091c8d005626e4e8290ba317d7._comment | 12 + ..._321632cc794c00181932f5737db9aff0._comment | 8 + ..._941b62a63c11caa1ada5d544c2e926ca._comment | 8 + ..._0c0dad1ffa11f2f8708906d310a189db._comment | 11 + ..._426160c2237db790b133b9c9f0abd4b2._comment | 10 + ..._36bd0a398b385e65df7eda26fa5c50d0._comment | 7 + ..._32fb6930bcaac36d00b088d8ee09face._comment | 14 + ..._8278ee493da14aac86e928d2349d8173._comment | 9 + ..._3e24c9f9042d6abdafaae45015645b11._comment | 10 + ..._182c66e98086dbfde29b615d0cf0e8e4._comment | 19 + .../Questions_about_borg_special_remotes.mdwn | 12 + ..._bbeb30671d707f2a1d7ac0dbf342136e._comment | 23 + ..._5c10ff05b8e1714aa9b413d6b01e275e._comment | 16 + ...Reappearing_repos_in_webapp_and_vicfg.mdwn | 43 + ..._bd977e864ae89816fa7f4ff69879b15f._comment | 8 + ..._05749f9e75689d0111339b7126c12300._comment | 15 + ..._b1531994eea0fbbf4cb097e604378a53._comment | 12 + ..._f1eba3e8aa4116e3c20747ec1d6e24e5._comment | 12 + ...chive_bypassing___34__here__34___repo.mdwn | 46 + ..._901272a6f738bfe8a0289c4900fd0c20._comment | 8 + ..._aec1d16cb47b59dd4f2811b2956e5fdf._comment | 13 + ..._652d9957ead7dbf4feb3ba096137d22b._comment | 8 + ...nd_.git__47__annex__47__objects__63__.mdwn | 69 + ..._456772b5b0deb0c121d7feb5dcf41979._comment | 12 + ..._410f329fb47f13afc59b5b37b88a8c3a._comment | 84 + ...tChanges__58___link_to_the_diff__63__.mdwn | 1 + ..._85254a327ffed22b407d25610558c15b._comment | 15 + ...Recomended_Setup_for_Syncthing_Remote.mdwn | 5 + .../Recommended_number_of_repositories.mdwn | 4 + ..._3ef256230756be8a9679b107cdbfd018._comment | 15 + ..._with_semi-permanent_filename_changes.mdwn | 8 + ..._ec1c86e41ce3ee243df9a5008db87070._comment | 10 + ..._47b248b36146c5ad9986b69c8d212b4e._comment | 21 + ..._47951337fa2155b797b40fe19446ef51._comment | 17 + ..._12ae880e559bde5f75cb0c451b56b322._comment | 8 + .../Recover_files__44___annex_stuck.mdwn | 28 + ..._6d85c3ec73ddc0682d9643f4d5eeda70._comment | 18 + ..._52e799bb6f24a1ebed58fad6cebd3a71._comment | 17 + ..._686a285bc7e950aae67856c47e7cb21e._comment | 18 + ..._a4d62d494b340458e6535d573bade965._comment | 12 + ..._c10f0fe1440ccd170804a433db2267ee._comment | 12 + ..._14446cafac6c33a3f95b5344c42c0bef._comment | 14 + ..._63c19f58b7e95e39ba25a735bdcc0bcf._comment | 10 + ..._8e5c7572ab8d1f0e41fedf6f805b942a._comment | 8 + ..._e5357c63107f79571bd3ff609b4406a7._comment | 26 + ..._3316652073710f39965cd49ceea5c4ff._comment | 8 + ..._d605f755c363d56cf5f1060ad06ee173._comment | 8 + ..._f3ee184a4d3b8d82a8a362a6c03a54a3._comment | 54 + ..._341b47663d133411587ec70ef2b178c6._comment | 14 + ..._66c0d9284d5edbac189a64b03c4fe50a._comment | 10 + ..._8b32f6597f447f88bee7a80698fb4df6._comment | 18 + ..._4cc81169e99a453cdb6e83e57e638f37._comment | 8 + ..._2d104cf4682e04906f8ca0ced7288cf1._comment | 17 + ..._d356c4fce9f1197e5292f9dedf85bbc9._comment | 22 + ..._856c7e1575f5d99530ecd54004315487._comment | 12 + ...ecover_repository_from_bup_repository.mdwn | 1 + ..._6e3b1ff58fbdc10bcaca6d660eb1156f._comment | 35 + ...special_remote_after_git-annex-forget.mdwn | 11 + ..._265563f95a8ec5918314afc7e6226b56._comment | 8 + ..._4da1d3f6a37b8772838bae762d4c43be._comment | 10 + ..._5aff48172bb767ed03e96812e4f89f38._comment | 9 + ...ecovering_deleted_file_in_direct_mode.mdwn | 13 + ..._a3e6fc93669ec76656c84793d1f59149._comment | 11 + ..._98c01a756c5f2dda28cffa5dd1dea385._comment | 16 + doc/forum/Recovering_from_a_cross-merge.mdwn | 80 + ...ry_after_freeze_while_importing_files.mdwn | 3 + ..._d033b77b9417468e13076ff9302f2963._comment | 7 + ..._e14f330de3e9ebfa9a99c32e65d59d11._comment | 7 + ...ing_older_versions_in_local_git_annex.mdwn | 9 + ..._2a84bf661e0cbd5c8a558d3dbf5aef65._comment | 15 + ...oes_not_have_expected_content_of_file.mdwn | 44 + .../Reloading_.git__47__config_mid-sync.mdwn | 1 + ..._69e8879e0fed0e1b1589a721f9c6e3c7._comment | 8 + doc/forum/Relocating_annex_directory.mdwn | 1 + ..._13ff5438baa1db110beb6aab3a783def._comment | 11 + ..._6d88ff03fcf00ae872442e8a86c968ed._comment | 10 + ...e__39__s_git-annex-shell_not_detected.mdwn | 20 + ..._8354782cf0fab248e607c7eae59d6bb2._comment | 12 + ..._35e5d9b427963fc7b9618eb522bd1273._comment | 8 + ..._7fb6168197c3f16de9775a60b7941cde._comment | 8 + ...bled_but_is_enabled___40__maybe__41__.mdwn | 5 + ..._04144280b69a7ba0cfa4fa3e1b5ef4ec._comment | 7 + ..._2c0340e5eac6d712045614886a8403a5._comment | 22 + ..._2b1ac09cb8b5f5ec62a201785c2f6531._comment | 23 + ..._a8e68a41e069803d89f18d1645876298._comment | 7 + ...ote_listed_in_whereis_but_not_in_info.mdwn | 29 + ..._85cc355213f894e8c1aeece432de67c3._comment | 20 + ..._ddede3236f1d91ac4f0117b76267a021._comment | 12 + ..._607d5b01eb95906391337f7351e0193c._comment | 15 + ...te_server_only_for_the_git_repository.mdwn | 3 + ..._d4d8d8cfebf9a98ca8878c5684d5bb50._comment | 10 + ..._a62dec8ab98ac7bd65059a9e425a01e2._comment | 9 + ..._portable_HDD_like_normal_but_indexed.mdwn | 13 + ..._7caf32756f799b67b0c0588ea5e17a20._comment | 9 + ..._36c202f5883b66a431ae5e72c5ecede1._comment | 12 + ...unused_content_from_S3_special_remote.mdwn | 11 + ..._acfd4eab2cd80d722479dbb410ccfe2e._comment | 26 + ..._adc602d325b8639ac5bfed088c504e1e._comment | 8 + ...bly_restore_the_original_naming__41__.mdwn | 1 + ..._dfc64d8618e07177bb196d9af4474698._comment | 19 + ...g_files_not_found_by_git_annex_unused.mdwn | 29 + ..._420c6230e68de0a0ac7d7da91ac60801._comment | 8 + ..._58fcceb96647a8c7f33d188ae908f3bd._comment | 8 + ...e_local_repository_for_git-annex-info.mdwn | 32 + ..._6df9b666f7d948b9e03b2ecf9858f6c5._comment | 12 + ..._a13ef241d6d24b4abee3eedff18032a8._comment | 21 + ..._c75652b23bc4554d43593d1984c9c5d9._comment | 8 + ..._695a821eee66f8c4d4e22518edd15c40._comment | 8 + doc/forum/Repair_in_steps__63__.mdwn | 5 + ..._6a512ab2d6ea583a1913c9837e953760._comment | 19 + doc/forum/Replace_glacier-cli__63__.mdwn | 13 + ..._318cd0ca9f4e997161ed22fffa5d5da3._comment | 18 + ..._c91e393951825cdcceac845e234d7497._comment | 8 + ..._405aad8dd28ea035226f7fda470fde33._comment | 10 + ..._a863eb91006df199fcdbc98f42b2d40b._comment | 9 + ..._fda6c754437385afa0851e680bf17cf0._comment | 15 + ..._2e7b5b6cc7c2e33be36c3c510adec01c._comment | 10 + ...acing_a_special_remote_by_another_one.mdwn | 3 + ..._File_system_view_of_Git_repositories.mdwn | 1 + ...__dumb__34___client_without_git-annex.mdwn | 11 + ..._077c492fd37d335f74a5c886ff0d524f._comment | 32 + ..._00e6576e3e60d2650461eeb0f918e6e5._comment | 8 + ..._c36a9562c53ac683b62fc4471405aa2a._comment | 15 + doc/forum/Repository_backup.mdwn | 5 + ..._4d3197a1fefeb744e8b1e1b5fcf9b104._comment | 12 + ..._e362221ef3d13bd417b2b6b0c51738a8._comment | 14 + ..._ead30baf0a6d718569feb4002ba19b9e._comment | 8 + ..._6f20653dff70aaaea4460a5efb28081f._comment | 13 + ..._287510b4e8b9043fe361b7c5dc1f4e9f._comment | 7 + .../Repository_operations_stuck_suddenly.mdwn | 9 + ..._b0fa5b0e1b507e9a99e62849b1d66b7e._comment | 8 + ..._ff76dc687c2f632b39240d5e242d41f4._comment | 16 + ...g___34__get__34___or___34__sync__34__.mdwn | 9 + ..._8adf9c6d2a3ef29120703bfa1b8f9ae2._comment | 8 + ...___40____61____62___cannot_drop__41__.mdwn | 82 + ..._1db8c68e8d82ed169b4687dfb5da1ba6._comment | 8 + ..._ea362bb99294571f0b0e808e87b7d422._comment | 8 + doc/forum/Restoring_files__63__.mdwn | 11 + ..._735b98419b3ba6207cc364426b03ce74._comment | 40 + doc/forum/Restricting_SSH_+_supply_key.mdwn | 7 + ..._8bbd0b6488c23ce8b182bd6b1765c94b._comment | 11 + ..._3b946519c9f52569ce60ac04bdc3380a._comment | 8 + ..._cac35ac1ac0b300ddfac5ffc74291bce._comment | 12 + ..._e9803dd1794b4d078efa9435ff5ba295._comment | 19 + ..._1c3beb859e76cb69d2bacd2473ec72b7._comment | 10 + ..._1c541fc9a44e5cfb13c7d3ef0eeba2c7._comment | 23 + ..._4dbd5605f2638de0a3edfb3886a47938._comment | 22 + ..._a9c5b424a6acb2da152bf87b2e7617bb._comment | 8 + ..._93b7c2a5947fb6904c88cd5c120e404c._comment | 16 + ..._beaa350751eca4642545d1b83e528dd7._comment | 10 + ..._2faceeaf0d39f82e5d624eae19e4ca53._comment | 31 + ...-annex-shell_to_a_specific_repository.mdwn | 25 + ..._66544520bff71181e4a03ca583b0b458._comment | 12 + ..._2a210255e8535712c71fa183e56ab600._comment | 13 + ..._52cd4bd9694b2100b0e0dd2eafa9e828._comment | 8 + ..._4712a74774f60c29704d1e0f598caa78._comment | 7 + ..._27aa66428410cb8e77fcebccd2c6d1f4._comment | 10 + ..._b3a0db1c2f11770b7c6f13964f2d1784._comment | 7 + ...rieve_previous_version_in_direct_mode.mdwn | 5 + ..._ca3a999ed64c42b8df810115de205d2f._comment | 12 + ..._1292b34ff6d9976b2bd08748e1ba4e7a._comment | 8 + ..._699e816c0397f6db924feeab906f1151._comment | 8 + ..._d900388753de5870b7b9c0e8b8c06ed7._comment | 8 + ..._1360b936aa389a0ab5e5e453824b2ece._comment | 9 + doc/forum/Reusing_existing_annex.uuid.mdwn | 27 + ..._dc3d6efbf5c076bedd0c7a75ff5314bc._comment | 11 + ..._cdb21c9c47c8a116e82062c9354d9339._comment | 10 + ..._5544f712897e06024342aa1bdd68df1a._comment | 8 + ...verse_index_key_to_list_of_file_paths.mdwn | 8 + ..._acae766349a036040a03e75fa8ed34c6._comment | 17 + ..._716efb07d216d9a063bb9498c8e76ea1._comment | 15 + ..._6b75bd75623004f05f609a39e95250ab._comment | 33 + ..._e54268d93837b3b8e216ec6af074f3c6._comment | 9 + ..._022728be6cd3ac168a74d16baf29c0e1._comment | 16 + ...Revert_file_linkage_to_original_files.mdwn | 9 + ..._898ca2c9976e92d22470c7404aa9813f._comment | 10 + ...t_to_a_precedent_state_in_direct_mode.mdwn | 3 + ..._1ae9f7defbab44621c3108973a4f683a._comment | 26 + ..._0bcfc0e89de7072bfdf1e3cdeaa16a1b._comment | 11 + ..._e49a37f92a3dd7d386e1e5f37ab37df4._comment | 12 + ...evisiting_migration_and_multiple_keys.mdwn | 22 + ..._a85c3c7af6b1e01f887e0e1ffe2cde6f._comment | 10 + ..._b5545aba08c7af2f8f56caba66232c41._comment | 13 + ..._a712ec9b616ca45976154fd0c98ae1c4._comment | 17 + ..._7d367f38250a4a3454299170700d5c6c._comment | 58 + ..._93b85fbe5c36e986cf7c1fc87070c04c._comment | 10 + ..._3db8d28e13f6508e22e8488a6faaa8b2._comment | 22 + doc/forum/Robustness_on_failing_hardware.mdwn | 30 + ..._d89ffbebe59d05fb2c47d957792cf97e._comment | 21 + ...n_a_server___40__no_X_available__41__.mdwn | 2 + ..._dd75d78ef63f2689199a302ed1846017._comment | 8 + ..._df654df60c5fa6a84d786d248928a352._comment | 11 + .../Running_assistant_steps_manually.mdwn | 20 + ..._e14e0a1d55d01cb4f67a94bbe349b872._comment | 20 + ..._3192f614c929b8060d4fbde56a7adec1._comment | 14 + doc/forum/Running_out_of__inodes.mdwn | 17 + ..._abc73d9ad662ef642337b683bf0a0253._comment | 12 + ..._30d58cb046b13d6ddd435ad0ae2f0ae1._comment | 44 + ..._31926fc5c095a1d12d4005958047a3d0._comment | 15 + doc/forum/S3_Host_Question.mdwn | 11 + ..._8c8ecea703405753e47e0da5e8325929._comment | 11 + ..._3d6fa3147d59a5e0d10b005388b23c7a._comment | 8 + ..._797edf3ad41561ab8960f3b28d20611e._comment | 8 + ...nsafe_to_drop_from_another_repo__63__.mdwn | 5 + ..._536a526a78a775142ad66c0689411c6a._comment | 8 + ..._48d27b557d31f25fc4b2fc7e4ef55df3._comment | 17 + doc/forum/S3_remote_not_available.mdwn | 31 + ..._0caf92239fb1475cf03de45f0d25291d._comment | 15 + ..._5895bd050237d08314e3595d93455830._comment | 9 + ..._b685f1d172cca4c488a517024c86ba21._comment | 8 + ..._ff5ce14bd27b32fc1707426f8c2a5487._comment | 7 + ...mote_transfers_queued_but_no_movement.mdwn | 3 + ..._fea4e2317f850d6166480cddba088ae5._comment | 10 + ..._Jabber_account_for_different_annexes.mdwn | 1 + ..._90c3954fe11980eef42b5f5d34f83488._comment | 8 + ..._802600b3568e5f94d0550092b22975db._comment | 8 + ...er_group_multiple_time_during_syncing.mdwn | 8 + ..._files_are_synced_over_and_over_again.mdwn | 58 + ..._1260b5ede5a88a95e98855363455ca41._comment | 7 + ...ching_metadata_and_file_content__63__.mdwn | 11 + ..._25ac180194a59b659e0b02bb95dd26aa._comment | 45 + ..._5dd29566dacb5ca70340d54b469c40a5._comment | 12 + ..._67715b73349dc92e9746b234024057ef._comment | 18 + ..._b8fbd129664c9680cd77f89185974741._comment | 9 + doc/forum/Securing_a_shared_ssh_server.mdwn | 3 + ..._ea971b57d94db5b8d487f728faa5e9a8._comment | 10 + ..._421a19f6e1fb40db6ee205daf8e3f867._comment | 15 + ..._acdbf92f646dbbf691621f08b3d94c26._comment | 12 + ..._67533d08e1b8706b844262e9c483d982._comment | 15 + ..._bf193e02b388b4358632a169d2425b5c._comment | 10 + ..._50d391992cd444080ebc70db30b215c5._comment | 9 + .../Sending_requests_across_the_network.mdwn | 15 + ..._8ff713d4c968705061bf2044ea0fe5a0._comment | 10 + ..._cb29e5346a8775d87d30b18b7fc005a7._comment | 10 + ..._9859c46db3527ad329c8e0df06edd153._comment | 11 + ..._b228914d2a3d7838ebc8f1cae4d8b59a._comment | 11 + ..._3dba5baa95b43f542fe3737397b8c7a8._comment | 8 + ..._6ef44abc1c279abf315b949d2f947fa4._comment | 8 + ...ying_the_groupwanted_expression_does..mdwn | 27 + ...ial_remote_with_non-standard_ssh_port.mdwn | 13 + ..._1eb6990e93ec92cb6fd7dbee59f31072._comment | 13 + ..._c85d5167e7ccce1ecf1de396e72ce7bc._comment | 8 + doc/forum/Several_concurrent_operations.mdwn | 1 + ..._885edabc67687e727ab1a111d7d10d1f._comment | 7 + ..._581e53306e47ddb826c030333f9ae9c2._comment | 9 + ..._fe49537fa9e0a284705543b010e7aea9._comment | 13 + ...al_lines_for_one_remote_in_remote.log.mdwn | 3 + ..._fdfb0099924f19fcbf334498d31f1656._comment | 8 + ..._f45a9c92de2d0271e6a427810794b0e4._comment | 7 + ...files_of_a_repo___40__Assistant__41__.mdwn | 6 + ..._ec0d56cb31b918023a9184cee168b406._comment | 8 + ...are_with_friend_copies_only_sym_links.mdwn | 38 + ..._a8d22dfefb219f0c9130cc294364b198._comment | 17 + ..._Encryption_does_not_Work_as_Expected.mdwn | 11 + ..._793c71a1efcf160e1829bec3ef0b1be6._comment | 10 + ..._6b603265a2fc78bd2df54102bf94234f._comment | 12 + ...ed_directory_with_non_git-annex_users.mdwn | 15 + ..._a56cb4993982e030eb9fd4cdb3b0c368._comment | 50 + ..._in_special_remotes_without_git-annex.mdwn | 16 + ..._d214446e2b5a95a6e14b288457e53305._comment | 20 + ..._d7cf8754a3e923d3f90be44ebd224d18._comment | 10 + ..._cf81a5c0d055875a858dd1e6a137b53c._comment | 17 + ..._82be119d86818f63da519fa1669d8cdd._comment | 82 + ..._9852ed3def9f7c73924d8be88b8581e5._comment | 10 + ..._cd56ee6915acb9389876b7a4b7c0e728._comment | 10 + ..._feda43ef61bc7676c3fd8c9308605650._comment | 16 + ..._da33ab62284728f832257014c351f151._comment | 18 + ..._eb448e997e4dc77c845bc4a9462ee128._comment | 19 + ..._7001fb7530f2ee1591b400195f702cd9._comment | 8 + ..._a27a661e8b589cffb4acad3591586433._comment | 12 + ...y_without_git-annex_on_central_server.mdwn | 10 + ..._286c963b30eee46b261d64937cf66d06._comment | 8 + ..._d1f803b68c3789854e483da1318d043d._comment | 17 + .../Sharing_annex_with_local_clones.mdwn | 1 + ..._2b60e13e5f7b8cee56cf2ddc6c47f64d._comment | 12 + ..._24ff2c1eb643077daa37c01644cebcd2._comment | 8 + ..._5359b8eada24d27be83214ac0ae62f23._comment | 8 + ..._5c870c49d8093e1a2895224cc6e91ca0._comment | 8 + ..._0bf4c0aa3258b156a3df794d5fabb6a2._comment | 23 + ..._d2ebe3cc20ec8b7c778c7b22aa62896c._comment | 8 + ...47__NFS_while_running_assistant__63__.mdwn | 15 + ...al_remote_verify_source_content__63__.mdwn | 74 + ..._6de754a926c5ad0e2da6cf6a1c58ce69._comment | 13 + ...Simple_check_out_with_assistant__63__.mdwn | 2 + ..._ade8a0743ef1ec933c8a40ed64eeac2d._comment | 8 + .../Simple_question_about_web_remote.mdwn | 27 + ..._a732a7264b60faed29782a034c0bc592._comment | 24 + ..._274810bdc176984c056304e17668c63b._comment | 16 + ..._984a3b05bcc6b24430210d9ae039a026._comment | 30 + ..._510abbb4deca924020b87f1eb7d61005._comment | 15 + ...y_finer_control_over_file_whereabouts.mdwn | 18 + ..._bcb883d46a637dd1a8ef9a92733d202a._comment | 10 + ..._b7a8b9eaf114f883866fbf2be51b622f._comment | 8 + ..._6236bcfa9beba705ead3ec2141c5d835._comment | 8 + ..._ea935b37ca93e73c85d04df7c9bf6057._comment | 12 + ..._f89a8e38283ac4c8c4a3b74c413d67a1._comment | 8 + ..._07a0a754a089c46ff69dc97ea7ba9384._comment | 22 + ..._e884c001a556a0c693d1cc9a97c068ac._comment | 8 + ..._3e8674b5857e4994dfbc26be4f4b2855._comment | 25 + ..._7aeabc2e52a39423e83fbd04560e8f91._comment | 8 + ..._53b95449cfad2fe0f72d2ad642822c03._comment | 15 + ..._a17c102a45e4fc3f101a79acb8eb4081._comment | 18 + doc/forum/Slow_direct_mode_repository.mdwn | 48 + ..._63656f103d418b35712a68f771ed559c._comment | 9 + ...ow_transfer_speeds_on_copy_in_Windows.mdwn | 3 + ..._dd4ebb10ac87e3ee6158b7e7b1273a81._comment | 12 + ..._9ebd40fe286f6c13f1021bf360e9c48e._comment | 8 + ..._c169ad6205c998f3d44f9c0859071b2d._comment | 8 + ..._aee3fc6be01bb75709451eea0decf112._comment | 13 + ..._b1841fc129a9ce6d1c22840ee648f958._comment | 13 + ..._1ce9bb47dadd2b1c500b2a20fd669907._comment | 9 + ..._4b78b200b884c4ac7c052055b3e26784._comment | 8 + ..._97ef11581c5dc6eeeabb4b244bdc6c30._comment | 7 + ...rrassing__59___git_export_not_working.mdwn | 243 + ..._70a68381641ea3369cd19e2864de753c._comment | 16 + ..._57ce71a398b0e2c947164e97ba8d0e2d._comment | 13 + ..._b7dcb0a5e69e620278d1aa4d6f5829cd._comment | 79 + ..._a5822d922a107e2a0e8972b7f55d92cc._comment | 17 + ..._edbc4191d6444dfe50f4c1d7bbab572d._comment | 29 + ..._b5072042bda56ad5a781aab8419ede74._comment | 13 + ...Some_files_missing_extension_in_annex.mdwn | 11 + ..._12ab578a4390c0f5896106906997de4b._comment | 9 + ..._7fa25274fb00ba823b112d587c52df76._comment | 11 + ..._b05b478e91f58bd4ccd6d8ccf3b7ddf1._comment | 12 + .../Some_mounted_devices_not_detected.mdwn | 3 + ..._0ba07b95f12f57ea63bb450b88430c45._comment | 8 + ..._4f8c7bcd0f20dafa5635a3580ec8d1f6._comment | 13 + ..._06c0db7d670d9b82823102d22db15a36._comment | 10 + ..._80820a29361c5be4a94672dacfdefa6f._comment | 8 + ..._directories_in_root__58___000...ffff.mdwn | 22 + ..._20147b287fd995fa8ac9e868b5974d8a._comment | 12 + ..._f6d977a534264b4368401e1b13628931._comment | 8 + ..._d534da276b79a40fdb7d8d158f6eae26._comment | 8 + ..._8c817d08ca9d94a1228fb21cd0b15744._comment | 8 + ...al_remote_public_key_encryption_issue.mdwn | 18 + ..._a9caafea017a3c148f89d4ddeee15a4c._comment | 10 + ..._adfa582d611ca501e21110282df07315._comment | 18 + ..._eac16bf98a6e87461ba2f3ab7e990b2b._comment | 10 + ..._097f52aaf178340b3abb5bfc80f0d447._comment | 8 + doc/forum/Special_remote_without_chmod.mdwn | 12 + ..._4f5f9506cae72a1f321296fc5a5f339a._comment | 8 + ...pecial_remotes_description_misleading.mdwn | 17 + ..._5226553dd5f529e3e4882ea18c3be600._comment | 8 + ..._616cc2f7d729682c69a9379df785dda5._comment | 12 + ...Specifying_private_key_for_ssh_remote.mdwn | 7 + ..._94d38f788ab5bc34da9ba56c2fb729b5._comment | 9 + doc/forum/Speed_up_remote_transfers.mdwn | 5 + ..._bd97e1c47338322c5232cea7cdbc26fc._comment | 18 + ..._723b3b69d47c947e5cbe8e94b84df022._comment | 9 + doc/forum/Split_annex_into_multiple.mdwn | 16 + ..._e934b404f738cbd67df928fd6769e3ff._comment | 17 + ..._eec6bc8c49c08411a4bb2cf7cc1c4697._comment | 13 + doc/forum/Ssh_remote_on_NAS.mdwn | 34 + ..._1dd8a0d0e70a1fb36fce62e89c99b404._comment | 10 + ..._261601313d8825c52322949b8509bc74._comment | 16 + ..._ed602f4f972b78bce4f62bdfca8cfe47._comment | 11 + ..._423244f174123318f1ece7b5794aeea5._comment | 28 + ..._07348ed61ccdd93417365f1525a05bf2._comment | 8 + ..._26d444afe2edea3500f80bb5c62ba491._comment | 14 + ..._3c70f8b9ac2a77462c6f21929c02d9d3._comment | 11 + ..._left_in_.git__47__annex__47__objects.mdwn | 39 + ..._2aa80b317863a99e676a375d907d0e84._comment | 13 + ...andard_groups__47__preferred_contents.mdwn | 14 + ..._143aa3095d7222c869c36a5039282e35._comment | 16 + ..._65bef012eb113986a2e9b02470a6cbd1._comment | 15 + ..._202a7e2820e0adf079ccd14a7993ad25._comment | 21 + ..._e0faf9ebd3162e0de860eba0fd28c67c._comment | 15 + ..._eb47696244931173bddcbeb8d5f78637._comment | 13 + ..._c70c9fa97bce8e4eb9b3880d8f843aef._comment | 25 + ..._413593ea0663874196305c9eb602e7c4._comment | 7 + doc/forum/Standards_usage_pattern__63__.mdwn | 8 + ..._1ccbfaefe3bbaf767e999cd1c61debfb._comment | 9 + doc/forum/Starting_assistant_from_CLI.mdwn | 9 + ..._afd51ddb0f1bb3cac528e1d96829ef83._comment | 12 + ..._76c34c00cf2065809b15a594023a688b._comment | 11 + ..._f7826867f78b1adbfc2dad2fad4d6720._comment | 17 + ..._fa7055a232a1dcb743db47308f7acf0b._comment | 14 + ..._8d657646080bf2b99b7792993b877502._comment | 15 + ..._Google_Cloud_Storage___40__GSC__41__.mdwn | 1 + ..._addbedd6ee8a534c5c4f0e639c05591c._comment | 79 + ...crypted_on_special_remote_with_gcrypt.mdwn | 12 + ..._5a643827a1ced7c0b9bba5303f71a52c._comment | 8 + ..._92e1aef2ce26210b15a908e2cf729b80._comment | 9 + ..._12a72b294e2808b09bff6788cf2b19dd._comment | 10 + .../Storing_copies_on_LTO_tapes__63__.mdwn | 13 + ..._9ae9ca3983f7d4209fd1de65d982731d._comment | 31 + ..._6d16d00c7ef8d846e370e1b298a7bc7a._comment | 18 + doc/forum/Storing_git_repos_in_git-annex.mdwn | 27 + ..._ac7b52c0b0f75d79760ffe6a9b5c8759._comment | 20 + ..._3bec1f02ff1a61791e3cbb428c7acb4c._comment | 12 + ..._76ddbd27cc2f3785bb5aaebb0bb6e087._comment | 14 + ..._f9520cbc6669622aa342acad35581943._comment | 14 + ..._4a5ddb1980b9ba0378531a8d4fb93523._comment | 8 + ..._d5676400e7148b7d3408f2bdb3d54b7d._comment | 8 + ...toring_uncontrolled_files_in_an_annex.mdwn | 3 + ..._175645a90be0c79221c129308adf643e._comment | 27 + ..._d29f214eadfe3bfd098bbc3bcf07129a._comment | 8 + ..._286b502e7906cca50e9e747db735bc88._comment | 10 + ...for_dealing_with_an_old_archive_drive.mdwn | 12 + ..._7405e507dd15f207445be1e5099e02f3._comment | 23 + ..._bafde6d22fdb5106c2e4a519e5945072._comment | 12 + ...__15__58___hGetLine__58___end_of_file.mdwn | 24 + ..._7bcc0111015985bde398a2a1a02b28ba._comment | 7 + ..._b1dfc6168bb7127312d3e06cc0939b8d._comment | 11 + doc/forum/Stuck_in_a_bad_state.mdwn | 10 + ...tupid_mistake__58___recoverable__63__.mdwn | 31 + ..._00ceb3a5e37825c4bbc806f532893706._comment | 23 + ..._cbedc29678d9b6af3b3c0bb1915d2391._comment | 12 + ..._86aa4d92a1330811862da1ba568b3037._comment | 42 + ..._6d15bf8a3c3c27cc92957070161675a9._comment | 12 + ..._f836b9b1d03d94c49e3798961790b2ba._comment | 21 + ...bmodule_.git_not_converted_to_symlink.mdwn | 13 + ..._5d95da69235eb3c6b60227544380a4e8._comment | 11 + ..._351c58b21d36770729c52991901d668c._comment | 12 + ..._636fe0ff273cd8987168e3095929aa7f._comment | 15 + ..._ssh_server_back_into_android_version.mdwn | 9 + ..._5c2f376a82458c6387560355940419d3._comment | 12 + ..._6321dec0b2f22f841f3cb986e063113f._comment | 8 + .../Suggestion__58___downgrade_error.mdwn | 5 + ...tion.1_on_git-annex_windows_installer.mdwn | 13 + ..._3b1da8ce0dcf43efcdc9b264ef21fb3a._comment | 9 + doc/forum/Symlink_points_to_old_version.mdwn | 13 + ..._c9c777333a01865e95332ea7ff1e6cf7._comment | 41 + ..._9bf097d27a64743a420cba0136787165._comment | 10 + doc/forum/Sync_All_Missing_Content__63__.mdwn | 1 + ..._fbe27e8dc9dd85e860b3382f99426c14._comment | 18 + ..._d77b7f56dcb8bf384f5a19bf54fe629e._comment | 9 + .../Sync_Enabled__47__Disabled_Status.mdwn | 1 + ..._cfe98bdd50cea0fd0e36a42892262084._comment | 15 + .../Sync_files_from_remote_to_remote.mdwn | 5 + ..._c5247657a5b3cd68fd55112efe97ef99._comment | 8 + ..._634e399d21271f26f7f77c15c5fb132b._comment | 7 + ..._b89701582b40e2c337a1a49733877210._comment | 10 + ..._b3ad93e032c3c9d2312970711540bf92._comment | 7 + ..._bdf293d30692311983d0586231535bd4._comment | 20 + ..._fda62d735035213f2a0b5b2fc95991ab._comment | 11 + ..._77c6550397435e9601fbae467be90976._comment | 12 + ..._4d3c05acc310a21f6c8ab77fb2638a8c._comment | 11 + doc/forum/Sync_files_via_remote_server.mdwn | 5 + ...her___40__rsync.net_to_s3__41____63__.mdwn | 1 + ..._68e73ffa29338214fa030c5f0e2823c6._comment | 8 + ..._3d57de3c12527e5a4b30ff7982ae749d._comment | 8 + ..._94b40e68418f732322c9a01418688165._comment | 8 + ...ot_available_from_my_central_git_repo.mdwn | 7 + ..._b31d02c97447996495de73705ac39f71._comment | 12 + ..._098465ae8af32931779d2cd63750d5dc._comment | 10 + doc/forum/Sync_with_one_offline_peer.mdwn | 11 + ..._3859d842d4f7e2ef44877b05ebe881fb._comment | 20 + ..._c9ba3983b37b0c1868269616fd81e518._comment | 14 + ..._28b9c003b4560c3ce90c9ebf808b091b._comment | 10 + doc/forum/Sync_without_jabber_account.mdwn | 9 + ..._3e95ac2e67451f953cf0538094109f8b._comment | 10 + ...ize_large_files___40__VM_images__41__.mdwn | 10 + ..._619f6ed2d7da5832ab253d61b6dd8044._comment | 10 + ..._bbd98d0b5d77dc7efc55ef8c2a18d612._comment | 13 + ..._6488bbe6f39e7154f950530498e9b548._comment | 22 + ...chronize_two_latops_with_a_ssh_remote.mdwn | 3 + doc/forum/Syncing_Compressed_files.mdwn | 1 + ..._e44598cd735830a8df9a29e0031d34f1._comment | 10 + ..._db1ea446ae9720fe1651c56da38e7088._comment | 158 + ..._885c045c8ddfccbd426a6bc1bc053435._comment | 7 + ..._d619d9b7ad4ca3f2fa9505ea928d5bf7._comment | 17 + ..._0c7af752cc35013273a07a5fa1f71f6e._comment | 7 + ...yncing_machines_on_different_networks.mdwn | 9 + ..._1c3523c722c178a96b096a68b9be4165._comment | 8 + ..._d7b14ffee65072329cfe9ab08a0dba50._comment | 8 + ..._65d1dae9b76fccb5f2b8fd8c69b60075._comment | 15 + ..._2ec67428af69d6c0ea051c6a67d58905._comment | 10 + ..._5ce093f82a2aad3fd8d7ccd5fdcab94f._comment | 8 + ..._a55982c28d7b90e0b70ec2bb5e594e08._comment | 8 + ..._c519d546e1a2a4e834609f3de3a605b0._comment | 8 + ..._84a822238ddbaf211cce5f527c3559d3._comment | 8 + ...nclude__39___rule_for_duplicate_files.mdwn | 17 + ..._5d776e90c24c4eed14ae01c6019c76b8._comment | 8 + ...emote_from_a_different_computer__63__.mdwn | 4 + ..._cd55d06a4065b9d3f14d50674c3fcaf7._comment | 8 + ..._25cbdf478091af9923090e049c432a7d._comment | 22 + ..._7e71d355457d6b1a0391d4cdae6895e6._comment | 16 + ..._a73f67f2fcf0762fbd7c8366b3844af6._comment | 11 + ...nisation_between_3_repositories__63__.mdwn | 11 + ..._ca5192a26950627a1c2efcb55d6d2fa3._comment | 10 + doc/forum/Termux_Android_8.1_Proot_Error.mdwn | 17 + ..._1ef5f1b83e1bc0061d9fb1bba601a692._comment | 8 + doc/forum/Thank_you.mdwn | 5 + ..._3be1d5e92c3abc222713c75169b43dfb._comment | 8 + ..._while_committing_it_repeatedly__63__.mdwn | 3 + ..._3cbe520b184d323219cb402ff046c3b4._comment | 29 + ..._6afe7f593e955db2eefe87d9fa01882b._comment | 8 + ..._209399487fc4f76b29f03ad82dbc2d6f._comment | 8 + ..._f33fd6f72cb9ad7dd20a04c82199413b._comment | 26 + doc/forum/The_future_of_Direct_Mode.mdwn | 32 + ..._f16f6e41f01d59ccef9666a2ec46d294._comment | 32 + ..._c7408d45d0a2a854020e4169fe757d51._comment | 7 + ...lowed_commands__58___scp_rsync__160__.mdwn | 5 + ..._68e911629da672473bd6188407a68be2._comment | 13 + ..._glacier_remotes_for_archive_purposes.mdwn | 22 + ..._c874e49e668baa1fed293318cef88dd0._comment | 8 + ..._28926e01b82de55352702182730a6b4b._comment | 12 + .../Time_for_another_user_survey__63__.mdwn | 2 + ..._e746e11d30049906758a015059658e16._comment | 10 + doc/forum/Timeline_of_git_reinject__63__.mdwn | 50 + ..._e88d612590d3cd0c2ea824c1e8a38678._comment | 19 + doc/forum/Timeout_sync_faster__63__.mdwn | 8 + ..._eb4c13c1ad9803f402215478c0baab2b._comment | 12 + ..._16d655b754d2d512c2b01bac8276f31c._comment | 13 + ...ory_with_some_hg_and_git_repositories.mdwn | 1 + ..._9fc3f6c2f7379755e0084a850fa9acd4._comment | 10 + ..._f024d6a105143af1e06aafe49661ee06._comment | 8 + ..._aff0093c38bda8b093f05e8cbe8775e9._comment | 8 + ..._c889050d3079edefc4633451bd5baff8._comment | 11 + doc/forum/Transfer_remotes.mdwn | 3 + ..._c08cf3bda00d7f20a3ca3d0fdba19c9c._comment | 8 + ..._98930629d398329f1161135464a966a5._comment | 12 + .../Transparent_compression_of_files.mdwn | 5 + ..._7242325defa000572ca8e78e29012451._comment | 9 + ..._a75e32b0825de0b405c45de14b9711c0._comment | 14 + ..._a876239d4a2fe96f2e2fe1c16e7f202b._comment | 11 + ...ssh_remote_using_assistant_on_windows.mdwn | 19 + ..._0055392bfead0dd1d9dc1a196a6e5269._comment | 14 + ..._3ec8af32b8148d31aaa3ba781b4dcf89._comment | 7 + ..._8ddec87534a9025c26394fecd5456b84._comment | 9 + ..._9c12c508f62f2e76d09f4ed15af9c74e._comment | 8 + ..._b496f6938bd463de501eaa5c1850ce5c._comment | 7 + ...stalling_from_cabal_on_debian-testing.mdwn | 17 + ..._0d3e9d7cffafc34bc212557e8bbb987d._comment | 12 + ...public_repo_cloneable_from_a_web_site.mdwn | 35 + ..._34a858688c46faf624fa7d98b05e6519._comment | 11 + ..._409103144cf803ced9d81d3380ca76fb._comment | 13 + .../Truly_purging_dead_repositories.mdwn | 1 + ..._a4c75d49714b3543a9f1617a15d4a2d1._comment | 8 + ..._3da60a02e7323a204c5c5dd02ba04d6c._comment | 8 + ..._2576e45436008ff5a7ae5a38cade658e._comment | 8 + ..._477e3c213c5a5d4a33afd42a5b94c718._comment | 10 + .../Trying_to_delete_an_S3_repo_fails.mdwn | 3 + ..._d8ab7757cd224439d55a18bfec405772._comment | 9 + ..._94653e0c2c9e3e3be45c383442c7ec9b._comment | 8 + ...backup_repos_that_sync_with_eachother.mdwn | 30 + ...nd_git-annex__44___need_some_feedback.mdwn | 39 + ..._86a86f1f3ea2e778e4022689391b887b._comment | 16 + ..._77d61eceec24d2f41f044a643d8542cc._comment | 25 + ..._529cada8df4888c12254818c26231835._comment | 10 + ..._1561613ff2f0f3d7b42159d09ae1c7f7._comment | 10 + ..._59991756981681648070d03e2277ccbb._comment | 8 + ..._eeafd62249d44b89d1091f0be79b3086._comment | 18 + ..._24a20071d43ded3be9c4c68a637ca4f5._comment | 8 + ..._8ad6bd5fce8f9bc1622f225c162ae167._comment | 43 + ..._6406fcf0021ac8266b4f2ef850be0fa0._comment | 12 + ..._backup__34___repository_groups__63__.mdwn | 18 + ..._b8702892280447193e6e80be22a580a0._comment | 11 + ..._50cafde7e30b928480d1f142ddd763d2._comment | 10 + ..._no_Jabber_-_how_to_setup_sync__63___.mdwn | 7 + ..._b90aef011d853ad9feb6f8edc08bf7d9._comment | 16 + doc/forum/USB_backup_with_files_visible.mdwn | 7 + ..._b90b18ca57f9299f1920254bb2aa699b._comment | 7 + ..._2832f8ae24dfb0f101e06f7c18283028._comment | 14 + ..._6163e01aa441f8435091f026cc6da337._comment | 8 + ..._ee92ff320eb5d9a031bdd1896aee0d86._comment | 11 + ..._437c8342c0b65e3a89129800313eb73c._comment | 10 + ..._5e10cffe8465ea4ecaa71c03a4c29ea4._comment | 8 + ..._add048a16837f7940a859f21426cdbe9._comment | 8 + ..._de227ca9911fe57d7a6d3e037f574fe9._comment | 14 + ..._0c0ed0e038f7f0e2d2d4ed69b7b29fbc._comment | 10 + ..._dfb830fb00c10b797c3d26179e6dfefd._comment | 14 + ...nsfer_group_keeps_growing_-_assistant.mdwn | 22 + ..._0a6f6054d70009979f4a036e24b7c500._comment | 10 + ..._f9eef3019fe690e90c1228d62a16f70a._comment | 10 + ..._7fb74f7fab6c1baff4ffc270cf15ef0a._comment | 15 + ..._5925b609aff0954f2860269cff107284._comment | 8 + ..._45062d5776f8aefb0850d70f2a517c75._comment | 12 + doc/forum/Ubuntu_PPA.mdwn | 3 + ..._b55535258b1b4bcfc802235f0cba075d._comment | 8 + ..._adc4d644fed058d1811acf0b35db9c18._comment | 8 + ..._fc9cd51558c47718f243437202a11803._comment | 8 + ..._3a8bbd0a7450a7f5323cd13144824aea._comment | 12 + ..._2e1beaeebda0201c635db8b276cedf20._comment | 12 + ..._bd99fb70399fc58d98781a89c6d38428._comment | 8 + ..._c3f7ec8573934c59d70a48e36e321c13._comment | 12 + ..._feecd478a4d44cb5ffc7020c646174ba._comment | 8 + doc/forum/Un-git-annex__63__.mdwn | 6 + ..._6059265afb66190d325083e0f28bcf33._comment | 10 + ..._fac4bfb81dbbf0dc82059aace261eb51._comment | 10 + doc/forum/Unable_to_change_RSS_feeds.mdwn | 8 + ..._9f6517f3c6dc8cd4e27d0011efcf2bb5._comment | 8 + ..._9ed0f746a199bb0ce474b2e9fa4f0a9e._comment | 28 + ...pping__34_____38___cleanup_of_history.mdwn | 9 + ..._08dbad67df1d8f07d3883c6fed2fe0c4._comment | 16 + ...ndo_Git_Annex_Changes_To_Linked_Files.mdwn | 7 + ..._568dde820c2608d86d05b07444146a26._comment | 13 + ..._a8cf71cdf1217d9c8596cd9006eb83f5._comment | 8 + doc/forum/Undo_git_merge_git-annex.mdwn | 3 + ..._0b15f7a8c3bca87dcbf748a229e13a4b._comment | 8 + ..._c5a8839c53145a3b0d44950096c5180f._comment | 9 + doc/forum/Unknown_remote_type_S3.mdwn | 5 + ..._2aea2cd51286c809427d16519606cd37._comment | 8 + ..._06f775062cd30767979fe56bcb3cf7bf._comment | 8 + ...files_when_assistant_is_running__63__.mdwn | 13 + ..._3f4aadf0c856c81e15c6f5ae7f1992b4._comment | 10 + ..._a76797ee9e05e43af7947508cadd7bed._comment | 9 + ...3___Having_all_its_new_files_unlocked.mdwn | 13 + ..._cd08064d171bea606df1cb7dafbdd381._comment | 8 + ..._6da3347c2d9243a9fe61fd75999d6f36._comment | 12 + ..._78dfedd93393709d3d7e417b779109d4._comment | 12 + ..._bdd6cb9cdf2366e5d930c0cdd80b3984._comment | 13 + ..._7a2109bbe16de4c05db48763d00bfaf1._comment | 18 + ..._9ed97ec6e540f2b795bf5bc11fcfdc90._comment | 13 + ..._c6f1dd606d2aa9aa473cdd3a6d92bd33._comment | 11 + doc/forum/Unlocked_files_confusion.mdwn | 40 + ..._6442aa304b4d44bfc6bc038f4b55f37a._comment | 15 + ...data_also_under_.git__47__annex__63__.mdwn | 13 + ..._d35829cd466139e0e77a79c251a79ad8._comment | 32 + ..._07861ab33ec31659ec3cfa8520580fd4._comment | 8 + ..._ce7ff5d0ea390649af64a296fecf9113._comment | 9 + ..._b7eead64e39b5ebb1a22131b4e35251e._comment | 8 + ..._97fd65626991b1e8012e15595941d25d._comment | 24 + ..._f2572320e3cc93c7dd6db51e78f31c10._comment | 14 + ...Unlocking_files_gives_symlink_content.mdwn | 14 + ..._f8032a5ea72f2cd833a626a197f94ba2._comment | 14 + ..._f50b8ef54737798183490d5a660248f2._comment | 11 + ..._29e467b112a94736147708c6892dae9c._comment | 10 + doc/forum/Update_on_remote_repo.mdwn | 6 + ..._d58cfe914d6c36d8bff8d1342e1c2102._comment | 11 + .../Updating_a_podcast_episode_checksum.mdwn | 27 + ..._8a4c7119f55dba5ff3cb858dbc96f1a5._comment | 13 + .../Updating_repository_permissions.mdwn | 18 + doc/forum/Upspin.mdwn | 5 + ..._30adffff50a043c14b765ebdc6d637d2._comment | 9 + ..._addurl_with_a_file_on_an_HPC_cluster.mdwn | 2 + ..._55d285c796f04049e26b6810c7c879ad._comment | 8 + ..._7c7c0b3442902dbe0b9f875e0f1b634a._comment | 17 + ..._bc5ffcf6d3b72c1ed7b7763549880560._comment | 21 + ..._3bd66bf73386821c3837fe9da841fd1e._comment | 12 + ..._a5bd659bc98d6879b5175dc53915fdc8._comment | 14 + ..._9ec91c1eb9fe119c52831a4ce5c44e25._comment | 8 + ..._bc7a29f8da461439cfb3cb270403181b._comment | 8 + ..._4c8eb6c893ccd0a075500f4b9d4bccd9._comment | 8 + ..._12f6a1b93c36095f12e2a721311dee2a._comment | 8 + ..._83228ff27a74b575b77f0e380e13cc8a._comment | 8 + ..._23ae2824d52b1f165b02294b0f89d704._comment | 10 + ...ssistant_to_sync_just_git_repos__63__.mdwn | 11 + ..._d487c7097db97e316f086742e851b01f._comment | 8 + ..._f0bb3c9461a6b84ca034ebfff814dc77._comment | 11 + ..._809b8a20c4de0da47e3f6bf794043744._comment | 7 + ..._fc4f3e2692c98e8168c8cbc696726f98._comment | 11 + ..._e9d1f0a0b10a16079f06b63251806b0e._comment | 55 + ..._0bd5e37ad9428eb38d2fdb84e58a0c2a._comment | 11 + ..._4ba1e89d84fedfd6508f37717310893d._comment | 14 + ..._d57eb0b4d41600a6709c03f00a9091be._comment | 10 + ...__portable_drive__44___backup_machine.mdwn | 26 + ..._d2991b94eb067f0a6e47cd77f922411d._comment | 8 + ..._0b778710b23eab1413256e289f0aa180._comment | 32 + ...e__58___backup_on_multiple_USB_Drives.mdwn | 19 + ..._5d45ee72f91af9ec8384b178af77bc2d._comment | 8 + ..._502fedae83c3b6e0b32897ce4c1a8317._comment | 13 + doc/forum/Use_case_for_addurl.mdwn | 8 + ..._2205b1857158cca4f6e2225c53bec1d5._comment | 16 + ..._syncing_only_a_subset_possible__63__.mdwn | 13 + ..._a0a272a0931b27e5c94b93e42656b62c._comment | 10 + doc/forum/Use_existing_S3_bucket.mdwn | 8 + ..._ed0ead0b09ddbe52d42150a281d84f5c._comment | 16 + ..._6b108846fca4a514d507f56d1052fdde._comment | 13 + ...tead_of_re-downloading_from_S3_remote.mdwn | 3 + ..._cfb6021a36eee087705967a69967f327._comment | 10 + ..._7268b194ba72331858bc3274996b780e._comment | 11 + ...media_collection_without_modifying_it.mdwn | 34 + ..._76307d95cf46992fbc5f084f9c056edc._comment | 16 + ..._b89b598844b0709a5b6709d0fb2ef60c._comment | 12 + ..._2d707dc516dad666fb2a647f65fcedcf._comment | 8 + ..._4529364f2919bd05f53da94cf8ba4268._comment | 23 + ...keypair_without_password_prompt__63__.mdwn | 7 + ..._b177f16daeab7f02022f18154cfa1c3c._comment | 14 + ..._6d88e5a48de78e6add0e4e4b6ebc3f1b._comment | 8 + ..._a2eb4244788eebba5167cd32a73ff204._comment | 11 + ...s_on_BTRFS_instead_of_symlinks___63__.mdwn | 1 + ..._85806316ed28d7a891f04fab4027141b._comment | 8 + ..._ecb411a2c4d67917b734a90bd460d44b._comment | 10 + ..._83dc719be1883d5369d27a787a5b5705._comment | 14 + ..._bbe2e6359f7b754bde9d61b5a8d5e672._comment | 18 + ...___while_also_cloning_and_syncing_too.mdwn | 11 + ..._30205c1ba18e5dca2314f593e1a0e236._comment | 8 + ..._f8df728de28218a6b060ae9f08adac79._comment | 8 + ..._ba438b3a371261ee841665f1ae57eba2._comment | 8 + ..._9f72e6c7c14a77330297526aef260762._comment | 11 + ..._a06e8c9b4e30c1cd6cbed40d2db50abc._comment | 10 + ...4____40__+__41___Local_computer__34__.mdwn | 9 + ..._f803fc1fb340587fc4b55640fbae6604._comment | 9 + ...__41___to_manage_photos_with_Shotwell.mdwn | 13 + ..._5e8d54daf6b7ff357619ac65fe39a2d7._comment | 12 + doc/forum/Using_Linux_static_builds.mdwn | 25 + ..._22fd266cbe68af3e754a10f1f1295e9b._comment | 13 + ..._36f69f30117ff8696425a754ab19a08b._comment | 8 + ..._64506833dad0202626239e00d1eb6490._comment | 23 + ...sync__34___to_sink_all_branches__63__.mdwn | 9 + ..._ef3d5c5e2600ffa36dd933c8a42cdf96._comment | 16 + ..._424b0c6fdfe87ca08f5d408b7684ab08._comment | 10 + ..._adaf9114c69f1268330adcebd8018fa0._comment | 10 + ...9___in_mixed_content_repository__63__.mdwn | 46 + ..._4b524cbbd40aedeb7d44f0c6dec9ffa1._comment | 16 + .../Using_a_glacier_remote_as_a_backup.mdwn | 28 + ..._bb6022943ec739b1e80351c76f259e89._comment | 17 + ..._41d47f0ca2e05e3296face5f89b819da._comment | 15 + ..._e572b7bd25b4e7f6c6f83c7354d7407f._comment | 7 + ...ltiple_independent_client_repos__63__.mdwn | 36 + ..._c61c28600f1079fb03ddabc950307f27._comment | 11 + doc/forum/Using_for_Music_repo.mdwn | 13 + ..._3488ed85ad98f14cb17f229225ece26e._comment | 10 + ..._c794648878cfc77558f8db862271f997._comment | 25 + ..._8c5e820f5ff7d717d64b1fd66927941b._comment | 8 + doc/forum/Using_git-annex.mdwn | 73 + ..._ac386ca07e9aaf009c264f3deed83832._comment | 16 + ..._bf5e13a490e16943acd2732f093695fc._comment | 16 + ..._471c9268b028f47ef3fac3f0be14b2b1._comment | 15 + doc/forum/Using_git-annex_as_a_library.mdwn | 1 + ..._cfded5c6325007c3f3f83818bd2e1dbc._comment | 16 + ..._1f8e74c5856f21c53d5a91892cbef0c6._comment | 8 + ..._11a243fa7d8ac947aa9a798228dbd191._comment | 12 + ..._ac52304a096ebc66967352efaffb060a._comment | 8 + ..._d502fea60bf3a82f8a50f72a90a80c25._comment | 8 + ..._a4ab4173620b72ac0a24d575fa9c810c._comment | 13 + ..._45d9520ebc13d1b4fd88c25abc61f1b4._comment | 11 + ..._909628f1edd0d3448498fc434c61a3a4._comment | 10 + ..._cef28b8639b6c6e84804b485fb5037f1._comment | 37 + ..._6d8ebdedf76fdf0c267444a7a07e225e._comment | 10 + ..._git-annex_to_manage_git_repositories.mdwn | 5 + ..._f221717814f62e0779d691d2f601ab12._comment | 27 + ..._ab24098c2f4519cbbfdcd00ba3e21d2b._comment | 10 + ..._5cf9e2ff83bb76650469444c80fee4fb._comment | 8 + ...ng_git-annex_via_command_line_in_OS_X.mdwn | 3 + ..._1c9e121f60fb6868c07f1a53b03c4ed0._comment | 8 + ..._52d8ffba82e29ac2722a8e43e469cc47._comment | 9 + doc/forum/Using_git_annex_as_a_library.mdwn | 6 + ..._42cd26878e4e5c2c238c1227e3c372d9._comment | 8 + ..._1323238fc63e121fbc0f408a23d1ada5._comment | 7 + ..._which_only_has_exFAT_and_no_symlinks.mdwn | 8 + ..._b9f202a30ba7e3bc264064d24454c099._comment | 12 + ..._1334a8d9f4bb60f3bf3ebabc656d98d9._comment | 18 + ..._076f22d05fad140068a540e4d835106f._comment | 8 + ..._c8446ee1b817f1824fa0df07e742015c._comment | 12 + ..._f746c1b85ee8e4b57b6819ccceabd28b._comment | 8 + ...7__FTP_TV_NAS_with_preconfigured_dirs.mdwn | 5 + ..._bd73c8d10028e1b45da9ea8f657e5064._comment | 10 + ..._16c3c994ee8fcb466e52ca0e812e5915._comment | 8 + ..._ac60f6edb76bdd541711e472eec9591a._comment | 10 + ..._2194f0600d9a90f0d9c947ea9cc213a3._comment | 8 + ..._eb7d13f6b6fa674a2536bde51bfc3fd1._comment | 48 + ..._ae323b16ddb9342e91be955408eca3b1._comment | 8 + ...dirlower_layout_for_S3_special_remote.mdwn | 3 + ..._ff8c84af9d08dfe7d8e502d1b84732f4._comment | 8 + ..._9f22f7f14fab759caa1ddecda435311c._comment | 13 + ..._d90ee84a9b0cf190961d92d089dbf7a6._comment | 8 + ..._5aa6dff353af7beffdd56652d6fc6d3e._comment | 10 + ..._79519a4c0fc25d41226a7048cd3a8306._comment | 24 + .../Using_integer_ranges_with_metadata.mdwn | 40 + ..._36298a679379e807892cd6af18ec1dd6._comment | 13 + ..._064e2c5706d1acc0f9e4576ff80407f7._comment | 9 + ..._c3ce727f93cce19db1f76de9f7216cee._comment | 8 + ..._c3301d1b2b57994666947fd518fb9922._comment | 9 + ..._9d310fac003f1cd9e6ca9bc96a210def._comment | 11 + ..._ead2b08bf4631547c34486ce58559017._comment | 7 + ...ve_history__58___--all_not_recognised.mdwn | 33 + ..._c3dd239d4b5b372229f2cec42a8a6eb4._comment | 10 + ..._b76dd79aabe87ec717eea164aa965d74._comment | 12 + ...stant_as_a_Backup_and_Syncing_Service.mdwn | 5 + ..._7070f6e7e05fba7686d8620d62906a83._comment | 12 + doc/forum/Verification.mdwn | 9 + ..._d56818a8f5b3a94ecf5159c76f24768c._comment | 18 + ..._7df45d1e20a32458791603d5b9fe3dc4._comment | 15 + ..._74db3ec8b03f48912306e48b8d5f7242._comment | 8 + ..._eb4d936a9bd577f58483b278ae5dc5f6._comment | 15 + ..._c327c72ceced27920681d5f93bc256c8._comment | 9 + ...th_git-annex_client_8.20211123___63__.mdwn | 28 + ..._780fb88d5cfcde6e8a8b6f025be6a043._comment | 11 + .../View_for_locally_existing_files.mdwn | 8 + ..._8ede4c8f1ca48e34629c46a77ba01f11._comment | 8 + ..._e8d7672850518f4859643a0ee40e57e1._comment | 8 + ...iew_performance_with_7__44__000_files.mdwn | 26 + ..._e45ea752100d09d29efb6136a722eab3._comment | 34 + ..._b1942eed65e9b5c046095a094191a38c._comment | 8 + ..._e6e19339c9d72cf8eaae32ef4269e850._comment | 10 + ...View_special_remote_information__63__.mdwn | 1 + ..._7c106e0679890f7279c73b5c52d648e2._comment | 10 + ...r__58__git-annex_has_text_relocations.mdwn | 7 + ..._fee360353f0b46aab6ee7a902c0837bb._comment | 11 + ..._me__44___what_am_i_doing_wrong__63__.mdwn | 16 + ..._cdac15fec6fc41d5487b7f653fa718a4._comment | 14 + ..._82050b7dc367ca5968ab0306db9bd7e3._comment | 10 + .../Walkthrough_for_direct_mode__63__.mdwn | 1 + doc/forum/Want_to_stop_using_Git-Annex.mdwn | 9 + ..._32e37515bd4f5d22ff9aedd3c9d98046._comment | 10 + ..._e29e6d052ef3677ad7d5615721f3fe33._comment | 8 + ...ync_slow_on_thin_copy_of_large_annex..mdwn | 22 + .../Wanted_content_based_on_date_added.mdwn | 12 + ..._af2a6e6cba4cdfe24e9ee2c819a007eb._comment | 17 + ...er_on_each_command_Android_8.20210429.mdwn | 23 + ..._02c38a5dc1c2213dd5f12c4b7fb0c72e._comment | 11 + ..._02e5631245348bcef541360b5ca0e9e5._comment | 8 + ..._12c9af06c1473de6740b782ca42d6a5a._comment | 8 + ..._daa8522e3be6a0563d7cd107e79577b8._comment | 27 + ..._32c3cae8fb69c42747bb3ec4f3926dfb._comment | 8 + ..._95e16558f7010627ef4136043f63b937._comment | 10 + ..._733131f7608bc0309c034a954f297275._comment | 16 + ..._c73d26803fcc932edd7049efd0318aab._comment | 13 + ..._3eb65e0d204832d7d8700a85b3f4e51e._comment | 8 + ...__assistant__47__webapp_documentation.mdwn | 12 + ..._adb377589dbae7fc91001df235c6b48e._comment | 14 + ..._other_directory_without_change__63__.mdwn | 14 + ..._1c324fdc46fe9db3778bf21d9fbdd021._comment | 8 + ..._9d18e0752ae4b1ded9611759fbe2eeec._comment | 20 + ..._61841267c85651158652b20b137fb5fb._comment | 21 + ..._f414a1d2c54eda4602d224a937d413b7._comment | 20 + ..._8290c580d2788dbefb4e41cb9671eecb._comment | 32 + ..._files___40__the_symbolic_links__41__.mdwn | 12 + ..._5f452eeb652e1bbec54cddc3735a6d4a._comment | 17 + ..._56617a9d760e7528d7b30ed479e5070a._comment | 28 + ..._8c8f09c8a916dd44d787a02f1570bd82._comment | 9 + doc/forum/Way_to_list_missing_files.mdwn | 1 + ..._d302a4b64cfca76e8af756018768ff08._comment | 8 + .../Web_app_on_server_without_X11__63__.mdwn | 3 + ..._bee409ad389e5fb5f3e8de4b5c68278d._comment | 10 + .../Web_interface_to_git-annex__63__.mdwn | 5 + ..._371586edbeca15724121a5123bce66d6._comment | 12 + doc/forum/Webapp_not_watching_repos.mdwn | 1 + ..._02735050122afdb6498d91b462d32767._comment | 12 + ..._8ab2d4c18ddc99774e44c4f4401bfa57._comment | 12 + ..._b448aa5a95a57a5228b361390e5fc838._comment | 8 + doc/forum/Webapp_on_ARM.mdwn | 6 + ..._82ac40cef5b59070136527b8d81a5ce2._comment | 10 + ...vior_with_OS_X_Finder_and_Preview.app.mdwn | 12 + ..._8c8d86790a9d31518f9bb96a2d2dafee._comment | 18 + ..._b538dc2c6f122b9ce5f7569de1b03f3e._comment | 8 + ..._16e6724fa184392d4decbe0c4eb6efe6._comment | 14 + ..._e514fe2d4d0ad6a10e281939e6ab4266._comment | 15 + ..._e0eec765f72f7bf6f5a2a92c9b5dacad._comment | 10 + ...etween_encryption___38___gcrypt__63__.mdwn | 11 + ..._e4e9c6858fe905b17154e19cbe7ee2f5._comment | 8 + ..._359e52a73f236bce4e8e31e76436fba7._comment | 10 + ..._d43cf2928e2ebbf2793911e49cffd671._comment | 13 + ...What_am_I_doing_wrong_with_move__63__.mdwn | 48 + ..._a49d98426ef8dd17e6cca6b5fba5c9bf._comment | 21 + ..._eeae2f172b4481fcb08745fc28aa4d4e._comment | 42 + ..._f2770f86138d9b8489fbf9a25462b4ce._comment | 10 + ..._76aa27cdeefb1413baaa1c891ccd4d0d._comment | 27 + .../What_can_be_done_in_case_of_conflict.mdwn | 7 + ..._5ca86b099dfa08a50f656ea03bf1dcd9._comment | 12 + ..._69ee17959a92bb8359c0fd7b2a9d8dfb._comment | 10 + ..._017f4bac57a040c496e0c9d068dcfd9e._comment | 41 + ..._expiry_after_X_days__34___mean__63__.mdwn | 1 + ..._face45c85e4713325bb23bbca7b07502._comment | 28 + ...es_a___91__RepoName__93___means__63__.mdwn | 5 + ..._9b1cb4beea0f67d7e7375e7ec189b802._comment | 8 + ..._a233086f100fec27cd26f4d39c25a385._comment | 26 + ..._4b62bf0c03fed86270a7873a8835dc7f._comment | 12 + ...hat_happened_to_the_walkthrough__63__.mdwn | 1 + ..._70db0e3cfb1318e95671c23726e5541d._comment | 8 + ..._f9305dd19b9b5f35e66d915b8c30374b._comment | 7 + ...ated_add_of_huge_picture_folder__63__.mdwn | 77 + ..._0ba60f9625ccda45d59adbd385f5fe98._comment | 12 + ..._f0a2ec3d0b05d84fb05a1708313a6762._comment | 12 + ..._f628f146a0c652f812c09f78bd574b77._comment | 24 + ..._34___on_an_existing_repository__63__.mdwn | 1 + ..._d844cfe5f9907a766e871b64d68966c2._comment | 8 + doc/forum/What_is_going_on_here__63__.mdwn | 187 + ..._499bf04c32c86a747bd7c38d13f5de50._comment | 18 + ..._0acd71ec48c69da62886e69afa496120._comment | 54 + ..._a1221c0a0585b7e60643a8e4a50b282b._comment | 8 + ..._a9fa5282774cc32ece9196b864435957._comment | 28 + ..._8e35d10c208d0d1e93254a1a275fcba6._comment | 20 + ..._536adad665f481a15d4096360d0106c1._comment | 10 + .../What_is_the_assistant_up_to__63__.mdwn | 5 + ..._9baa0e54c19105c7cce946c19c587866._comment | 8 + ...o___34__git_annex_mv__34___file__63__.mdwn | 1 + ..._02d305f307b4d2ff7acd98cb36508a2f._comment | 10 + ..._9f7daf0a3e53b2cf64b2b64ca6fbfd9b._comment | 13 + ..._06b137018b4c995afc8891032704c1d8._comment | 36 + ..._138d9067831e26407404b993199d5a0f._comment | 35 + ...r__34___and___34__remote_server__34__.mdwn | 3 + ..._68734a118b7dc0c88ba67eca20953a55._comment | 10 + ...perations_are_safe_to_interrupt__63__.mdwn | 34 + ..._03d8ddc049cf073e5579ca829b352367._comment | 24 + ..._207435949b2674ea82390c66549873e5._comment | 28 + ..._279302a0f5bb0a8d8d87182e03c6b475._comment | 20 + ..._8d36d42e34f5deae04bfa83c568b89d5._comment | 11 + ...f_special_remotes_refuses_drops__63__.mdwn | 9 + ..._0b523b2b6c361346c36ad456bbbac645._comment | 15 + ...an_encrypted_ssh_remote_is_left__63__.mdwn | 1 + ..._67ee446ca6d66e2c259ea771c2c9a2b2._comment | 12 + ..._6d3cce3c8048e4aea8f0ed76473f6af1._comment | 8 + ..._bd506e1ca7307660b3b9769eb97beddb._comment | 8 + .../When_--git-dir_is_not_in_--work-tree.mdwn | 108 + ..._0169812633d92bed8883e903e03056e3._comment | 29 + ..._0c101e5b017f56897599c2cbd37b1754._comment | 8 + ...reuse_UUIDs_and_avoiding_UUID_clutter.mdwn | 15 + .../Where_are_my_remote_ssh_files__63__.mdwn | 10 + doc/forum/Where_did_my_files_go__63__.mdwn | 20 + ..._3ff3ffa95eb2745ff9ec2a903e071d97._comment | 9 + ..._9d902e66ca19b3332f4454f694d4a12e._comment | 16 + doc/forum/Where_is_the_S3_config__63__.mdwn | 10 + ..._63009ad122cfafc9682e06f984eaefe1._comment | 11 + ..._61403be4cc347fecedd8b19d6604e6d3._comment | 32 + doc/forum/Where_is_the_content__63__.mdwn | 8 + ..._812e1cf740cbfa449ab3ef4dd5f2df08._comment | 132 + ..._5e2cfdfab6c4f84fe7a19447b417b5a7._comment | 8 + ..._bd4cbc8f256a94ffde4f57d2c406a9ec._comment | 16 + ..._a36b35d47472b5db779b0489bf3d4893._comment | 10 + ...ich_branches_are___34__required__34__.mdwn | 31 + ..._78d9ac05c66b7ccec031e0c57095af39._comment | 10 + ..._cloud_providers_are_supported__63___.mdwn | 3 + ..._1f9398840144e0452a2fed9336046547._comment | 10 + ...are_ignored_files_being_deleted__63__.mdwn | 22 + ..._3081bda5bb600fc564185499ddfb5cf9._comment | 35 + ..._178aa574855a3bfffab4b21f90a84092._comment | 8 + ..._v5__63___Should_I_be_concerned__63__.mdwn | 5 + ..._b7fc905780f941314c99b94a87e0438a._comment | 11 + ..._are_we_stopping_at_a_duplicate__63__.mdwn | 7 + ..._dd3b610032cd3091effdb3f0828f45a8._comment | 9 + ...be_enabled_for_removable_drives__63__.mdwn | 7 + ..._4341898d5ae4f09a5b06d24f5fe6192d._comment | 8 + ...t_annex_does_not_want_that_file__63__.mdwn | 33 + ..._44cd6ca1f7215395e19ce654513197a9._comment | 38 + ...up_remote_use___126____47__.bup__63__.mdwn | 5 + ..._da9c7c0e93aefc2da7409de5b138d86f._comment | 8 + ...thin_a_newly_git-annexed_subdir__63__.mdwn | 42 + ..._abae8a95b60f17052a5e2ac30a7ece32._comment | 8 + ..._dfd69ac96065f8146f5ea87b957cca6e._comment | 10 + ..._8d36f559d7f8b61f5633f0d24b424cec._comment | 9 + ..._a318582d30f5483f3738e8f0f1a2e1df._comment | 11 + ..._bc2e255f8732f6ec02e90a6623ffc8af._comment | 9 + ..._691dc07b192f077f50611544d488b394._comment | 10 + ..._71d7a08600dcba07dd895ddf6ad1331a._comment | 29 + ..._a5d60323c2c6b2d263514b33ad774aa9._comment | 9 + ..._83e52bd3d66ce87ba7d2913d21c76b08._comment | 9 + ..._0bd122e2e664d29dca027719721b1523._comment | 9 + .../Why_is_git_annex_status_slow__63__.mdwn | 20 + ..._a5139c5a9fc94486cf62fc9a9fa9f8d9._comment | 18 + ..._2f61c2cdf9d1ffd298fd906207012818._comment | 8 + ..._8d9e5a1aef2648d7a844623e6237d551._comment | 14 + ...Will_git-annex_solve_my_problem__63__.mdwn | 7 + ..._35acbdd1a7727df204d776c2e8f02b53._comment | 8 + ..._230256c19ac139dea207d89c06f70782._comment | 8 + ...x_work_on_a_FAT32_formatted_key__63__.mdwn | 3 + ..._426482e6eb3a27687a48f24f6ef2332f._comment | 8 + ..._af4f8b52526d8bea2904c95406fd2796._comment | 8 + .../Windows_-_You_don__39__t_have_access.mdwn | 42 + ..._5c1da63922cc71483c9519e8670d532b._comment | 17 + ..._aa6ea60465df9fab7990bd6f510b74c5._comment | 8 + ..._593a8a54fa80258d5048f5c061992664._comment | 10 + ..._aa28602eb0b7fa7103eaf90dc1d5cf8f._comment | 54 + ..._f9041e48b911dbdd37ad3c1bbc801709._comment | 12 + ..._7656eb72bb9e39db59092557c57a2489._comment | 8 + ...ws_-_gpg_fails_with_shared_encryption.mdwn | 82 + ..._708da81b0678576a240ce7a388806e07._comment | 27 + ..._9f5d0e8d0c6eff548318b54797cefd09._comment | 11 + doc/forum/Windows_S3_host_issue.mdwn | 11 + ..._8c0a1e84713a04a25fdc1f74919d34aa._comment | 10 + ..._06ecc76797c430b27a2e24776761d043._comment | 8 + ..._1715557daa15b9e9e17b4850141e62af._comment | 10 + doc/forum/Windows_eol_issues.mdwn | 552 + ..._72e4c3a200e3fceb2afd4df563eaa5d4._comment | 31 + ..._77383b959d576c7930c726c55097c964._comment | 137 + ..._926b386f5ca59f1c5232cf5cba69e12a._comment | 18 + ..._dc470ae359ee4ce017770a89441a8b65._comment | 8 + ..._e711bdfcee4ec9a2860662e8c65a9c0f._comment | 20 + ..._62f748e40324bc988366e19088b33295._comment | 11 + ..._f9b71ea2158c02dfa8a7c59891aea679._comment | 26 + ...nex__39___is_not_a_git_command.__34__.mdwn | 6 + ..._b051dc30bf5a0fc9f5710c664f487ea9._comment | 14 + ..._8775a1483b29e2cc8f0456473c24e51e._comment | 8 + ..._cbaa3e0fa4e2347332b3929411f60d1d._comment | 11 + ..._3dc3cc824256b1f7530c7f516b0abbec._comment | 24 + doc/forum/Windows_installation_notes.mdwn | 146 + ..._54c253ab61fea4f5aaefa04bb078c7b0._comment | 12 + ..._c8c2744e30f2950d9830936d2bd51617._comment | 14 + doc/forum/Windows_support.mdwn | 6 + ..._23fa9aa3b00940a1c1b3876c35eef019._comment | 9 + doc/forum/Windows_usage_instructions.mdwn | 25 + ..._d43dbd9406da3b9747b147715eca94ac._comment | 8 + ...hlist__58___Bittorrent-like_transfers.mdwn | 5 + ..._13544d54fb0418af4ca9200cdb045d91._comment | 15 + ..._9a7dad35bf80c684ad97892420d7370c._comment | 16 + ..._e5de748bc5da12a4a01e08cde2407dd1._comment | 14 + ..._e51530178f1e034c0fdd5c9aa9945567._comment | 8 + ..._81ea9c129d8c02097f09ef8c68f1bb11._comment | 27 + ..._3b5798414f89686526da3dfa72c0c4f2._comment | 10 + ...__58___Don__39__t_make_files_readonly.mdwn | 3 + ..._7148527961e2d27793810966588c8d35._comment | 10 + ...s_without_copying_the_file_data__63__.mdwn | 6 + ..._1cf4ab29dfa2cff59b86305fc0018251._comment | 10 + ..._f5ebb7f43dcef861ecc13373fb1e263f._comment | 15 + ...cting_files_based_on_meta-information.mdwn | 15 + ..._818f38aa988177d3a9415055e084f0fb._comment | 15 + ..._97e2ed48bd552d02918c4f98f963e6e1._comment | 9 + .../Wishlist__58___automatic_reinject.mdwn | 14 + ..._6bf093f228353130e80e7a30bcf0075d._comment | 8 + ...g_the_disk_used_by_a_subtree_of_files.mdwn | 10 + ..._7abb1155081a23ce4829ee69b2064541._comment | 9 + ..._b4c6ebada7526263e04c70eac312fda9._comment | 18 + ..._ded71b270b94617a8ebb3a713d46a274._comment | 19 + ..._daemon___40__for_the_assistant__41__.mdwn | 1 + ..._42aa2b61b880f4048d874210212aa63b._comment | 8 + ..._3e201039fa0e611554171ee30e69a414._comment | 8 + ..._d1074724c44f3296cb438b2d526d8728._comment | 8 + .../Wishlist__58___mark_remotes_offline.mdwn | 12 + ..._9e3901f0123abb66034cce95cc5a941a._comment | 14 + ..._d10e3d90cf421ae425e64ab266ea811b._comment | 12 + ...ptions_for_syncing_meta-data_and_data.mdwn | 13 + ...ecial_characters_if_filesystem_is_FAT.mdwn | 5 + ..._5d33bcbd862537f53edd91dcff2b8977._comment | 13 + doc/forum/Workarounds_for_git-annex.mdwn | 8 + doc/forum/Workflow_for_adding_files.mdwn | 32 + ..._a60dae97db827bc641d6256d1f382b5f._comment | 8 + ..._28dd15ac50f79fb07bacf8b8326c7edc._comment | 19 + ...ing_git-annex_only_on_external_drives.mdwn | 8 + ..._c3c495efb7cdd242b51cc7fa7719d95f._comment | 21 + ..._f29471761e95b25e35e4cb09ad89737a._comment | 15 + ...annex__58___I_need_a_sparring_partner.mdwn | 22 + ..._ee783a968a5948e2f50bd2d090a2238b._comment | 19 + ..._259b67a887dd6aa327b752f455c24bff._comment | 17 + ..._a072a5c8f0798094d9ab0b7dc6c34f98._comment | 15 + ...StreamSize_exporting_large_file_to_S3.mdwn | 30 + ..._8b066ad9628073a3ae045087b4ea79b5._comment | 21 + ..._c9eff9a83ea5ee71cbe87022be9d0875._comment | 16 + .../Wrong_symlink_target_on_usb_drive.mdwn | 55 + ..._9a50df886c0c23ee6f5586bd9f6b61c3._comment | 11 + ..._75df13154d3ea662119e9d701a0d9c97._comment | 29 + ..._7f2fb4e7f0c0db9f9d9cbb637f02c9ff._comment | 10 + ..._f6ee6bfd5d82f0925f0e174b4c75e592._comment | 27 + ..._e5a152cef3c48ef05cb183907377f128._comment | 24 + ..._be59fcc5633b352eefe993871df1ec4a._comment | 14 + ..._64e1cdf144a17319831a58b04b22b7ea._comment | 17 + .../XBMC__44___NFS___38___git-annex_.mdwn | 27 + ..._86480f31d410e903766f82e6ecf83e1c._comment | 12 + ..._d8ed4dd51d3050db691a8abdec24cd42._comment | 10 + ..._42b80ee51ce25775bf4532f53a8ecfe3._comment | 11 + ..._01767f3f864954cf8080274e206da9d4._comment | 8 + doc/forum/XMPP_authentication_failure.mdwn | 15 + ..._19c7c3aa79d209d613d2e061e3129690._comment | 8 + ..._870059fed451e8377e5d382464ecc34b._comment | 8 + ..._1a7ff955e9173f13d10b75f203792384._comment | 10 + ..._d59031ebc0dd3abc1f4c96878328362c._comment | 8 + ..._c37ef477bef7efdb79dd05dce90dfde6._comment | 10 + ..._48cabea4c2caf5b3bd854df3aaa17d3d._comment | 8 + ..._14cd9b67806db93c3af055d88c9a910a._comment | 10 + ..._151d3fd7d3cceb30fd20a8f3bd54036c._comment | 24 + ..._fbb9eba65fbb72201f08511945fbcf8c._comment | 9 + ...provide_some_kind_of_debug_data__63__.mdwn | 9 + ..._1ba0735141fc6a21ac15913f4cacefae._comment | 8 + ..._16994dc86b87592fc62799e2d206d172._comment | 10 + ..._6afd424edc4095b8f71b136de2a9e64d._comment | 10 + ..._1381b6a927410642c6a93aa8354be791._comment | 17 + ..._c5b33c7a8aa8e6d0f9349510dac2366d._comment | 12 + ..._9913d2983ba2744ed24911f74988e4c7._comment | 11 + ..._ad6f385a2b95803eb9d81dfe76359551._comment | 10 + doc/forum/XMPP_problem_behind_router.mdwn | 3 + ..._25a7f8dc5cf14cda4d76b2f8c6ca77d5._comment | 8 + ..._3186ebe32c30764b9fd53625dd3e4eda._comment | 8 + ..._7fa8fe8cb92993c935ba2dbfb2aef728._comment | 8 + ..._6497ca72904dfdefe4e02f8a55127a8e._comment | 9 + ...tch_queries_to_the_location_log__63__.mdwn | 45 + ..._01cbfc513c790faef3a3ede5315d3589._comment | 10 + ..._fe28dfb360caa12d5d5bc186def3eb45._comment | 35 + ..._9bb30ab62febe4ef63bed49f831a473a._comment | 8 + ..._7832f0347a41b8204538c01b72487803._comment | 19 + ...71__Locking__187___files_until_synced.mdwn | 7 + ..._8bf59f47fee0a8d5741fe209b5899863._comment | 8 + ..._0c683547a6178e4303f0b1ed1f5605a5._comment | 8 + ...st__34___data__63___Maybe_a_bug__63__.mdwn | 14 + ..._52e4453432184524d84d88f6382cac9d._comment | 16 + ..._4d80b96e788d233706fa8f3e363d2f76._comment | 12 + ...Pairing__34___more_than_two_computers.mdwn | 11 + ..._80f7a4bb3c66b11e566043407b611bbf._comment | 10 + ...34__Preseeding__34___a_special_remote.mdwn | 5 + ..._b0c46d0eba900d0f6169a2c698d7a222._comment | 12 + ..._5e63f5e6f45c11cc86b293ce8acad77f._comment | 65 + ..._Scanning_for_files_to_transfer__34__.mdwn | 9 + ..._4fa6d0d5264707886e1e9b5184090386._comment | 36 + ...e_filesystem_for_external_drive__63__.mdwn | 3 + ..._31e5e55e9f8f391309b16c6591bb0bb0._comment | 28 + ..._abb716dc8b39e1b20d8725d83a7cc662._comment | 17 + ...du__34___equivalent_on_an_annex__63__.mdwn | 5 + ..._a80eccce0bdb33748ab1ccba9b88a65f._comment | 16 + ..._e3f82edf70d28f00d30cfd98f189cd86._comment | 12 + ..._041ae920e2e6fd83967dc98646452fa7._comment | 16 + ..._a41bd02361aa961e5285aeaf1ea062be._comment | 10 + ..._28ba62a546f5cc8f416491423d743d8a._comment | 10 + ..._8d97f40c1d14b7230f3656a00a99cf80._comment | 8 + ..._baa8fbbdd5c449a0dc2bb622cb4a47ce._comment | 18 + ..._2ee6cbbfe54a2e7b6e8eb539c18e663d._comment | 10 + ..._48f6a2761a34b7f991325f1d24e2c5ff._comment | 8 + ..._d632baff41b8582f1a79bc5018c68545._comment | 8 + ..._6a51c22d9893fa5b1503f5a14b1eb8ce._comment | 7 + ..._a2bda4c74ef09a58709c0c5f6ee1b726._comment | 7 + ...___vs___34__git_annex_add__34___in_v6.mdwn | 5 + ..._285032a01ca754c539ce0634823db23c._comment | 29 + ..._93eec60060bc7bca8dd1633b670f9a53._comment | 8 + ...34___doesn__39__t_work_in_OSX_10.11.4.mdwn | 1 + ..._34bd938e8cd0cba6ec48020932858485._comment | 7 + ..._3ec07e7f0e713e6fa925abb99c646bc7._comment | 7 + ..._3dce000eb6db22e07ed2f53c4f62a1e0._comment | 27 + ..._5bed42e467859d2310f3da35e55acd38._comment | 7 + ..._5cb379490b0e85c24bff48db8201c7d4._comment | 9 + ..._46eb0f4dcbccea5140a26dca36c6f1d1._comment | 11 + ...n__39__t_send_it_to_working_directory.mdwn | 11 + ..._0c0a5999a92bf5880f2113177dc67cc2._comment | 11 + ..._c18083d9054f66f0bd51d63452af07eb._comment | 8 + ...s_while___34__locking_origin...__34__.mdwn | 12 + ..._09fbe4362fea8f2a53a1f955b0519019._comment | 18 + ...4___on_windows_fails_with_rsync_error.mdwn | 20 + ..._a1a881d7b0f0c32b1bfdd3bc5ee4dd18._comment | 7 + ..._50d0b68fcf0e239037a5d7950595b1d6._comment | 9 + ..._9bc58c6c2333655870c5e42138f9749e._comment | 15 + ..._958e887dd83b8b636df2d81ade0dbbf1._comment | 7 + ..._24782f9b1012a2935466ac358acea97b._comment | 11 + ...nex_lock__34___very_slow_for_big_repo.mdwn | 7 + ..._044f1c5e5f7a939315c28087495a8ba8._comment | 16 + ..._e854b93415d5ab80eda8e3be3b145ec2._comment | 13 + ..._95c110500bc54013bc1969c1a9c8f842._comment | 8 + ..._a4fd212cb066cd53d0d66eb09f3b39a8._comment | 18 + ..._remote_of_type___34__directory__34__.mdwn | 17 + ..._c51363e109bcc5cd1df40c5d0ec993b3._comment | 38 + ..._be52a6d21df4732c9f83463bb5e6f612._comment | 8 + ...annex_sync__34___synced_after_8_hours.mdwn | 40 + ..._e815ac48a17cc4296473d61e712d95e0._comment | 13 + ..._d13a0af48b8831c81276a0b2c8e25303._comment | 37 + ..._c50b62e5a84b861117a4405c2a2f5cfb._comment | 16 + ..._0051e83196945b97e2f3ed14a58daaea._comment | 14 + ..._26de32ea240621e23717c55866ad9764._comment | 9 + ..._0714eca58513f1059fc246ee152078e7._comment | 16 + ...files_after_git_history_was_rewritten.mdwn | 17 + ..._8f2ced0b9039968f485943e1525dcf6e._comment | 10 + ...I_would_like_to_have_file_x_y_z__34__.mdwn | 5 + ..._bfeb1446dee4d2f52ef25fabfb8cc8f6._comment | 11 + ..._e60f2bbc1c058993472fd920edbc75fc._comment | 8 + ...n_denied__34___in_fsck_on_shared_repo.mdwn | 17 + ..._3a5202ef2116ebb5559b6f4d920755fc._comment | 10 + ..._86663eeb75b0477f53c45f26c8e4b051._comment | 8 + ..._c336b2b07cd006d378e5be9639ff17ec._comment | 10 + ..._1339cd27ca2955f30b01ecf4da7d6fe8._comment | 10 + ...recovering__34___from_git-annex_usage.mdwn | 24 + ..._4a2a68ec0d0075f0d2fd7e8c9fac5e75._comment | 8 + ..._refs__47__heads__47__git-annex__34__.mdwn | 34 + ..._e50188896df347f1d92e20a52053aa14._comment | 10 + ..._d67793f7c969f64943d1fd54a1208c2b._comment | 15 + ..._3523884833b5fd458a35f898797bf897._comment | 10 + ..._02c32c2521ba1a1eaa19eaca7281f2a6._comment | 10 + ...onality_as_opposed_to___39__get__39__.mdwn | 14 + ..._b2b7de0bf4494721b02280857474fd6c._comment | 9 + ...9__wget_--mirror__39___like_behaviour.mdwn | 7 + ..._9c874a74f25fa06b8e515482b4706032._comment | 24 + ..._format_for_.mat_.tif_and_.json_files.mdwn | 29 + ..._debe9a878896ead4957db288203cae14._comment | 8 + ....3.2_requires_syb___61____61__0.1.0.2.mdwn | 18 + ..._fae6e88115d175239fc55cef4c33fb2c._comment | 13 + ..._4c7a75638e8717132ccde949018d6008._comment | 10 + ...nual_ssh_remote_setup_with_shared_key.mdwn | 19 + ..._811cab17410ba6e07ae7af3249cd98df._comment | 14 + ..._Mixing_.thin_and_default_repos__63__.mdwn | 15 + ..._41f7bb65b85c3ab54f692e04d26a2891._comment | 11 + ...unce__93___metadata_extration_utility.mdwn | 30 + ..._replace_all_files_with_pointer_file..mdwn | 31 + ...__44___estimate_how_much_data_to_copy.mdwn | 3 + ..._785e4fe097ef2a2d51d84146fc91b2ca._comment | 19 + ...__from_directory_loses_contents__63__.mdwn | 76 + ..._776b5b8099125aad3bc8839d9cc1abeb._comment | 29 + ..._c36d32db2b1dcd3cd36c68f2bb726f6f._comment | 12 + .../__96__git_annex_sync__96___hangs.mdwn | 113 + ..._ffd16cb94b39b93dfb0a2932b70938fc._comment | 8 + ..._fad59a54d92ed7cb230f0f365fddb0f4._comment | 10 + ..._29cd5e9acd78d8ac6b58fe535fee9650._comment | 8 + ..._7a24236bc511cbfa869aaeb431a003d2._comment | 18 + ...ror_if_it_can__39__t_get_wanted__63__.mdwn | 14 + ..._41d3a4774dd5ada5036247eb6f562392._comment | 10 + ..._a971d9d85eb7f86d4ea18a71bd0db25d._comment | 12 + ...ers_in_pairing_message__59___ignoring.mdwn | 40 + ..._99975a677f832c410050ba721be6d904._comment | 15 + ..._f4dd76879e2b2bd0da557ee6a539533c._comment | 95 + ..._d437dc44114f59d5717c177831ae0d53._comment | 9 + ..._dd29ac2b5615ff6f79458a36bce44306._comment | 55 + ..._e07b69bb36cd8aa2c4fd689744f12df1._comment | 15 + ..._f61a390f304e1f6d1e8c4a90cdfbd9b9._comment | 9 + ..._625df33e70f2f959c574d918a706648d._comment | 13 + .../_preferred_content__58___lastpresent.mdwn | 1 + ..._7610cd866b256d36646b642eb5f8cae5._comment | 14 + ..._d25666a173b78213d583f029fd166d06._comment | 10 + doc/forum/add_only_binary_files__63__.mdwn | 1 + ..._7ce3be5bafd62ce5ed78bcd9323039cc._comment | 16 + .../adding_files_without_hashing_them.mdwn | 1 + ..._c3113d7aff6b64a325a32b8b281df605._comment | 12 + .../adding_remote_bup_repo_using_ssh.mdwn | 42 + ..._d1ab38bccc415a94fa3906f7f5e823f3._comment | 18 + ..._6698ecb746e6edb25130c8dbceb36fc0._comment | 8 + .../adjustedbranchrefresh_ignored__63__.mdwn | 50 + ..._999bd4a511c7fa39f5455df895c435f3._comment | 8 + .../advantages_of_SHA__42___over_WORM.mdwn | 5 + ..._96c354cac4b5ce5cf6664943bc84db1d._comment | 8 + doc/forum/agent_keep_deleting_local_file.mdwn | 24 + .../alternativeto.net___34__Like__34__.mdwn | 3 + .../ancient_linux_build_for_arm__63__.mdwn | 5 + ..._c4ebfb2136bb4b3e21a52aa23717b22a._comment | 13 + ..._f5a7d7e4ac5d9885230d08684416cff4._comment | 13 + .../android_-_assistant_-_local_pairing_.mdwn | 15 + doc/forum/android_binary-only_download.mdwn | 9 + ..._aab206e0bf0bb5ff47c7cc9795f12f92._comment | 8 + doc/forum/android_installation.mdwn | 7 + ..._8908256ecd48d7b5207799aa02102d87._comment | 18 + ..._3c2a1e7542993528250ad72079894364._comment | 19 + .../annex.largefile_include_from_file.mdwn | 5 + ..._9016a64a654151ab9a478686382193b4._comment | 8 + ..._09258e59eab492afc37efeac325c2de1._comment | 9 + ..._f857505bde5f03d9c17e8df0512c0e99._comment | 8 + ..._f9c2acc07dad646cd04a51ca85f45502._comment | 11 + doc/forum/annex.largefile_not_working.mdwn | 20 + ..._b2ecb8b60603929bae91c3007817585f._comment | 12 + ..._18bc73688897728d0bcae6df1225e6e3._comment | 12 + ..._81085c1a526ac804edba689043e58944._comment | 9 + .../annex.largefiles__58___two_quesitons.mdwn | 9 + ..._75fc6cd2315e9ad6897b94bcc527ddc1._comment | 11 + ..._f34cf28c3f8354e6fc055d4dba6ed555._comment | 13 + ...34__synced__47____42____34___branches.mdwn | 7 + ..._4667fadb05c594b0a212bf455ee65298._comment | 12 + ..._cb6971a766a28bd8c094d0b986272c65._comment | 11 + ..._1a0384edd20cc379e53fe7d7f650f7e2._comment | 8 + ..._79219e920a6beb4bd3265571f59f51cb._comment | 36 + ..._39009651c3f65e2ecd225e17d157c8d8._comment | 10 + ...y_for_web_remote_with_SHA256E_backend.mdwn | 12 + ..._d1605a6e3b4d6863f4089218994ce564._comment | 29 + ..._d249ff27fa3d9ac3ca32485cdef49930._comment | 8 + doc/forum/archaeology_of_deleted_files.mdwn | 36 + ..._48f27df03ec18d2c27cf6b70dcf71dc5._comment | 10 + ..._c698cd10c8038bac45bd1049506a27c3._comment | 8 + doc/forum/archival_and_multiple_users.mdwn | 8 + ..._fc4ee256f03a7c189d687caf4a34e21e._comment | 9 + ..._a96d57d4bb567ac9b0b9167d5b1be011._comment | 12 + ..._bd44634b04732ffb91154c61ef9cf828._comment | 14 + ..._b89a56a5f1cd641f87925c7a5f74bcec._comment | 13 + ..._81293bf5dc8ad4552712c2083fd589c9._comment | 19 + doc/forum/armhf_binary.mdwn | 3 + ..._9ca7ff6cb1f5dfc1e5ce8527e7e0a45f._comment | 8 + ..._743ecf263d1ec1bc4f24e32c0a178f2b._comment | 8 + ...ne_-_how_do_these_play_together__63__.mdwn | 10 + ..._d90d1d599ce557af03c6f0f2ea188212._comment | 10 + ..._58b1af497cab132acb28cb5f9283ec2a._comment | 8 + ..._37d4fd8f69e8066b5aa19454b714e443._comment | 11 + ..._a974e2105774d4f82ad286ff0792ba84._comment | 10 + doc/forum/assistant_and_archive_folder.mdwn | 13 + ..._ab8808372b886fd1a9f55588d1cef602._comment | 12 + ...ckup_remote__58___Howto_restore__63__.mdwn | 38 + ..._70200f871b9df49261f32752a6bb0e67._comment | 14 + ..._173da510b45f0320ae8aa2df9f14ae7b._comment | 11 + ..._1ecea12a4be5ad09013cddb62df6ab20._comment | 8 + ..._af4bc222d1479482bd83952353c97f05._comment | 8 + ..._c1d247fa128c0a0fc899284f5f95002c._comment | 8 + ..._cf877a3502802492cd2bc3012cb2d779._comment | 12 + ...zealously_moving_stuff_to_other_repos.mdwn | 7 + ..._6bd240edf1868615024ff11c24c3d52c._comment | 13 + ..._37c5e9a7669b5b94fbadb8792a765316._comment | 8 + ..._87aa4c5942929be81ddc1e2795d56f0e._comment | 9 + .../assistant_periodical_unused_moves.mdwn | 11 + ..._98e30e1f3ca63790c4a8ce11d29634ae._comment | 14 + .../assistant_to_have_synced_folders.mdwn | 9 + ..._3bf1a44e76855e4fbdd270f97a54bcc5._comment | 8 + ..._b5f9f527597acd8f44f529f85ac305fd._comment | 9 + ..._f38a88b82328ee2d2b411f3df5c3d043._comment | 8 + ..._9b8631b1fb4c9992203efc2d29cfae8d._comment | 8 + ..._e2e49f5278b921f8817ad6ac89a6aaf8._comment | 8 + ..._690a144201e7df5972fd48af8c1d46f7._comment | 9 + ..._49b00584ef4388e130cce63f4f33572f._comment | 10 + ..._53ceb18128de33311d65b39f34b3d9b7._comment | 9 + ..._6db901470af7dc7e1da90839fc08c121._comment | 8 + ..._0ec093a51b3dab465907074beb423848._comment | 8 + ..._83fdf8c0027c860f37716f975838497a._comment | 11 + ..._52237edb2f6cbf9c96f7285ebf6abe6c._comment | 14 + ..._a7a5a4c97663211e2fb4337117ec0cb0._comment | 69 + doc/forum/assistant_without_watch__63__.mdwn | 13 + ..._be1f7c038426e53209a85ae1119269d5._comment | 15 + ...e_server___40__needs_ssh_tunnel__41__.mdwn | 10 + ..._817a3ed424e4fb76fcd33295f2953250._comment | 8 + ...ing_annexed_files_on_open__40____41__.mdwn | 8 + ...ders_for_git-annex_to_aid_development.mdwn | 34 + ..._7e88f815e8d9652ef18ea6d54b118962._comment | 8 + ..._fef17a10226af5671495c2929653c337._comment | 8 + ...ing_existing_backups_into_new_remotes.mdwn | 3 + ..._7d0b479244fefd933193d921adcd897c._comment | 8 + ..._d42222ef94f4d409ac40e523f8211ffc._comment | 8 + ..._dc93ae2a58de5620c440531f43f1237d._comment | 25 + ..._e6bb8a33608908d02eeb921d039f22b9._comment | 9 + ...ng_copies_across_mutiple_file_systems.mdwn | 13 + ..._2ff3e4d2af575b27b14a0a936ad8c52f._comment | 14 + ..._96e72de1dc7cefdaa3beedc837639f57._comment | 40 + ..._43db664a00fb9956ad392b5dc23565ca._comment | 16 + ..._6584f98910d91746203405d57d17b8b0._comment | 12 + doc/forum/backblaze_s3.mdwn | 13 + ..._854390b9a781da82ecb85ad85eecad04._comment | 13 + ..._5f1407460b6a56a8e267f8eecf4427aa._comment | 17 + ..._55362a91c4592775994999a843e648dc._comment | 9 + ..._bd008868a576bf09c6fa188dc8a5907c._comment | 9 + ..._474ca16386680fd359474f05bfbd0375._comment | 9 + ..._c84400e7dc58ed7e5db8c7883587e8f8._comment | 18 + ...ming__58___git_annex_push___38___pull.mdwn | 28 + ..._3a0bf74b51586354b7a91f8b43472376._comment | 11 + ..._b02ca09914e788393c01196686f95831._comment | 14 + doc/forum/balance_git_annex_remotes.mdwn | 9 + doc/forum/bash_completion.mdwn | 1 + ..._5c42c0c8e7fc3224bf5406880f9fd0c4._comment | 8 + ..._6cbe3c825db99bf9188a0de8bb937d5b._comment | 8 + ..._948c40f1e46ca220d61365aebcd4f6d7._comment | 136 + ..._dbae348b230b780cda91ed8576b8f9fa._comment | 8 + ..._d45570fd750ae8d69dedc3edeef0cc10._comment | 13 + ..._2dbfa336ad8957ff0cafd8301ca1150f._comment | 8 + ..._2fd198746dc7351fe957e7a8150fcb89._comment | 13 + ..._7802f4bd08dddd24ac9d19ee7847735f._comment | 8 + doc/forum/basic_usage_questions.mdwn | 5 + ..._c2a5fedc24f8c301d9042999a0371d9f._comment | 11 + ..._67d047a107b20874cb71ba311681e181._comment | 16 + ..._94b4efa49efbee741c051227b3204562._comment | 13 + ...batch_check_on_remote_when_using_copy.mdwn | 34 + .../benefit_of_splitting_a_repository.mdwn | 10 + ..._93a86cb03b66e7ab5dd7146e7b86c9e8._comment | 15 + ..._4e2fed247298d620fee7be883a1e86a6._comment | 15 + ..._practices_for_importing_photos__63__.mdwn | 13 + ..._37f0ae4b552ec2a4a144ddcdc17c8453._comment | 19 + ..._7f96f0fe0fc073321bd7c5bbd9048425._comment | 11 + ..._a_git_annex_repo_trought_file_system.mdwn | 6 + ..._50b0f3b42c5c7185c51451af80749718._comment | 14 + ..._e3e30ca123cd840288655c25b688cd66._comment | 8 + ..._00418ada32a4d93dfd3334686e391a23._comment | 11 + doc/forum/big_overhead.mdwn | 46 + ..._d5f4e353e7f711d8c38cdcc222339bca._comment | 14 + ..._cbf25217e4149f2cfad4e2bf94f2b4ca._comment | 8 + ..._475d5af95adcfcd3a51e10f270205eb7._comment | 71 + ..._1c8cc992f04fc63179094c494bd25025._comment | 10 + ..._cbfb3d557915258e72c65a4e84df77a9._comment | 8 + ..._b973529bae549bcbaaae792f0403989b._comment | 10 + ..._0c184520c30a89bd2604ab7c0eb7ac45._comment | 8 + ..._13a017c6c84511894ded2d89d86eb541._comment | 10 + ..._b4761cacc02396b5bdf34bcf3457cb91._comment | 10 + ..._633f8538f368220eaca82b8bbfe9b49d._comment | 16 + ..._599092b8d4f1fc8f378796328ef42931._comment | 8 + ..._adb4b4e7eb4dac7760f3425bae6cbbc2._comment | 8 + ..._a762eb55addf81c1c5350c7968598d0f._comment | 16 + ..._4a66f57c6c0bdc6123618cb69a719be5._comment | 65 + ..._5fa681ea0d6bd0dcac7142d40df9d54f._comment | 12 + doc/forum/browse_files_on_server.mdwn | 1 + ..._5023c6f9f4a8a7724ff057076f64ec1d._comment | 8 + ..._67096b34041fed07bbf1d0cb243e1efc._comment | 15 + ..._148f1aa0d46dcf51b855b6fb18b6a549._comment | 14 + doc/forum/btsync_equivalent__63__.mdwn | 8 + ..._6bfdc6f595a8aa8979a7c2a10925812f._comment | 8 + doc/forum/bug-fix_release.mdwn | 2 + ..._c3c23f4c0a8bdea8619479656af63af3._comment | 10 + ...Linux_fails___40__out_of_memory__41__.mdwn | 74 + ..._cd004b531ae384e134e16600b64473e0._comment | 18 + ...tions__58___Flag_HttpClientRestricted.mdwn | 7 + ..._67ab203f26e7b446fe96e01ec3706540._comment | 22 + ...from_source__58___dependency_versions.mdwn | 1 + ..._442b37aa559512eb85695f0a9e3b8197._comment | 10 + ...e_standalone_distribution_from_source.mdwn | 3 + ..._ae23bbd2da15e8ae115b4030994502cc._comment | 98 + ..._5c580c8fce388b9808c2afc778da853b._comment | 38 + ..._9b0a7c108855d9db63092dd5f93bc5e5._comment | 8 + ..._27f987a16d931a02f5a4ab3f80bf327a._comment | 33 + ..._44606ec8db82f75f37aabcd7df5c24bb._comment | 10 + ..._204eda1dc4b935ee357a6675ee14317b._comment | 9 + ..._ff968f9f9d6644b9e8607c8e76f45c1e._comment | 8 + ..._e94f70e19b77c9ad6b6349fa65dcc60f._comment | 8 + ..._0b7824acaf031d8ba69700674c82f472._comment | 13 + ..._bfec6091cc312a9d4c87163b845454f6._comment | 8 + ..._044da90b6cc18534de74ee5d38d6becb._comment | 14 + ..._5187f5f40bc47b5b079cfdd3eb5f1fc3._comment | 13 + ..._eb0c565043164c17b2a6d2c6361b6e35._comment | 22 + ..._edb3a79772f81dd3ffd00b81e79f67e5._comment | 13 + .../bup_backups_to_amazon_cloud_drive.mdwn | 12 + ..._e8f6fdc70cedd5482da6a185c6c6b9b9._comment | 7 + doc/forum/cabal_install_fails_on_uuid.mdwn | 23 + ..._2a3963e21bc7ff526124b902cb0b6ad2._comment | 8 + ..._1609525998e2b36c04d67f4d988139c0._comment | 10 + .../can_I_only_add_my_own_files__63__.mdwn | 27 + ..._767d647af9d0345f337338d6319071fa._comment | 10 + ..._0c3306ffb38b97b54e1e0436d12c1876._comment | 8 + doc/forum/can__39__t_sync_content.mdwn | 35 + ..._0d6c6f5967c91e7dda55fbf716dd88a0._comment | 15 + ..._e9c476eeac7427950573c07313a8a175._comment | 10 + .../can_git-annex_replace_ddm__63__.mdwn | 13 + ..._aa05008dfe800474ff76678a400099e1._comment | 12 + ..._008554306dd082d7f543baf283510e92._comment | 19 + ..._4c69097fe2ee81359655e59a03a9bb8d._comment | 12 + .../canceling_wrong_repository_merge.mdwn | 3 + ..._7230f2be014afcb40514ef521d53c170._comment | 7 + ..._87aabff41a1c6aec773b8f52ead51105._comment | 11 + ..._d6e45d7e4f4bdf0a08ab91a08e0c1be6._comment | 37 + ...ncrypted__41___rsync_remote_on_MacOSX.mdwn | 18 + ..._21f0101447623f5a0cf9e72c3ff463bb._comment | 8 + ..._6234ca64bd03a0e15efbe8f5c204338a._comment | 8 + ..._5ac2b520a907e232984eb513ce088054._comment | 8 + ..._183dd1c29f66539193e7c0b73f329430._comment | 9 + ..._c920d04ffe332caed9d223fa0ac42746._comment | 7 + ..._7a3cf0853a8ec7b996e19b5e80145d21._comment | 8 + .../cannot_sync___39__unused__39___files.mdwn | 45 + ..._d7c88a5cdf8ce8206795ff7ab215d372._comment | 9 + doc/forum/central_non-bare_and_git_push.mdwn | 9 + ..._76d0c73c8985e860eb86333c63be6340._comment | 8 + ...ut_view_to_directory_outside_of_annex.mdwn | 23 + ..._a31a501bdc28eabc60588502f7219e50._comment | 20 + ..._b4abbb048ebcd3c4b59d20e103948fd8._comment | 7 + ..._2139407a3a556023a2458148a4a2c009._comment | 12 + doc/forum/clear_box.com_repository.mdwn | 1 + ..._2e839d8f974269c80a9fca183712350f._comment | 8 + ..._8f9c7248a148a24ae2aba39c4a79a6d1._comment | 8 + ..._f64ad21e5abfbf4e1f925b3d651bdba3._comment | 10 + ..._f8c06ac9b23b51cf18d362c260fc47a9._comment | 13 + ..._61d401b29322802cb25896503f3e6514._comment | 8 + .../client_repositories_setup_problem.mdwn | 156 + ..._be53f90b66de690b39f487d394866a66._comment | 17 + ..._f9660534c3f3346f322de57c2da0eb27._comment | 87 + doc/forum/cloud_services_to_support.mdwn | 16 + doc/forum/cloudcmd.mdwn | 6 + ..._current_workdir_state_in_direct_mode.mdwn | 5 + ..._748481ff00374f570284bd4571584874._comment | 10 + doc/forum/compiling_on_MacOS.mdwn | 3 + ..._143ae6d4f2704d4ab74e110a2d7a3c82._comment | 17 + ...itory_vs._working_copy_in_direct_mode.mdwn | 10 + ..._a6b4db0cefa439f72b97089d48dfacbd._comment | 16 + doc/forum/conda-forge_build_problem.mdwn | 10 + ..._22e01f5f110593796b539fc7630ccb3c._comment | 17 + ...t_annex_sync_only_sync_metadata__63__.mdwn | 7 + ..._ce9d638b8a07375a79a9ee04b02d6e95._comment | 27 + ..._11b9261bc5c32d3e36357afc021ac4e1._comment | 11 + ..._07e6f767e38d9812b176ee3fdb00adf0._comment | 10 + doc/forum/conflict_with_git-crypt.mdwn | 3 + ..._b81a3cd99ff04e21ef520a497c0bd46a._comment | 12 + ..._cda648fcc5f213af06fe98428910f561._comment | 15 + ..._6e7ea4ed29e6b526c27979988d09d883._comment | 27 + doc/forum/confused_about_external_drives.mdwn | 30 + ..._8340e5ff17a4846b41789e4966fed70c._comment | 12 + ..._ad10bd0ec14c16bcad089b3ebe64580e._comment | 10 + .../confusion_with_remotes__44___map.mdwn | 113 + ..._a38ded23b7f288292a843abcb1a56f38._comment | 10 + ..._cd1c98b1276444e859a22c3dbd6f2a79._comment | 8 + ..._18531754089c991b6caefc57a5c17fe9._comment | 24 + ..._3b89b6d1518267fcbc050c9de038b9ca._comment | 11 + ..._27801584325d259fa490f67273f2ff71._comment | 16 + ..._496b0d9b86869bbac3a1356d53a3dda4._comment | 8 + ..._9a456f61f956a3d5e81e723d5a90794c._comment | 27 + ...t_annex_sync__34___resolves_conflicts.mdwn | 6 + ..._48be720ff150112f30273960f677056c._comment | 20 + ..._c091e5a668b15aca7b2faa955beab403._comment | 8 + ..._d8dddf7b565273390ce4ba1c22dabf46._comment | 15 + ..._c019c5b4d1c2a7941aed8791b6749f5b._comment | 13 + ...v5_repo_to_an_always_unlocked_v6_repo.mdwn | 34 + ..._e08eb54547bfd4dbfcc79a5a4a529647._comment | 35 + ..._85946916ac9c2a19c0d65e2b1a3e5832._comment | 21 + ...py_--auto_copies_already_synced_files.mdwn | 24 + ..._cc5e2e7630a33b73d1eb92eebe254cea._comment | 7 + ..._3cfd11d8199a4d5e442d207a1edb38e0._comment | 12 + doc/forum/copy_and_move__63__.mdwn | 19 + ..._a24b1ab4608fcf8129c9890a5ae9e943._comment | 7 + doc/forum/copy_symlinks.mdwn | 11 + ..._950de173a042a7671a43adbab02e0669._comment | 10 + ..._198f3e9db08ebcdb7ec36b76cc1d9473._comment | 8 + ..._annex_between_remotes_manually__63__.mdwn | 5 + ..._c13a0cded3a5fee06106f101f122eb33._comment | 50 + ..._1237297cfb596d59a48c8359d43a3928._comment | 8 + ..._875474a913d23823e3866cca27cfa3ac._comment | 16 + ...t_way_to_add_two_preexisting_datasets.mdwn | 25 + ..._c5c3ff25c9f5e34db222b5f4ae58b093._comment | 10 + ..._ee3ecc86990ac5a8d0c4fdfb482a7594._comment | 16 + ..._e29bf8b848da04c761dc601ac979ac14._comment | 11 + ...could_not_read_from_remote_repository.mdwn | 36 + ..._27d4d1556a80c06505ed3d8a9422d082._comment | 8 + ..._cf7d5e231675921c3d98faab3613c92f._comment | 49 + ...s___40__use_case__58___dnanexus__41__.mdwn | 2 + ..._55c2a5c932ccc5a2a49a54239cfba139._comment | 16 + ..._db80224d61ca549557af558e9a5f099a._comment | 8 + ..._8b69aa113bc35a042c90beddf8b0f3a9._comment | 17 + ..._94e2fbb04c553b2c8c7992541e634017._comment | 10 + ..._33a833e1037df7ce0fa55876e4154250._comment | 8 + doc/forum/dangling_blobs.mdwn | 27 + ..._120681851a595909e19afcc0334383ec._comment | 22 + doc/forum/dbus_and_magicmime_build_flags.mdwn | 1 + ..._9d2ae829a085582c69dcf994c26f5a0c._comment | 15 + ..._5421641e133cdadd0be5587b882ed3e5._comment | 8 + ...default_repo_version_is_still_5__63__.mdwn | 1 + ..._5f63f10cf79ef8ca33214ceaefd1271e._comment | 9 + doc/forum/deploy.mdwn | 5 + ..._bd9855cc19f0f49620258564845f1f77._comment | 16 + ...dev_machine_-__62___NAS_-__62___cloud.mdwn | 7 + ..._f77818a766f2b41d13ced2bcf4447de0._comment | 11 + .../differenc_in_webapp_icons__63__.mdwn | 4 + ..._c38e2692b13a1b76777bf88312a03966._comment | 8 + ...ull_backup_and_number_of_copies__63__.mdwn | 9 + ..._df1850059a7a3006db7cb5c588dac3d7._comment | 8 + .../difference_between_uninit_and_unlock.mdwn | 10 + ..._6b89cffc10650c087dbbfbdd3e099b5f._comment | 10 + doc/forum/distributed_borg.mdwn | 37 + ..._133d5adb83e9df38c513e17d128486d1._comment | 18 + ..._1dcf100a28991c664681d78ed4c12e39._comment | 13 + ..._f56ac8a714facc8aafb60d3da815021b._comment | 17 + ..._cf173923509ec826a1962f9a934b5a64._comment | 11 + ...not_use_git-annex_inside_your_Dropbox.mdwn | 5 + ..._5a1dc9da6e6861829e321446ec7991ee._comment | 8 + ...x_parallelize_different_remotes__63__.mdwn | 46 + ..._764f43b51a075a8c94b433eda0cff946._comment | 27 + ..._dff46561e15ba5f386dc9cecb9c88e20._comment | 18 + ..._47269e2c40c5ce27ca197ddfd5ac85c3._comment | 8 + ..._b9444184ab653718fca9df5c2068ad3c._comment | 10 + ..._5098db1fad3290cba49ea1c1163cc168._comment | 24 + ..._ac6b01d2ff9dfe6060be5956d5adb632._comment | 8 + ..._101543247268097f7535660efe0d39d8._comment | 15 + doc/forum/done_bugs_are_missing.mdwn | 5 + ..._400c15824ec84bd67583102a023edcf8._comment | 10 + ..._1fdcfb4ed807e424fe73f134c4ad9526._comment | 11 + ..._6eb74e1bcf6b062b61b25e59b0b1ddc6._comment | 8 + doc/forum/dot_git_slash_annex_slash_tmp.mdwn | 5 + ..._14b74438bb1e3e02cff7926d774ba09a._comment | 8 + ..._b1f717342c1c8ea42a451caa2d936622._comment | 8 + ..._e2c6ad99333018c8c46e736da416b8ef._comment | 8 + ..._35ae9d6bcb8d9762a92e3564b686ed72._comment | 8 + ..._92b1e8956513dbf52da31cec3f58e2c5._comment | 104 + ..._839e29d41de9dcc8f01dfdc585a51d12._comment | 12 + ..._1a35ef8cb89e0cd392f6e9fcee1fb92c._comment | 8 + ..._f4cc36c493d7c20fbaf949edd38e1252._comment | 15 + ..._69268f8aa29e807a56248f1fac86aa41._comment | 10 + ..._0ffb0c803c232a1587f956f16113aeb7._comment | 27 + ..._c303e28825241733d69fca74f2015fc6._comment | 13 + ..._3f0b376e37bd092b8d46c46bb1940e35._comment | 14 + ..._615641b3dd176d4b3a5bbfb521098e38._comment | 9 + ..._4600fa9234a787004ea0e0dbb36184b9._comment | 8 + ..._4f5cd0d0d4db0479c1ad86ffdc5ae434._comment | 8 + ...oad_from_multiple_remotes_in_parallel.mdwn | 9 + ..._81e2612ddaffefec81455e9ff706c4c9._comment | 14 + doc/forum/downloading_from_moodle.mdwn | 76 + ..._3f677130d268de4288e87cfa86ea055c._comment | 10 + ..._dcef60ec144f123dadd165fb602ab950._comment | 8 + ..._d3efb767bf9b20f96242dcf64817bd4b._comment | 8 + ...oading_mp4_by_default_with_importfeed.mdwn | 1 + ..._c9e5a3700764faa33d2c68de6a8236dc._comment | 15 + ..._ade70b45f49eb3eaf127ba7b2bd37900._comment | 7 + ...t_showing_gcrypted_special_ssh_remote.mdwn | 11 + ..._968bc2be595008790e9b93d82342714c._comment | 10 + ..._2c14d88e55ea7d4edc90ce0091025f32._comment | 10 + doc/forum/drop_old_versions_of_a_file.mdwn | 3 + ..._799a413248fb8f98efbf226b1bc4300d._comment | 8 + doc/forum/dropped_files_keep_coming_back.mdwn | 25 + ..._84655c21f59b3904c950ddccccde53d8._comment | 8 + ..._223550574fa69effabe57c4bf257e54b._comment | 9 + ..._1a2ee19bfb3d56a2e2641dbcd89d8be2._comment | 12 + ..._02a6e3591acfa410ed7c7917dc573663._comment | 12 + ...0__user_error__41__._How_to_fix__63__.mdwn | 24 + ..._bb6d749b758b17178227929bf7327fe1._comment | 8 + ..._d834df30633f7d5569797ee818cf38c3._comment | 20 + ..._1e02eff33c9fa7bea03aa6d58b910175._comment | 14 + ..._with_suffixes_differing_only_in_case.mdwn | 27 + ..._0c1bb4347902054ec97ef86eb903f060._comment | 12 + ..._62bb4be1b31bd64a046763f68a2953ce._comment | 19 + ..._99a2e752c75e5ad2ea36254627be8d18._comment | 20 + doc/forum/empty_directory_handling.mdwn | 3 + ..._34ac97b9337b6230ed8a4748203fe543._comment | 8 + ..._73a39e28d5a09ac342cb4195d263d91e._comment | 8 + ...nabling_git-annex-diffdriver_for_gitk.mdwn | 5 + doc/forum/endless_password_prompt_loop.mdwn | 8 + ..._cceba12ed25cd671c7cee5a28631163e._comment | 10 + ..._f0cb86b45eb289f35197c43f83660a8f._comment | 8 + ..._eb1dce6d9af6e19cf77df63da1a68425._comment | 16 + ...at_in_GIT__95__CONFIG__95__PARAMETERS.mdwn | 52 + ..._aa740c16099f24fd8a067ef23435d0d4._comment | 13 + ..._5bcd8554e33a716208ca205d7c0467df._comment | 8 + ..._c3bca82915cc8bd35d3f41fc95436a18._comment | 14 + ...oes_not_point_to_a_valid_object__33__.mdwn | 17 + ..._d370b044da3bfebf9e4c90ce1e243587._comment | 18 + ...error_in_installation_of_base-4.5.0.0.mdwn | 14 + ..._0b2f79c014e0dd9badd52b8b6aa47e0c._comment | 19 + ..._3badd64e48fbb174cd7de1ac9589bedf._comment | 31 + ..._d8190061ac1c683a7b699cf42e9db694._comment | 8 + ..._49a4fcd2dc4f97d4055b5051feea5e3b._comment | 8 + ...id_configuration_of_repository_origin.mdwn | 19 + ..._943ff286824bd59a164b161553d65698._comment | 15 + ...e_of_massively_disconnected_operation.mdwn | 33 + doc/forum/exclude_files_from_annex.mdwn | 10 + ..._82e7de5e631bae3b347815586274a936._comment | 25 + ..._03d4599fdceb3dff184eed82824674bc._comment | 12 + ...xpire_files__44___move_to_other_hosts.mdwn | 19 + ..._ddcc2a00be1ae96a352d75a443458bcf._comment | 14 + ..._7a4c3858c5eae409d04de3f9da43b57e._comment | 17 + doc/forum/export_single_file.mdwn | 3 + ..._36d97e3c3f07411f3d367da546759ea5._comment | 8 + ..._ec3d3fb7beb3312571ffa471c39aaf95._comment | 10 + ..._0761201bf68e1086d263776eb953c1e1._comment | 20 + ...acking_not_enabled_when_branch_is_set.mdwn | 34 + ..._c007c52d0a038c26e4f8fc50a2d23a18._comment | 29 + ..._12c90792bd8c0c37bc53806843583733._comment | 32 + doc/forum/exporting_annexed_files.mdwn | 4 + ..._e08e4c79588e17fb2f1cdf53d9fab7ea._comment | 16 + ..._15dc3024417b5b2ff3544a08beacab34._comment | 8 + ..._86f0e0f767a84a0f583e121d36cb7d48._comment | 8 + ...ttree__61__yes_always_untrusted__63__.mdwn | 5 + ..._fb579729238a36d5c3369ed07dd772ae._comment | 7 + ...l_special_remote_protocol_and_threads.mdwn | 3 + ..._f29c2b0f0f5e349e36eb47176e33498f._comment | 20 + ..._df97223aad2c8c95ce109944d64a59fe._comment | 10 + ...oes_not_exist__40__v_3.20111231__41__.mdwn | 26 + ..._990197bf01351dc1ccbe1940d5084adb._comment | 7 + ..._3bb1d21b7f0d0bd6d59190ae9d246d46._comment | 12 + ..._692f268218690437138ae0540c879425._comment | 16 + doc/forum/failed_to_push_anonymously.mdwn | 19 + ..._bdf93b0e9fb109b7a4052a99110f6079._comment | 7 + ...n_usb_drive_made_me_lose_all_symlinks.mdwn | 27 + ..._3167052f67706797b00423a50f2ae7f1._comment | 23 + ..._0082ac7a148db69293a4e37fa6d6c891._comment | 11 + ..._6411aa3e6f5c1515845f3223bbcdabf1._comment | 14 + doc/forum/faking_location_information.mdwn | 19 + doc/forum/fatal_-_corrupt_loose_object.mdwn | 14 + ..._7b0da4185861fd5ff2a7345410678f82._comment | 10 + ...___Not_a_valid_object_name_repository.mdwn | 49 + ..._48f1ee21d24a99723ff455c0c9c96629._comment | 26 + ..._eef07cc389400c38b666da4e1adc255e._comment | 20 + ..._2760c9b8b755e1ed5e01b98ea3b99177._comment | 10 + ..._344561606daab9bc1a05ec3b857b2d62._comment | 9 + ...ailed__58___No_such_file_or_directory.mdwn | 112 + ..._d98a155fa01d10ecff9058d79290156d._comment | 13 + ..._3b9ea7a1254ac5b50a5ab59cd331ec3f._comment | 8 + ..._5ee300034819c5825c676cd7e3af659f._comment | 12 + ..._cf7f5c91d3c15f72d2a714b7362c1197._comment | 30 + ...8___export-tree_object_is_unavailable.mdwn | 15 + ..._e101855120be3639fce9f3725737b189._comment | 9 + .../files_being_dropped_undesirably.mdwn | 47 + ..._d03f8ed7d3f3da58612bf238c1790fb4._comment | 11 + ..._7d885abebfec789348639494b1bb1829._comment | 24 + ..._7c70b58f89408304055eefb1b166ef2e._comment | 10 + ...inks__44___how_to_get_them_back__63__.mdwn | 23 + ..._4d07f87b433228fdaebce2805fc64492._comment | 17 + ..._97d24db6027270b9f2d759e98d5f428f._comment | 38 + ..._e61107dd83efecc3266217acad9c943b._comment | 9 + ..._362370f02ea77addf9efaed9cb4b433a._comment | 13 + ..._4333c2f189cea3430104ece6769143bc._comment | 11 + ..._8c4c2e8dc4706ca824cbbc9b2ed62be4._comment | 12 + ..._24b09f1263f6bc6b219085c17ced915c._comment | 49 + .../files_only_visible_in_.git_annex.mdwn | 15 + ..._a967dc488d4fb0fd6079b0a1b087679f._comment | 9 + ..._e024e26b943f49a5e63c8fd1cd90a420._comment | 51 + ..._2c3d5991056d5915225b2707ad7d25dd._comment | 14 + doc/forum/files_vanishing.mdwn | 12 + ..._eb69e88aee0005fca74dd540293e57ca._comment | 14 + ...nding_out_why_git_annex_import_failed.mdwn | 43 + ..._276bbd2dab64e4bbc297e0e53e02215d._comment | 12 + doc/forum/first-time_setup_git-annex.mdwn | 7 + ..._a58d83ee3a7c2251d9a775847223f8ca._comment | 13 + .../flickrannex_--_not_sure_I_get_it.mdwn | 7 + ..._57ea9f26760f970a70f09934d31a79b5._comment | 8 + ..._ba93563b4ce1f6497a9f1d5e6eb0d1bb._comment | 8 + ..._74f143965f48c89a3583acf1b6a7635a._comment | 9 + ..._493bb86dedfa91ccc0c9be4045953ee4._comment | 8 + ..._2c410aa478b21c0e6eb0e4d54bc8c362._comment | 8 + doc/forum/folder_size_question.mdwn | 3 + ..._782cbf836335d86ff29853c34f00fec3._comment | 12 + ..._391aa62e4d8c496a58be4707522d8edb._comment | 22 + ..._1e850dbe36fafe0505b60dd2ce0bd5d7._comment | 8 + ..._907f3b1cfe745abf94a6a8ba0dbd4396._comment | 25 + doc/forum/forumbug.mdwn | 3 + ...-annex_seems_to_be_in_an_upgrade_loop.mdwn | 16 + ..._ce8e7f58c3b81ec334436726be70bde5._comment | 14 + ..._43cdcdfff3aaa4482e6182d3dd77b61a._comment | 17 + doc/forum/fsck_gives_false_positives.mdwn | 6 + ..._b91070218b9d5fb687eeee1f244237ad._comment | 15 + ..._f51c53f3f6e6ee1ad463992657db5828._comment | 10 + ..._692d6d4cd2f75a497e7d314041a768d2._comment | 10 + ..._7ceb395bf8a2e6a041ccd8de63b1b6eb._comment | 10 + ..._86484a504c3bbcecd5876982b9c95688._comment | 13 + ..._1d4fbbd212fa92967abda346323031f4._comment | 8 + doc/forum/ga-ncdu.mdwn | 5 + ..._cde3f7bbd099b303bacdaa5e1588b71e._comment | 7 + ..._8d369dc264ccaf80490c1cb37a330239._comment | 8 + ..._c5ce3b663de76b50754de70b3fb23bf0._comment | 15 + ...start_playing_with_metadata_cache_plz.mdwn | 13 + ..._0547fcabefe0b8e99a43977ffec3e28c._comment | 10 + ..._606281f102d8c3168cbc55142a996e05._comment | 39 + ..._ca138f01184631135d07835d79a95112._comment | 15 + ..._750e5eaac44e53030be18858c03cbe6c._comment | 22 + doc/forum/gadu_-_git-annex_disk_usage.mdwn | 7 + ..._f632a62c4dbbf01b29f146893d7725f9._comment | 15 + ..._73461da2d55d040cb43e0db286975821._comment | 21 + ..._6c4fb123091bde435c18ac3dfd5a9b77._comment | 8 + ..._8e0e86ae716ff018025808f417e1f7f6._comment | 14 + ..._d8f69914b88feb3f3ed4f72c26dd74e5._comment | 231 + ..._067d0ffe8900751bd2d2743254ac4d77._comment | 11 + ..._ec8b57426e4d82c3392eb7dd683f2ddc._comment | 17 + ..._38296fef5a2dc5794c2dc09df676b8c1._comment | 18 + ..._1bcc94f9982c6cfd0888f3dba0f9221e._comment | 8 + ..._4365cd3031456fac1b563ee72984638e._comment | 18 + ..._2b03d7b857497cb811e992f85700cdcc._comment | 12 + ..._03a4dfaf3bd73d41c6f3c3fab0a6a922._comment | 8 + ..._fc6ddb4dc075ee42368863c1b026dbf7._comment | 13 + ..._f03254e518cbdda73e4b88e72476275d._comment | 8 + doc/forum/gcrypt_os_x_app_vs_brew.mdwn | 18 + ..._cce5e2c16720cc8e32a4a479f50ce6b3._comment | 8 + ..._8df8ba1ccea0f68110593ed90a9cad6d._comment | 8 + ..._be4de1663a37f49a4e42d6b21c0178fe._comment | 10 + .../get_and_copy_with_bare_repositories.mdwn | 7 + ..._a6e4628c0770e3f5e81348a6f29dd845._comment | 10 + ..._652fa1bae5c2bb63dcffcbda97a567c4._comment | 8 + .../get_content_of_a_file_from_a_file.mdwn | 5 + ..._174fe84e87b31419295af3397db19671._comment | 10 + ..._9cc8905f867fedbf2b10c9ad84294543._comment | 8 + doc/forum/get_fails.mdwn | 11 + ..._9c81adaedf2b526f735ed39cb9d24709._comment | 8 + ..._4ef8a59e82e38861fd36befde1ff9542._comment | 16 + ..._b4359d19a002a2903a895beae3888b4e._comment | 9 + ..._6227b1df801927cdf7a2edcc86bbdfee._comment | 8 + ..._472d50770325a87cc0daae3e6067558c._comment | 193 + ..._35174be903f055adf06af2fcdef807e3._comment | 18 + ..._annex_to_do_a_force_copy_to_a_remote.mdwn | 11 + ..._3deb2c31cad37a49896f00d600253ee3._comment | 14 + ..._627f54d158d3ca4b72e45b4da70ff5cd._comment | 12 + ..._3f49dab11aae5df0c4eb5e4b8d741379._comment | 8 + doc/forum/ghost_semitrusted_repositories.mdwn | 28 + ..._99bea1a964da9c5603b8cfbdc19bcde8._comment | 19 + ..._fe5fe5539d06c6b1ef69f3ed805f1ab4._comment | 8 + ..._588325ef52c80cfc67d1dd80a9d5bd13._comment | 8 + ...t-annes_assistant_+_MAC_OSX_questions.mdwn | 16 + ..._e661f31acd08a6459842f7f95e5c062b._comment | 9 + ..._e71a9d1fcf1f945fec0b7834b6038e91._comment | 21 + ..._372d9da8295d093b8b316f0a48b60ee1._comment | 12 + ..._573537a49e082515bfb1be84c91b5d1b._comment | 10 + ...addunused_with_original_path+filename.mdwn | 11 + ..._b24b20d6351d0373f9517438c33f05c1._comment | 12 + ..._cddedfd83ee154f44b83f2414eb103d0._comment | 8 + doc/forum/git-annex-import_questions.mdwn | 2 + ..._e353e5ae20ba379c42fb39825c57147e._comment | 23 + ...pair_not_able_to_see_external_remotes.mdwn | 9 + ..._b30811d84190110b9d084e42bd4a6282._comment | 8 + .../git-annex-sync_and_git-annex-config.mdwn | 1 + ..._1372a7d54e7ef017cc4fa34358c122e0._comment | 8 + ..._dd5cd6f18b3d0d9cf6ad97181fcbf4b1._comment | 8 + ..._46b1ab0fcc3b9e5a974d1bf1c4d912e6._comment | 9 + ..._e4e1d59b43fc954189306de242c37dcc._comment | 8 + doc/forum/git-annex-sync_with_bitbucket.mdwn | 11 + ..._b95e03d119c83ac061c470801b157d55._comment | 8 + ..._31f7eae218447a17f316a8d13dd97ca0._comment | 9 + ..._eddbd42891a1877148a8920f19fb780e._comment | 19 + ...git-annex-sync_without_syncing_master.mdwn | 6 + ..._8ed0014e53a7ab49d76c072de074adda._comment | 22 + ..._585648a04a02760a1f16394c00728d79._comment | 19 + ..._233c20435643d2701c94a2cf30ca6483._comment | 25 + ..._a8f681ec33f2fef16b9b8eb6633f8fe4._comment | 10 + ..._a125638afe0cf57fe97e6051da943406._comment | 12 + doc/forum/git-annex-watch_clarification.mdwn | 5 + ..._66de424e6d09b67cb75f6ddfef1424b2._comment | 10 + ..._aa709c1ee602ae3211f36cba68c155c4._comment | 8 + ..._db050d4b4d08100c6be204cd64ebfbf3._comment | 9 + ..._7255d87f5802a8d12204e4afc797070d._comment | 15 + ..._4a1b1176bf2499db67ffea2cce3115df._comment | 10 + ..._69a3377204ea4b102d9c15fb160e71b2._comment | 9 + ...esn__39__t_build_with_QuickCheck_2.10.mdwn | 8 + ..._0e25ab25c0fa3d41336e6b7551ef9e47._comment | 11 + .../git-annex_SSH_server_+_cloud_remote.mdwn | 13 + ...s_not_exist___40__no_such_user__41___.mdwn | 24 + ..._94d92b7e64ad31db8837dcf3d131cf23._comment | 28 + ..._c9474c4e925948d0cabdfe7f988e1ebe._comment | 15 + ..._3a9e1cb8f36a44fd1917b5fc191776a3._comment | 10 + .../git-annex__58___map__58___1_failed.mdwn | 12 + ..._35ff3256e823ab8cfc53276a2123ad5f._comment | 8 + ..._b0826073ebbd2847f4ab0d9bdba2dce5._comment | 14 + ...ource_busy___40__file_is_locked__41__.mdwn | 8 + ..._0a5894ed2c5e0b8155e69ff85741a51a._comment | 9 + ..._85dc89b0f0ad813321b034f3fd3a83a9._comment | 29 + ..._4462c0640e11e20a8655743ecc78eaaa._comment | 76 + ...___unknown_response_from_git_cat-file.mdwn | 10 + ..._96ad30294a6f18c0f73be1136de47632._comment | 22 + .../git-annex___38___ikiwiki_experiment.mdwn | 28 + ..._9f74449ec91577dbf6095f4beafac293._comment | 10 + ..._e034585c8b51cc30b35c1f7ae68205bf._comment | 14 + ..._fbbd47c3dbe8de24b0df664e4afd5cb8._comment | 14 + ..._55da5c3c41c13b08590ce1ff8117cef6._comment | 23 + ..._f67823351164ddfe7d595685c3679652._comment | 10 + ..._d5cc91164772849d027fed5f962d9000._comment | 10 + ..._cb4ec7ed3c39d0649133191a85ea6ab3._comment | 17 + ..._86565e5e1508ff1862f88975446650a2._comment | 12 + .../git-annex_across_two_filesystems.mdwn | 30 + ..._53167648b8b70b41d19ca662a5f3687e._comment | 26 + ..._39adeebc1af9c437f1fc2e00c07509bf._comment | 11 + ..._f4e3f28db005301adeef7ccd2c9998fb._comment | 18 + ..._53fa7ac6f80e3281768a7bfd3d438b34._comment | 10 + ..._2e1be54c01970ef3456e8af4aaf00cbf._comment | 10 + ..._aa6b153478f79c78e778865a99f01373._comment | 21 + ..._b87281c6a8b068cec60d2d5b7d015a23._comment | 25 + .../git-annex_add_out_of_memory_error.mdwn | 38 + ..._d90d392db9a4962f9f8eb0ee95bf2914._comment | 24 + ..._459f810fd06aab3ddeeba8207d774dc0._comment | 21 + ..._d7d3785b65b0608424b25056c9e3a139._comment | 8 + ..._a2331032781c2fa3cdf22c0dc6b5b869._comment | 19 + ..._de9d956d95cb41e2372eabbf672e0f67._comment | 18 + ..._91af8300d640c34ff2466c89ec7a234c._comment | 8 + ..._ef913a45e3d865d088cf11460cd88020._comment | 14 + ..._64008199df70f77ab64882339aa079f9._comment | 11 + ..._6a8580087688b4bbfc3241292df5422e._comment | 10 + ..._76a65b4edf4f6e3896f1593a197f24eb._comment | 8 + ..._ffbb059664541c92dcbf97c150d9b951._comment | 42 + ..._7ef671c0036c77ee5707a6e00dd4dd6a._comment | 43 + ...e_other_way_around___63____63____63__.mdwn | 28 + ..._0bb5e21b4cbaaaa61fbdb2e0066f0ebf._comment | 12 + ..._ab6420f7bc18e8143201c603c09a0d7e._comment | 10 + doc/forum/git-annex_and_tagfs.mdwn | 14 + ..._887c74cb61d30198322ef74ebc80f950._comment | 8 + ..._8769d6e57061023c0828af3e38faafba._comment | 7 + ..._d96948c444f9f485a329420b7c9e3b16._comment | 7 + ...ts_to_repair__44___but_never_finishes.mdwn | 1 + ..._a12892b2881969ddd6faa92d860e1bc8._comment | 7 + ...ex_assistant_with_2_dedicated_servers.mdwn | 11 + ..._533ade2215c879cd46782fd66a97b167._comment | 16 + ..._c9ae51d7b772cf7a91d90925f74d2b60._comment | 10 + ..._41fbee0ec9bc890e309bcd48a58c3851._comment | 18 + ..._571cffc0beb8ba5fc936db6971cd3d62._comment | 8 + ..._0fb62af673a4bc8183e8fef048ceedd4._comment | 10 + ..._53a79af2d8e3abe50b983bf91972b8f2._comment | 14 + ..._c0ba3e8b7fbf8a5ed718001cec8df676._comment | 35 + ..._60c39bc8ef74e80e72381d514b6dd223._comment | 8 + ..._6241120b4325c905661ef72881f4d7af._comment | 20 + ..._cab00b8fa195340f4d3fdaf5af975b57._comment | 8 + ..._e24df9a1c68724a912b8ac6533d9bd25._comment | 16 + ..._ace3dc7c60c710a04b0a587206b341c4._comment | 8 + ..._9a96bc970a17ed62b0ceb7aa3f0a6f8b._comment | 14 + ..._ea88e0696f6e25e6904248a323f6cc36._comment | 8 + ...Meego_Harmattan__41___and_Sailfish_OS.mdwn | 7 + ..._301a51c48c3d54f9d37feace26a772f8._comment | 8 + ...sing_zombie_git_processes_to_build_up.mdwn | 27 + ..._3bc5af3b28094fc042c207e307fe0c18._comment | 21 + ..._89b9fe9c689515a8f874dee96864ff33._comment | 14 + ..._b48f8d801305d9bde08060f06634b88e._comment | 12 + ..._41e0fada90d795b9be12929ed66231e1._comment | 7 + ..._4bd86a227f117dbf5d1b12fbcf873e62._comment | 9 + ..._a63df20ab1888e4dc5e7f002b4a68b5f._comment | 8 + ..._3908d1552421edb054dc1a56c449ad23._comment | 8 + ..._5adf7777f9495e28432a0d60a15493ee._comment | 8 + ..._b8a7f87aa1e9101fbb3e1d4e29febff5._comment | 9 + ..._122c584af1b1b6894cfccd4e16d2d76a._comment | 15 + ..._4668f6cc692c49a456418f783655602b._comment | 40 + ..._8e9feaea0e807cefee95166508c9c7de._comment | 17 + ..._02c5903bf4de4b94e6db84bc43b3b3d8._comment | 27 + ..._b6780a99d7a175d2ff3e33e198c28a9d._comment | 37 + ...o_and_GDrive_special_remote_in_common.mdwn | 20 + ..._10fa70e1e5e08e12ab7c1570881b38f8._comment | 18 + ..._ff0dab8dc544f7aa8e4ebfbec8f2a081._comment | 9 + .../git-annex_communication_channels.mdwn | 10 + ..._198325d2e9337c90f026396de89eec0e._comment | 17 + ..._c7aeefa6ef9a2e75d8667b479ade1b7f._comment | 8 + ..._1ff08a3e0e63fa0e560cbc9602245caa._comment | 8 + ..._1ba6ddf54843c17c7d19a9996f2ab712._comment | 8 + ..._404b723a681eb93fee015cea8024b6bc._comment | 8 + ..._0d87d0e26461494b1d7f8a701a924729._comment | 8 + ..._2c87c7a0648fe87c2bf6b4391f1cc468._comment | 10 + ...by_a_case-preserving_filesystem__63__.mdwn | 73 + ...x_does_not_protect_files_on_NTFS-Fuse.mdwn | 8 + ..._4aef65f680e4801eb110fefa1f947f02._comment | 11 + ...ot_respect_preferred_content_settings.mdwn | 18 + ..._ea347ea6ebdfe5ccfb0ed8786638f279._comment | 17 + ..._5fac7c41c9841cea4234afa0a98b1636._comment | 8 + ..._e2ea1843bbc9580ca7b4ec494f53b552._comment | 8 + ..._59ede467a902f27b81f14e4706a7503a._comment | 8 + ..._doesn__39__t_build_with_feed-1.0.0.0.mdwn | 209 + ..._0be4545b1d93232a721c5ae65030334c._comment | 7 + doc/forum/git-annex_fails_on_Windows.mdwn | 56 + ..._451a2cdfa6f26e2bd319ebf4ce09da68._comment | 15 + ..._57b4fd347f74b3536ab0f0a5d7709af8._comment | 8 + ...e_repositories___40__ssh_server__41__.mdwn | 73 + ..._cb691410d2a9ef4393af5362000a768c._comment | 12 + .../git-annex_help_import_outdated__63__.mdwn | 13 + ..._ada30e2fead4b5b8f5e53388f941eb07._comment | 13 + ..._ca898237f42af1205acab509e4d67d38._comment | 15 + ..._language_for_mere_humans_of_us__63__.mdwn | 1 + ..._29eda7ec1519f339d5b3601559fe0bb0._comment | 14 + ..._a2b2183ee86377cdfef7c3acbe9552fb._comment | 11 + ..._5605d42a68b3140cb660eb710ce5031e._comment | 12 + ..._f56508164c71b2080150bc354e5de4b7._comment | 9 + ..._c8cdb0faa342fe1f9407ad4c97e6bc3c._comment | 10 + ..._25ce5eddeb1b65aacd5d86e09c3719b8._comment | 13 + doc/forum/git-annex_memory_usage.mdwn | 29 + ..._50753a133c200cdf6d855c65e6d4422b._comment | 15 + ..._does_not_appear_to_respect_numcopies.mdwn | 36 + ..._5dba0ff04c86c7b2697a0750fd1e4b5d._comment | 15 + ..._114cc3c9236ba930117cc14a0dddc3dd._comment | 18 + doc/forum/git-annex_on_OSX.mdwn | 1 + doc/forum/git-annex_on_Samba_share.mdwn | 9 + ..._3e9cfdf2c088e48c967ad08f79966742._comment | 12 + ..._9d3df393b7b727653598453d94dd33db._comment | 12 + ...on_Ubuntu_13.04_and_13.10_not_working.mdwn | 12 + ..._209956f3812450a43986d4ca5e647da6._comment | 10 + ..._12a58b8efe545e09b64760c87849839b._comment | 12 + ..._e0f7328603256f25c3be3706ecc9c76c._comment | 12 + ..._6bb8e4522241556fb82784d9b834cbfe._comment | 10 + ..._89a5296b461d400b51006074a13a4560._comment | 8 + ..._62daef4b4392c951b914a01b3effac11._comment | 8 + ...git-annex_on_archlinuxarm__44___armv6.mdwn | 20 + ..._88fa644df8614c2db0d092b3eb1d3156._comment | 10 + ..._b25ca7520ff7e339ec887a379d5100ee._comment | 10 + ..._eda0e90c1285396b1ab20ecc04ea6e29._comment | 8 + doc/forum/git-annex_on_openSUSE.mdwn | 20 + ..._97313a8a7fc7f558b5956989442a0f0b._comment | 13 + ..._bbe6925ca465d13b050639c18abcd890._comment | 8 + ...loses__47__doesn__39__t_run_on_launch.mdwn | 7 + ..._a47174f8438bfaa42fb8067bca77bf4c._comment | 8 + ..._567bb460cec7cd2135386acf4e7dceb4._comment | 8 + ...l_invocation_and_the_git-annex_branch.mdwn | 1 + ..._3ece379be6645e75eff0d0acdc0a832f._comment | 12 + ..._5aa79212878820270d9148275829727b._comment | 11 + ..._8a46c0146f81d6d6147d8cfdc1277595._comment | 22 + ..._aec9399cdf7b11011c9b577a6800b490._comment | 7 + ..._aa4091341c7a067b46b57dea9dd02c22._comment | 8 + ..._7d6d0da2243967b9660d8222c546112d._comment | 18 + ..._ae5fb82005702e9b5ed14fa37f80a91a._comment | 10 + ..._b0bc7c10d97a03497354aef2b011e1f1._comment | 8 + ..._deb88db3c97645b1aa180813401fa436._comment | 9 + ...nex_pre-commit_eats_all_my_4GB_of_ram.mdwn | 24 + ..._ff16c7932b60b85c744bafc48bb040e4._comment | 13 + ..._5599cddf579d18f70cab6e48d04ae99d._comment | 12 + ..._412941e9385f63153b23695641e71deb._comment | 15 + ..._112ad140d9006c530db2121bec24de30._comment | 10 + ..._9178023b95683a649355f291165a1467._comment | 8 + ..._9251203421c1c3c3aed7828c4b97ecb8._comment | 17 + doc/forum/git-annex_s3_failure.mdwn | 33 + ..._099023ae32a6a3417cc9c8bdcce9a89d._comment | 16 + ..._c869b85bb2bea4a7a99e107f4a3cfb0f._comment | 8 + ..._b9e52fe4d14104398d57a6bcc7f2deaf._comment | 10 + ...nt_available_from_which_version__63__.mdwn | 12 + ..._104e1b7e7643844f221f85dcbe9c9c4b._comment | 8 + ..._sync_fails_in_repo1_but_not_in_repo2.mdwn | 45 + ..._5cca2fbce3db1c691f43e43f9343f9bd._comment | 10 + ..._1dfeb722edd54c68b4220d00c0a175e5._comment | 35 + doc/forum/git-annex_sync_here.mdwn | 19 + ..._3ebef27614bd72b38404c1940007e68c._comment | 8 + ..._1b0543443759202ec6a85a26088ddb43._comment | 9 + doc/forum/git-annex_teams___47___groups.mdwn | 5 + ..._0450673ab74f184a47ac7bab568d26dc._comment | 8 + .../git-annex_tor_remote_not_working.mdwn | 15 + ..._15cce70b24769832ccf9782d1215d605._comment | 20 + ..._e17a7f8a98f4614f46f05228f604a562._comment | 10 + ..._8ca1bc7358ad96ffb711d7ab1e4fd22a._comment | 10 + ...nex_unused_not_dropping_deleted_files.mdwn | 34 + ..._2152cfb09675e46e7492e198dd3ea094._comment | 8 + ..._97e666dbac9de2a5e688921cba8a42e9._comment | 20 + ..._d7b0e9515bface28f3650b8aa20ec2f4._comment | 8 + ..._5816f6cab42e27e724e735368f693b09._comment | 8 + ..._8e97f39225515f0bf8b168dfd6a0efab._comment | 10 + ..._bef37f8ec9c337387b79ffd6d56fe425._comment | 10 + ..._bff3bcf9f1b7c458afa98cdb18883153._comment | 28 + ..._7259b8e9616009472ad3a10426f3d8ea._comment | 17 + ...sed_on_directory_special_remote__63__.mdwn | 15 + ..._5fb31042ed7c5c52969451b6fc0f4ddc._comment | 12 + ..._content_settings_are_not_being_saved.mdwn | 1 + ..._81111f59caea9f70cb9d597381e42c96._comment | 8 + ..._8ca9156d21d9f3db0d83d6aa9b69caa0._comment | 17 + ..._9da6ca0250ab0dcfc9a012df75e2e711._comment | 12 + ..._55c52c45f3aaddfb63a1f53efe2ee582._comment | 8 + ...x_webapp_launch_behavior_is_confusing.mdwn | 8 + doc/forum/git-assistant_clarification.mdwn | 11 + ..._8f553e59da12f798b854a457b96b5778._comment | 14 + ..._06cf62b599edea6ad8396776f0081494._comment | 10 + ..._36f0bd6e7a824e6ef40a309850bb087b._comment | 15 + doc/forum/git-like_git-annex_diff.mdwn | 11 + doc/forum/git-remote-gcrypt.mdwn | 1 + ..._175c8c35d9bbb470fcc17697eb8cc6b8._comment | 12 + ..._fdcaf507e14c995636dd93a41e488df3._comment | 8 + ..._f4e830f961dbe1c60ddd277b9d888133._comment | 8 + doc/forum/git-remote-gcrypt_and_rsyncd.mdwn | 32 + ..._34dd343ed75918f5969f6a23dfae3317._comment | 15 + ..._78b89867bd1af78a91826022651a57ad._comment | 18 + ...air_doesn__39__t_build_with_GHC_8.0.2.mdwn | 10 + ..._0a6ea834f6515b888e5c40fef08f4e2d._comment | 9 + ..._bb490f71aed0cfe119beac66cecae99c._comment | 9 + .../git-status_typechange_in_direct_mode.mdwn | 48 + ..._12c8b67aadbfa2b073e12997a55d49a7._comment | 12 + ..._005d1b17f3c2ae192aa30c6e5163989e._comment | 8 + doc/forum/git-subtree_support__63__.mdwn | 9 + ..._4f333cb71ed1ff259bbfd86704806aa6._comment | 10 + ..._73d2a015b1ac79ec99e071a8b1e29034._comment | 8 + ..._c533400e22c306c033fcd56e64761b0b._comment | 8 + ..._75b0e072e668aa46ff0a8d62a6620306._comment | 8 + ..._f5ec9649d9f1dc122e715de5533bc674._comment | 8 + ..._85df530f7b6d76b74ac8017c6034f95e._comment | 8 + ...re_too_many_unreachable_loose_objecs_.mdwn | 29 + ..._e3c37fc6e45de48a4d5c1eb36e8d44df._comment | 19 + ..._c77b9790da099a94ee368de6a557d4b2._comment | 18 + ..._f0c6869f31a31803adec0fdc0befa178._comment | 18 + ..._a_git_command_error_after_installing.mdwn | 38 + ..._8a2e3be32800b7b8a6fa78bbdcba7608._comment | 8 + ..._451b3c89d1b98212d5c21efa4e535424._comment | 8 + ...nex_add_crash_and_subsequent_recovery.mdwn | 25 + ..._062d0153a379c1ba1df8585b90220d3d._comment | 18 + ..._6fc6be43c488c468a4811cd0a1360225._comment | 19 + ..._45efaaf27d9b580c4c75cbcdc4f65b64._comment | 10 + ..._c560eae40867512b0af2cbef161fc8ac._comment | 8 + .../git_annex_add_freezes_on_direct_repo.mdwn | 21 + ..._290df6fdd3c9042308638f1e8b66b805._comment | 8 + ..._3aa5d0ef823592baab79382851385979._comment | 11 + ..._cba1ba0c8b0f2e0f4186e7695d9df569._comment | 8 + doc/forum/git_annex_alternative.mdwn | 10 + ...ant_-_Changing_repository_information.mdwn | 1 + ..._cde71a410200a7478180748fdcde0352._comment | 8 + ...istant__44___share_with_other_devices.mdwn | 3 + ...ex_assistant_repository_history__63__.mdwn | 7 + ..._6f87f31e18cefedcc6bce95dbeb85a0b._comment | 8 + ...-to_blah_much_slower_than_--from_blah.mdwn | 15 + ..._5b6e0b749b01a97a6b52a2c1cca6e35a._comment | 12 + ..._8f2567f4c4f6db2078211a87689757d3._comment | 17 + ..._ab98121076b88f351fc8cd9197e6bf64._comment | 8 + ..._cb13328add1b7a812efd817ad3dd1a4f._comment | 8 + ...e_about_why_some_files_are_not_copied.mdwn | 59 + ..._75445fc0e01ee99bae1c1f5a60e314bc._comment | 12 + ...nex_copy_to_google_drive_is_very_slow.mdwn | 11 + ..._f3085ef9ddff51ee4110cc1000d26da2._comment | 16 + ..._539dbce8852a9b6ae20ff0e55e74fc2a._comment | 17 + ..._drop_not_freeing_space_on_filesystem.mdwn | 25 + ..._ce1b32c2765edb695e5d9dc8f0ac86e3._comment | 16 + ..._248cb012c87605479fb17fa4aadc1185._comment | 16 + ..._de4aa12c84a6025497f8c743a397ef63._comment | 14 + ..._368b2c07dc7d98534a77c6153e8486ae._comment | 18 + ...glish_filenames.__Rsync_problem__63__.mdwn | 24 + ..._292ee7c8b37cbd13f03eb67d0359b99e._comment | 10 + ..._f6341119fcfde5d8160c8f603b1a6fea._comment | 10 + ..._8ad3a1d1fe5995d61e5e137280bc76c3._comment | 8 + ..._86b61b0484f3f4ecff657e46333b3d4f._comment | 8 + ..._5ffac00d08d26acaba8c3513b24c4d65._comment | 10 + ...content_replaced_with_symlink_content.mdwn | 32 + ..._f6f4be7161d4c35c7de1d9751ddbd3c3._comment | 14 + ..._da848024c40eb65e6214bd95b73e078e._comment | 11 + ..._cc703ef5015527425572002295568923._comment | 13 + ...nnex_get_--want-get_another__95__repo.mdwn | 68 + ..._0be0b3981ddd0743ff26cf6d396e521d._comment | 16 + ..._b1ead1085a87818625579bf1ef151b5d._comment | 8 + ..._cf2018852c84b0bf1ac061def6f0ac5d._comment | 27 + ..._22562e8f1f2f91b9f9a5939ec9006cb5._comment | 38 + ...ils___40__Action_blocked_by_GIT__41__.mdwn | 11 + ..._476b96f4ffd57bfe6e66c5388a19e9a5._comment | 17 + ..._6da3b78489ea140b321d780ef669bcd3._comment | 17 + .../git_annex_get_creates_a_new_uuid.mdwn | 6 + ..._004c87183968c326058bd3159a5baa0b._comment | 14 + ...x_hanging_in_smudge_on_2k_file_on_rpi.mdwn | 11 + ..._06b5d0c9c6037ffdafab6c01763061de._comment | 25 + ..._471a44594af15057dd4781e759013627._comment | 9 + ..._66f89cded0da36e96099d29542f2455b._comment | 9 + ...nex_info__58___local_annex_keys__63__.mdwn | 27 + doc/forum/git_annex_init_timeout.mdwn | 43 + ..._e456f5367af5a5a3a31fc982952079e3._comment | 22 + ..._bf15b686b07c5e6e95796affa497a541._comment | 13 + ..._1e733fad01e6b420c7fd9f7832e9b3f7._comment | 10 + ...nlock__47__fix_on_non-committed_files.mdwn | 15 + ...___47___metadata_in_git_annex_whereis.mdwn | 1 + ..._7fba10b85f4d9289c7782eccef46949e._comment | 8 + ..._7dcec124ea7d0291ed40d80e2ffd5c7e._comment | 8 + ..._24c54ed70220974b98700bf717d1e770._comment | 29 + ...sx_only_creating_symlinks__63____63__.mdwn | 18 + ..._6889c4452e636474b4e70798b404fed2._comment | 10 + ..._978fc11c463a457382fddd668cd1d0dd._comment | 20 + ..._4420bd3afaecd7536b02fc08cee82dbe._comment | 8 + ..._99286f17a87049c303f2aa34c0a90286._comment | 13 + ..._39bad7441dcea4da4b389700301233de._comment | 8 + ...air_--force_fails_without_explanation.mdwn | 34 + ..._716cbfe900552a453965ac4abd44e7a4._comment | 9 + ..._f8ff4c8663d8b7bb30f7b7763be33501._comment | 8 + ..._682cb114d133713f80bdda97a4435a5e._comment | 8 + ..._cbc49405ab99e8722216739732ce394d._comment | 20 + .../git_annex_repairs_since_thursday.mdwn | 5 + ..._38b4563db47ce9bdc52eab5506de20f8._comment | 8 + ..._b072ad2864e1caa7459d17d3426c8eee._comment | 12 + .../git_annex_sync__58___only_git-annex.mdwn | 3 + ..._2be68ed36a1e6bfc896d5aea9463d3c7._comment | 14 + ..._50e137e4d278dfd0103a41aff0cfa3a9._comment | 10 + ..._7753f8276478e0e05c10dba2b84bbc49._comment | 12 + ..._52010f21a15d76d68986aa1fba29aaf1._comment | 10 + ..._df94154fbbc4edbf7ff658f61bde48b5._comment | 11 + ..._sync_destroys_data_on_shallow_clones.mdwn | 2 + ..._431fef51e00f19cdf206a5ab97570be5._comment | 84 + ...annex_sync_dies___40__sometimes__41__.mdwn | 22 + ..._48bbac0545bf13bbf04da723e418d037._comment | 14 + ..._sync_remove_all_recently_added_files.mdwn | 40 + ..._6c059f7b2eb9d213bc0865739832b5d2._comment | 8 + ..._27a56e101f7c3fcba90b4c69fa39f4c4._comment | 10 + doc/forum/git_annex_sync_update_remote.mdwn | 50 + ..._d6410587c442bd6323991f7839c1b5b2._comment | 10 + ..._704cf62eb4add2459e509cc5fdbfeb68._comment | 24 + ..._9b6ecb7342aab7f0320ed7567ee5fa0b._comment | 8 + ..._221e01e024595f444e629db510eb60be._comment | 22 + doc/forum/git_annex_test_on_windows.mdwn | 5 + ..._258ac5cfa2f5d24e737d94dc48f06899._comment | 10 + ..._annex_uninit_creates_broken_symlinks.mdwn | 7 + ..._b7fb7fac51f59b23aafbc8dcce0aef07._comment | 11 + ..._40__preferred_content__41___examples.mdwn | 37 + ..._1e59c9476b206613285e4f39b2c9efa8._comment | 14 + ..._9d0cfb1d221e3ac6ed15db9cefab60fa._comment | 7 + ..._78bc3e56502e425f4f77bc35ed2199b8._comment | 41 + ...le_exists___40__it_doesn__39__t__41__.mdwn | 7 + ..._08e3d99b682e640b72d0094d593f9d53._comment | 7 + doc/forum/git_annex_view_tags_failing.mdwn | 16 + ...o_repair_every_time_it__39__s_running.mdwn | 5 + ..._c182b03bae6e691eb68465fedf5c77d5._comment | 9 + ..._6b3427b2d3e1c5f4c0582be1020c89f8._comment | 12 + ...put_with_two_variables_with_same_name.mdwn | 21 + ..._3bfde59729b904aa1ef815427dd35ae6._comment | 8 + ..._d08a955a11953cc783f09bfba180dbd6._comment | 8 + doc/forum/git_annex_windows_and_rsync.mdwn | 26 + ..._33249bf910446fcf98ffb2e7e35017bf._comment | 7 + ...annex_with_local_apache_webdav_server.mdwn | 23 + ..._a3b89f90f9ac70e0a9b0711ede1cb810._comment | 12 + ..._d8e9237cf6e7f7558f836ba1352f5517._comment | 13 + doc/forum/git_clone_over_ssh_hangs.mdwn | 17 + ..._07ffe356ef5c441118cc9329060812f2._comment | 12 + ...git_lfs_special_remote_implementation.mdwn | 9 + ..._a61494b02c831e84903f28d9900850ac._comment | 7 + doc/forum/git_pull_remote_git-annex.mdwn | 11 + ..._9c245db3518d8b889ecdf5115ad9e053._comment | 36 + ..._0f7f4a311b0ec1d89613e80847e69b42._comment | 14 + ..._1aa89725b5196e40a16edeeb5ccfa371._comment | 14 + ..._646f2077edcabc000a7d9cb75a93cf55._comment | 37 + ..._4f2a05ef6551806dd0ec65372f183ca4._comment | 10 + ..._3925d1aa56bce9380f712e238d63080f._comment | 8 + ..._24c45ee981b18bc78325c768242e635d._comment | 8 + ..._7e76ee9b6520cbffaf484c9299a63ad3._comment | 12 + ..._status_is_slow_twice__44___then_fast.mdwn | 39 + ..._a32e4d4255a1afcfd05c374d0fffccab._comment | 10 + ..._1aba5ad6deb4634fca187ecc69a6adf9._comment | 11 + ..._status_typechange_in_v5_direct_false.mdwn | 33 + ..._eb4e2b1fd7615e2b6936b5df01d68d1f._comment | 16 + ..._19df04820aa80549cfabac0141c372c0._comment | 8 + ..._20e04806a59e05a453431cb90086ccac._comment | 10 + doc/forum/git_tag_missing_for_3.20111011.mdwn | 1 + ..._7a53bf273f3078ab3351369ef2b5f2a6._comment | 8 + doc/forum/git_unannex_speed.mdwn | 1 + ..._10cf326248f4e89e1f75bf97d7574763._comment | 7 + doc/forum/git_unlock_failed.mdwn | 22 + ..._483dbd405b41b7bce343d7c08be8d92f._comment | 8 + ..._76903b206b8cf6dced44a2da29f57201._comment | 27 + ..._3331c627e0a48f8d2698b2bda1e0748f._comment | 11 + ..._a24ddc8effd6983d6ed1d3a5e1c62b45._comment | 9 + ..._e88de8c0fdd998236ba18a60d9308df8._comment | 8 + ...ate-index_message_after_git-annex_get.mdwn | 17 + ..._606b627b91a6e9864653ed86252b4bd7._comment | 15 + ...ls_and_daily_free_retrieval_allowance.mdwn | 6 + doc/forum/got_confused_by_fsck.mdwn | 43 + ..._ab35fea4d46ee93e62ab67e5af3dfcbf._comment | 8 + ..._19c730cb1337dc8794721cf5679c930b._comment | 18 + doc/forum/handling_MP3_metadata_changes.mdwn | 12 + ..._aa4955fd64ea5aa836f1a591e185c4a2._comment | 8 + doc/forum/hashing_objects_directories.mdwn | 27 + ..._c55c56076be4f54251b0b7f79f28a607._comment | 12 + ..._504c96959c779176f991f4125ea22009._comment | 14 + ..._9134bde0a13aac0b6a4e5ebabd7f22e8._comment | 12 + ..._0de9170e429cbfea66f5afa8980d45ac._comment | 12 + ..._ef6cfd49d24c180c2d0a062e5bd3a0be._comment | 12 + ...lp__44___a_bunch_of_files_disappeared.mdwn | 15 + ..._56cffd43ad7056a34c23b139f95ea58e._comment | 15 + ..._7675ff78cf1b5f58618c5c57da8591b5._comment | 23 + ..._4b700ccba2b40fdc1d172a3dcbc441e5._comment | 10 + ...ing_git-annex_on_top_of_existing_repo.mdwn | 12 + ..._4cb38d71c943657c5ba0896cd70d2e64._comment | 8 + ..._b5e94c10ebbed9125c7e2332f75709ca._comment | 13 + ..._2b3b93bbc60fbc24d436231954d6822a._comment | 10 + ..._2dfda33ffa39b92b16c8bd9005e1cefe._comment | 21 + ..._96b1eb1e8e9f315c646f4686870f9b52._comment | 10 + ..._e85c3fa1d17f1d6ec625b9c4f9b698c3._comment | 47 + ..._15d918ededb5b8375b0ca13d0b3523ff._comment | 8 + ..._dcc3f2c6d55006776610e8d770b61d12._comment | 9 + ...ith_building_git-annex_on_conda-forge.mdwn | 8 + ..._369460f5de3219b80a7b2da5bda9aced._comment | 13 + ..._e72eaf736e2a534fa5970183a2f671af._comment | 8 + .../how_do_automated_upgrades_work__63__.mdwn | 11 + ..._cfd00ac3a3eaa3c2a1d430f6544c32f0._comment | 15 + ..._5ef98e46c514e9b794ee719e4cc8fda4._comment | 7 + ...manually_sync_my_external_drive__63__.mdwn | 9 + ..._4fd8722cafd55b0503c802289206645a._comment | 10 + ...annex_commands_supposed_to_take__63__.mdwn | 9 + ..._26d959bb3cfdc690b1eab41c9b0b5dc4._comment | 31 + ..._move__34___URL_between_remotes__63__.mdwn | 6 + ..._d4fb3eff1b61c60224fec112df9f1136._comment | 37 + ..._c122906fd03bd723aa027fe32fd4fab6._comment | 9 + ..._adebe3ba65ba9fc0a4a7f4b664afc069._comment | 20 + ..._46ad0779ff71cfbadd663fe413d32ffb._comment | 14 + ..._712f40f27b27dfaf58c416ca7dc19045._comment | 17 + ..._260c238435f8f5e53511de7e574dd53f._comment | 29 + ..._742fde3d8f7aa0caa39dadc961c1b3d3._comment | 8 + ..._removed_files_as_repo-droped_entries.mdwn | 9 + ..._a9a4baebfb647898a76ee3d5ab6febfd._comment | 13 + ..._68392de15bae234de1332b8bc80cc2ff._comment | 26 + ...e_from_encrypted_special_remote__63__.mdwn | 14 + ..._d4dc451892e7a6e230bf32adb7f3f9fa._comment | 8 + ..._79340bf3c0691073a9808c5ac2da0a3d._comment | 14 + ..._6302fb6e5bb7cbddf2cfe74d98d32897._comment | 12 + ..._e3d95bc09c9fb21e8e9bbacc642aa60f._comment | 8 + ..._f2f0a1c2fb0c6323707b11e2b06aa2db._comment | 8 + ..._66fe80e634a8f13cce18fe68974ec67a._comment | 8 + doc/forum/how_to_disaster_recovery.mdwn | 6 + ..._be3cf3736166855012e10c2d251043e9._comment | 13 + ..._7fa36912ae21a66d3174fec35356d7ba._comment | 7 + ..._f2e570dc60a6f16e8f696d94e253775f._comment | 7 + ..._c8db90fd7af13b9605e152ea884b5241._comment | 15 + ..._31cce673114eb9733e0f1c732c8f08e6._comment | 12 + ..._52ad88121efa92d2c64bb2816884d66b._comment | 67 + ..._444579d0dac2ca14e6b1cbadcca5fcf3._comment | 24 + ..._9b9403a80c5b0a1a441dfb94feece37d._comment | 20 + ..._e8ec7b1fbbb81d61d06a7def61b06354._comment | 16 + ..._7e08eb18e965f47782a39d0426b75b93._comment | 9 + ..._78720819bea58f30146451dd953f10a5._comment | 7 + ..._b16c74c0add6d15b75163859a752d207._comment | 9 + ...ow_to_edit_the_git-annex_branch__63__.mdwn | 9 + ..._fa1936401d1abe1a28dc88968528e186._comment | 7 + ...force_read-only_in_enableremote__63__.mdwn | 3 + ..._a1206c8517f467d9a584ba89ef0e101a._comment | 23 + ...lly_running___96__git_add__96____63__.mdwn | 5 + ..._440dcd19ea2512f968858b780c2a2913._comment | 22 + ..._e9b70386774996a3d0446faaa3219120._comment | 8 + ..._3dbd76accad2df2fff14b55452c828ef._comment | 8 + ..._bfb4758fdb2a4afafd9c4d45de5c5c6b._comment | 28 + ...nks_but_keep_historical_file_contents.mdwn | 7 + ..._cba76311e146dabb8ffc789bf4c8b714._comment | 14 + ..._8d99c50fc1347367ccc0714e8d1af385._comment | 40 + ..._a7a9c55c2ad448179dff5d5b69976c7d._comment | 10 + ...omputer_and_a_centralized_backup_unit.mdwn | 9 + ..._a0551431a57ccab2463f2a6d43553337._comment | 15 + ..._e96e8cf6e08e3a21bfcefbc202e78fe2._comment | 8 + ..._2ad4c1a4bfe00c22444ab878c84a8830._comment | 47 + ..._44639388349a9ea5eabda9ebf79817b3._comment | 8 + ..._339123ab87b69b11d6e999ad6eaf6df5._comment | 8 + ...w_to_speed_up_metadata_view_genration.mdwn | 1 + ..._56044eef4cee8940a9bd5f66d2b1cd8f._comment | 14 + ...k_to_existing_direct_mode_git-annexes.mdwn | 5 + ..._7bd0edaf2352293678f0942aaa885d13._comment | 8 + doc/forum/howto_update_feed.mdwn | 14 + ..._bec356619f370a618f19a187d09d2e35._comment | 8 + ..._84dfb80ba3db8d41164eb97022becae3._comment | 8 + ..._20166db298c10074e062aecad59ffd71._comment | 20 + ..._f040e31b763fc9a7aa092442b4d6b8e8._comment | 20 + ...les___40__not_binary__41___-_compress.mdwn | 4 + ..._bd0925e056c275c52b59f947e23afe86._comment | 19 + ..._44eb5f14dbf3c5061afeb847958f27fe._comment | 9 + ..._4788a41425d4cc65e9f529dbcdb2bf73._comment | 8 + ..._4dbb0b18905d30ae6b187745859e75c2._comment | 12 + .../ignore_changes_made_by_a_remote.mdwn | 8 + ..._825676069d2e1554499b76fd8c306c30._comment | 10 + ..._dff49b72f7e072fddaf68584beb97f3c._comment | 10 + ...d_export_treeish_for_rsync_and_webdav.mdwn | 3 + ..._6a8ee189ff2fee0697b67a405f22c5a4._comment | 28 + ..._58___comments_in_file_with_feed_urls.mdwn | 5 + ..._370f5165fdda5c01a5335c864321a348._comment | 23 + ...ed_does_not_work_with_youtube_anymore.mdwn | 1 + ..._2fcbc85d7aa51dfdb2025a00c37fa8ac._comment | 8 + ..._58733a5065493dbac5cb8d12a029dace._comment | 14 + ..._aef7c172d485f8f6570ada5756446480._comment | 19 + ...es_a_second_time_prepending_a_2__95__.mdwn | 8 + ..._1623344457fbe10c464506e41fbac3d8._comment | 19 + ...ple___34__overlapping__34___playlists.mdwn | 1 + ..._ecd0764e7f15469217fd5e04a563f34c._comment | 8 + ..._b9885808ebe447c26283f910f4fc37c3._comment | 17 + ..._aa1077117a83ecffccb8d2095818fa02._comment | 10 + ..._0bf6d5b03032c0b9fd35c8410aea832c._comment | 16 + ...rerred_content_expression_not_working.mdwn | 31 + doc/forum/incompatible_versions__63__.mdwn | 1 + ..._629f28258746d413e452cbd42a1a43f4._comment | 8 + doc/forum/initremote_type__61__web.mdwn | 5 + ..._9ad92da9525cd89e515d1c5745a59c13._comment | 18 + ..._acc1dce80c3ed3b13fdfba55ab362581._comment | 10 + ..._b222de7b3d4397fe8bcafd20c661bc64._comment | 18 + ..._d128b2abef6cfdcac679aeff7a52d493._comment | 7 + ..._8de26c367ccb68b917b0b5f91eec8d1a._comment | 9 + ...e_assistant___40__android__41____63__.mdwn | 12 + ..._d9e0c9471c14178a1b3d07d3c6d76897._comment | 10 + ..._a73cbde4297d1be734c768d7b8f9d597._comment | 7 + ...retry_when_special_remotes_fail__63__.mdwn | 37 + ..._82820ce711b87b092a21e31fd381ffce._comment | 19 + ..._160e80583b647eae53aa120ca734e34a._comment | 9 + ..._6d81a41edf052e310e1f80cc6add3c09._comment | 7 + ...mmit_some_files_in_direct-mode___63__.mdwn | 5 + ..._804e43111ee97dff15e49e50b6c29d91._comment | 14 + ..._299ad6cd0225daa166d36af3726a9ef2._comment | 14 + doc/forum/is_windows_really_slow__63__.mdwn | 16 + ...ecame_readonly_after_really_long_fsck.mdwn | 16 + ..._6c094472d7f6f5f0257a445805200a82._comment | 8 + doc/forum/keys__44___URLs_and_URIs.mdwn | 1 + ..._d285566ca97e720a7bb497c0db8cc0c2._comment | 20 + doc/forum/known_and_local_annex_keys.mdwn | 14 + ..._3cb4828dc7116e4cf49e119f055ae9a3._comment | 20 + ..._68f20c881eafe986694bde10571cf1c0._comment | 10 + ..._e195a7091a06ce0427bb28aca9a17d04._comment | 8 + ..._d81f0bf7465832cb676fd89f5d53ec18._comment | 8 + ...__58___fail-on-unspecified_mode__63__.mdwn | 8 + ..._0bddf22d95cccf68a2852d7ef3a6dc19._comment | 23 + ...library__44___backup_and_music_player.mdwn | 11 + ..._a6e38a1678c433e5a5d96afae4ae4332._comment | 26 + doc/forum/linux_standalone_tarballs.mdwn | 1 + ..._5c3ceb845a45e50784f7098bfbf94df1._comment | 13 + doc/forum/local_pairing_with_2_mac.mdwn | 27 + ..._508585e72c81d197a9a1e193c25a702a._comment | 15 + ..._6ca4fed183340a2902d1d4d91284b772._comment | 8 + ..._7c2b3d0a8a69c7056508f8ec73ebefcd._comment | 13 + ..._07fa468aac1288e770487973052bccea._comment | 12 + ..._dc0494213d2b57b5b9a489b096a5b8d0._comment | 31 + ..._bcac18e137c00d4279774dec51963289._comment | 10 + ..._76b62eafda1ecbf88abe288cbe778e17._comment | 17 + ..._13fe788f2e9a823ad2e4844f114675a7._comment | 10 + ..._f81b454e9cfc14dcb33148798be55de3._comment | 16 + ..._f7a1ce9627ebfc854dfde2f6c924db80._comment | 8 + .../local_subtree_and_broken_symlinks.mdwn | 21 + ..._779cc4e49cb4da8aea7f5743e6257f21._comment | 10 + doc/forum/location_tracking_cleanup.mdwn | 24 + ..._7d6319e8c94dfe998af9cfcbf170efb2._comment | 10 + ..._e7395cb6e01f42da72adf71ea3ebcde4._comment | 15 + ..._c15428cec90e969284a5e690fb4b2fde._comment | 10 + .../locks_during_--batch_operations.mdwn | 3 + ..._190f6a52d9e49b2a092ad4c848e9d0b4._comment | 21 + ..._b19ed6657064c11bf54673f1b2ff4860._comment | 20 + ...long_paths_on_windows_10_-_workaround.mdwn | 9 + doc/forum/lost_in_walkthrough.mdwn | 78 + ..._51b703b961ca762f0359e1c169f1ee75._comment | 8 + ..._a9de0401a103bdd4401ba2d5983dc54a._comment | 11 + doc/forum/lsof_resource_use_problems.mdwn | 42 + ..._a5e5d410545fa7f93f08936ec6aeee42._comment | 10 + ..._7b0d4109c04c47e65420105f0de3b7a2._comment | 8 + doc/forum/luks_encrypted_disk_support.mdwn | 3 + ..._0ea476c778888f34196d9031f72b1844._comment | 10 + ..._0af149bfe1868dde0a132c5d835c50df._comment | 8 + ...sck__34___only_display__44___not_move.mdwn | 3 + ..._018cb2fd618a448088d9e91e4872333d._comment | 11 + ..._fdfd1d1ded3fb98a83f2593605250a87._comment | 22 + ..._369daddf95ab43f2c3d6b81c35810c19._comment | 8 + ...shot_backup_into_a___34__remote__34__.mdwn | 13 + ..._4974480f1c75152a05c2305d21ed1842._comment | 13 + ..._e18fba58bcd5259125e6e36194234136._comment | 10 + ...use_of_my_shiny_new_rsync.net_account.mdwn | 20 + ..._0ebe509b768d46081db2100f5b712ef7._comment | 10 + ..._ef63d893531d93d2eb09f48f8baff4dd._comment | 13 + ...n_pages_in_the_prebuilt_linux_tarball.mdwn | 1 + ..._a7bc2e84e6d7c0e2de5900685207af78._comment | 9 + ...ction_between_external_HDD_and_server.mdwn | 32 + ..._ba8ed548bf228a7d1c82b68283f99a5b._comment | 25 + doc/forum/managing_git-annex_with_java.mdwn | 11 + ..._fd12f0d0727b5bdddef1d7ef6236fe57._comment | 11 + doc/forum/managing_multiple_repositories.mdwn | 3 + ...pdate_of_.git__47__annex__47__objects.mdwn | 8 + ..._ea6ec91150c8962e2711631f2422bf3a._comment | 10 + ..._a7bbf304b26650a786e358bdc01e3069._comment | 33 + ..._a855096b683c4c4f84e72c797e065d59._comment | 12 + doc/forum/many_remotes.mdwn | 24 + doc/forum/mesh_configurations.mdwn | 181 + ..._dc99216ee2fc0bd3d43234915a0305ab._comment | 19 + ..._0712fa3d50ca6092bd7d98c945b5cc31._comment | 23 + ..._0d9ba4017343475a96975145c9db29c5._comment | 15 + ..._d228158cf00cd04dc9ef5602acebdaac._comment | 14 + ..._d5c8e99cadf976434460d6d0f410136e._comment | 282 + ..._a181fde7b7f6d0559331e1afa395ba0a._comment | 15 + ..._7cb33d2416289f744828d8d9d24e9ef6._comment | 117 + ..._6c9d499f64067ee9d3721dc763f3c425._comment | 123 + ..._a2b5da1ea55a222dd30f0e982d5ee807._comment | 197 + ..._ac3e1faaefaed222f725345ab4b5f01a._comment | 89 + ...messed_up_annex_by_using_git_checkout.mdwn | 40 + ..._04f33895f6451690372595c576be2811._comment | 11 + doc/forum/metadata_limits.mdwn | 10 + ..._a20bbe49f2f23d23131221ec79c8b973._comment | 28 + ..._4e8995ccd5fc2e5ee5d89a0780e5df9d._comment | 10 + ..._existing_git_repository_to_git-annex.mdwn | 66 + ..._4181bf34c71e2e8845e6e5fb55d53381._comment | 10 + ..._5f08da5e21c0b3b5a8d1e4408c0d6405._comment | 60 + ..._f483038c006cf7dcccf1014fa771744f._comment | 12 + ..._057f0079fbee3451ccda08026bab21d4._comment | 20 + .../migration_to_git-annex_and_rsync.mdwn | 33 + doc/forum/misctmp_filling_up.mdwn | 11 + ..._2739dec72fe0950dd070c8fab9fbd751._comment | 10 + ..._440081b5e2b9b5b19e8cd5db3649a976._comment | 10 + ..._b6ab64f02f204fc7e8741b9c04c5349d._comment | 11 + ...2__files__42___into_an_annex.__bummer.mdwn | 3 + ..._752db25abb647804a1cc12c5b247378a._comment | 10 + ..._db6f4959c35732f72e7a90bd9f4c665c._comment | 8 + ...sage_by_different_repos_on_same_drive.mdwn | 7 + ..._04718e5f87a7e0521a3165bc9fc951a8._comment | 12 + doc/forum/more_intelligent_copy_.mdwn | 15 + ..._526f6a007f44f389ef7c904024752541._comment | 8 + ..._7b3f5d2e9de4b13de821177db2f57bcd._comment | 15 + ...der_git-annex_and_graft_history__63__.mdwn | 15 + ..._345f9a32f5fc1ea21af9fe18f902d1b0._comment | 78 + ..._aab850db06cbd3c33067cff567d2699e._comment | 11 + ..._4cff971451dd7038ffe8f7f2fa3b28c9._comment | 8 + ..._73e37a27ae3ff6673f34d8b1a6bed4a0._comment | 26 + ..._d536cb5c2622d18802e6a32b03102f14._comment | 8 + .../moving_annex_across_filesystems.mdwn | 26 + ...inside_git_annex_assistant_repository.mdwn | 19 + ..._419b27cb1c71bce021ef9f2e471aa92e._comment | 10 + ..._dae4c7a42080dd89150159b2946839b1._comment | 8 + ..._9d9fa65559ba4bb0e4676289b5a65684._comment | 8 + ..._4e89b3590cc33b2565cd173ef7c85013._comment | 11 + .../multiple_repositories_single_backup.mdwn | 6 + ..._4a479fa78e0b366fcff1a27bc37081de._comment | 12 + ..._bbe19eec0969385a0d4682bf9e9de21a._comment | 11 + ..._1b18ea058e3eb34852055cffe51de176._comment | 8 + .../multiple_routes_to_same_repository.mdwn | 2 + ..._26c1734d41d5374f18fc688d862d6b8e._comment | 8 + ..._d119ab485fb2d5512c15372efdb2327d._comment | 8 + ...___40__for_tagging_photos__41____63__.mdwn | 11 + ..._96beb9ea895c80285748adb940b4f57d._comment | 9 + ..._985065c1feed9300631dac7a2701f669._comment | 8 + .../multiple_urls_for_the_same_UUID.mdwn | 26 + ..._de7410d8824a864c4d106c9f1afaec3f._comment | 8 + ..._309a86cf7e08448be64357a30d8b56ae._comment | 13 + ..._fa97a45fc1392935fd5e0714db999bc2._comment | 14 + ..._139178b1ba45b62eec0c89a660c0c81e._comment | 8 + ..._7237986a34228282c6b764309afc1d57._comment | 33 + ..._392819ba657569a1b997b58aa921a0ad._comment | 25 + ..._276cb5d94cbd10e9fc7d1cf4ac607273._comment | 27 + ..._c44144c677d54aaea6e900d0d7e000a3._comment | 8 + ..._38f3007635b0a7b7d30bad0af8a2d0a9._comment | 13 + ..._a_tree_that_contains_git_repos__63__.mdwn | 7 + ..._ac45ad341f026289ce56183b9ff463af._comment | 10 + ..._53e0ffe901a1a1c22361bfd7cf71affd._comment | 8 + ..._f7416c26daca543ad08c11e187e1589e._comment | 37 + ..._9c6386710387f7334ea44c1de7cc8729._comment | 13 + doc/forum/name_resolution_of_dne.mdwn | 31 + ..._7309e109d1f6eba8fc92659372d64b19._comment | 9 + ..._54ed13db673cff7177cd371143a295b4._comment | 9 + doc/forum/named_pipes_as_arguments.mdwn | 1 + ..._0fff7a842609af3531d151425a94df0a._comment | 16 + doc/forum/new_linux_arm_tarball_build.mdwn | 12 + ..._5f9735ec62478c99b8c814055206cff0._comment | 12 + ..._859c44046b00fe885f6878cfe0e46360._comment | 10 + ..._35ade68d62e95036344ad33db3279c21._comment | 8 + ..._36f48c30894b9b225b812ba5e5b2f504._comment | 17 + ..._67021b6d239690c9d18e8630aa2254ff._comment | 9 + ..._646a19555f982fb7ab302289400adc3d._comment | 16 + ..._442015225a14f60064aa3ba3cfbdf2ae._comment | 9 + ..._653448e38c3bb71a97023cb5d6b21af6._comment | 16 + ..._0a76ce3895ba9598bd79625268d95ef4._comment | 8 + ..._7211ddc626bae97d4140c723c3cf028f._comment | 8 + ..._fcbe3f7fa9d012b21c7a771553fa9142._comment | 8 + ..._2702cdbae4179a7a103d2a7098a8ed5e._comment | 34 + ..._e1d802fbcc9d699ece5267e80990255a._comment | 10 + ..._257b91ecbf5a6040a8e4c9a360c775ba._comment | 9 + ..._bd8cca86a63be7e330111618c1959a74._comment | 8 + ..._6814bdeca94328fe6c3f407795ff923a._comment | 10 + ..._6db99d998ca990494c8f2826ff1ca273._comment | 11 + ..._2802b24ccb24f1615c9d61904f916d05._comment | 12 + doc/forum/new_microfeatures.mdwn | 59 + ..._058bd517c6fffaf3446b1f5d5be63623._comment | 8 + ..._41ad904c68e89c85e1fc49c9e9106969._comment | 8 + ..._a1a9347b5bc517f2a89a8b292c3f8517._comment | 15 + ..._5a6786dc52382fff5cc42fdb05770196._comment | 18 + ..._3c627d275586ff499d928a8f8136babf._comment | 8 + ..._31ea08c008500560c0b96c6601bc6362._comment | 8 + ..._94045b9078b1fff877933b012d1b49e2._comment | 10 + .../nntp__47__usenet_special_remote.mdwn | 18 + ..._171a0b95b1f95cfd82073e88bdefaab9._comment | 10 + ..._48736ed17c98ffcfb13ec00b901b2dd6._comment | 13 + doc/forum/non-bare_repo_on_cloud_remote.mdwn | 6 + ..._da0c023af7c78f1ef1cfe1143a900a9f._comment | 12 + ..._71baea93f6caaf7b81a9ac00bee91e5e._comment | 67 + ...ast_forward_error_with_git_annex_sync.mdwn | 34 + ..._48d66e5314de5b6a26f78622a4e93ba6._comment | 9 + ..._f7101a8e84bbbfb2fbea6c65ca62fdb9._comment | 9 + ..._bbb3a5572fa2427d9bf859ae1ba68764._comment | 9 + .../noob_question._VPS_web_assistant.mdwn | 7 + ..._49f349192d64048753bedcf10ee22355._comment | 11 + ...not_finding_git-annex-shell_on_remote.mdwn | 21 + ..._84881cad02c251a2515cec50fc22bf16._comment | 16 + ..._f32412f8d3b84cd5cb3c4d5d6bb60f32._comment | 36 + ..._dfbf7f41dd4d17f2ce8b67daa9dcd11d._comment | 8 + ..._71ae60efcacdba5e11548923b2c85b95._comment | 10 + doc/forum/not_getting_file_contents.mdwn | 1 + ..._4a0f7f4de9c9bc4d13db033cb75d20af._comment | 10 + ..._dc7403e1b551552f9fd00da6a1453570._comment | 8 + ...t_and_notify-finish_for_the_assistant.mdwn | 5 + ..._d3da4ce5cfea6c0a3277e83e0181102d._comment | 11 + ..._01dfd865c469a5bc465f73347a65ce44._comment | 8 + doc/forum/offsite_repo.mdwn | 8 + ..._1f3ab9a39baa16e3e307b23fd1aabeb8._comment | 10 + ..._d4ecd0dc29597e3e0988e06ee9c4d245._comment | 8 + ..._4b233762116c52bd2a754f49152201b7._comment | 29 + ..._2e3dfd605df004330396040737a7c5ee._comment | 10 + ..._59a7718fde634c96dd781ed5fca1f61a._comment | 9 + ...ked_annex_files_that_go_against_large.mdwn | 69 + ..._9e4604f3c7ca9be1fe6a7020fee2fd96._comment | 8 + ..._9bd32b89d0521fd1bec94683dffb4ecd._comment | 13 + ..._3c3c4b9ee0a99f0638717922785de675._comment | 29 + ..._8d1ba01f4e25606b960023eab38ec483._comment | 10 + ..._789e8ada06063f6a1c6d6358180dc202._comment | 10 + .../one_annex_versus_many_annexes__63__.mdwn | 10 + doc/forum/one_or_many_annexes__63__.mdwn | 7 + ..._656d96011801d67a45b0b3bb3d70fa63._comment | 8 + ...keep_current_version_of_files_in_repo.mdwn | 23 + ..._dd03f7cd46a8c12a34e2b1cf78e7a057._comment | 8 + ..._b45120f0a11428b75c099ca3d85d9016._comment | 31 + doc/forum/optimising_lookupkey.mdwn | 13 + ..._e06db4754805c1e0ee298ecc676427d2._comment | 18 + ..._7dbfa3da6ae72a1f0669396664dd0c1a._comment | 11 + ..._2c895e4494cddab70ba761c6c48e7cf8._comment | 11 + doc/forum/original_filename_on_s3.mdwn | 5 + ..._870f3f01f95b5878d483ffedd2ae2698._comment | 7 + ..._2a0d5d77219ae2410090eb1811ee1fec._comment | 13 + ..._0aea0eef336dd648013a9cf7789fc445._comment | 10 + ..._createDirectory__58___already_exists.mdwn | 38 + ..._6fb34a361417e4cac08edc20fd2bc3e7._comment | 12 + ..._0a9372f3dba83b6cee3a33933bf2b006._comment | 14 + .../overmounting_repository_at_home.mdwn | 12 + ..._399ac5014c489698e1e45deec4db7311._comment | 10 + ..._d006d89ba204568cdee0731b6251ec1a._comment | 11 + ..._3734b50c37cbec675813cbeca7bf4ce9._comment | 8 + ...e_files_with_export_to_special_remote.mdwn | 10 + ..._8091fc1d63ad0a96e086c91a26e2af70._comment | 10 + doc/forum/partial_annex_repository.mdwn | 14 + ..._5e594914724a04e21087e1e4e57c2d30._comment | 14 + ..._e6a9584bacc3ec98c4757c82a195b414._comment | 15 + ...artial_synchronisation._android_phone.mdwn | 7 + ..._2a48569277945a9c334bdfc51f8fd01f._comment | 8 + ..._550ae91c8a1fe060368c4682d37514b6._comment | 8 + ...ce_with_parallel_git-annex_operations.mdwn | 1 + ..._5f3b51692797f56656f313e8455c1b5f._comment | 9 + ...nce_and_multiple_replication_problems.mdwn | 17 + ..._a2cdf1a4840f099f6bc941fd8de966c7._comment | 16 + ..._e65b360706c66ede6e0e841b2ebbbfbc._comment | 8 + ..._ad7cb4c510e2ab26959ea7cb40a43fef._comment | 14 + ..._23a6dc7ea569944ca55bd21851dd770d._comment | 14 + ..._8df6cc8b72e0e78c7380f7d471124498._comment | 12 + .../performance_for_FTP_site_mirroring.mdwn | 23 + ..._7648fced001ce1c34726e913e06273e9._comment | 32 + ..._fa2b7400c85356d4de6da8459a5c3b50._comment | 7 + ..._cb4d7b283f20b43283036f20ebc648ec._comment | 7 + ...it_on_ssd__44___annex_on_spindle_disk.mdwn | 12 + ..._b3f22f9be02bc4f2d5a121db3d753ff5._comment | 8 + ..._f94abce32ef818176b42a3cc860691ae._comment | 20 + ..._0c8e77fe248e00bd990d568623e5a5c9._comment | 10 + ..._4b7e8f9521d61900d9ad418e74808ffb._comment | 8 + ..._7abbbe7db3988a2d239d11b0a4c597e7._comment | 10 + ..._46bd45fdc25d9c583f4ebe3a9730ab9f._comment | 8 + ..._log_file_after_upgrade_to_5.20140517.mdwn | 13 + ..._807d7da99f732f2fa5f9d3cb1ba9f1a1._comment | 8 + ..._92a7509fc42ab2347d57f080081d14b5._comment | 8 + doc/forum/possible_gpg_issue.mdwn | 28 + ..._c5a33ff375cddd001e6cb7be8d0ce940._comment | 8 + ..._e5ea7fc9be496f71516a238522193744._comment | 8 + ..._d505b6e5050d2afa7c8543e21918193d._comment | 31 + ..._e52099d461d0df99040f664a3af23caf._comment | 17 + ..._a0c8afc2d8583d30073b62396b254a6e._comment | 17 + ..._2a0120d6b586594cfd9baabbd6605373._comment | 15 + ..._f095eadcd9f6947f64e6830acea8228e._comment | 11 + doc/forum/post-copy__47__sync_hook.mdwn | 14 + ..._c8322d4b9bbf5eac80b48c312a42fbcf._comment | 11 + ...to_use_git_annex_for_only_large_files.mdwn | 55 + ..._01db183b1f1d081066d88332e2b6166a._comment | 15 + ..._2b76809869e0289f78f137afbdcf36c8._comment | 8 + doc/forum/preferred_content.mdwn | 11 + ..._9c9e5f2ee5ae4d8459358ad16f879ef1._comment | 10 + .../preferred_content_globs_question.mdwn | 1 + ..._de4212f2e70fde49063b45b33498ade7._comment | 7 + ...ontent_settings_for_multiple_symlinks.mdwn | 7 + ..._70da012d96ab576151fe3e081ef905d1._comment | 10 + ..._ccea74d8b5a4de1f3cd1f6da6694ae0e._comment | 8 + ..._fab70c642d5aaf26de05270860281030._comment | 10 + ..._3cbd06de53b6a13e2741124a8e7b5b5b._comment | 10 + ..._963558ab261d8a6315402d371e8348f9._comment | 10 + ..._23279af1d49d22e880d078c59f58c492._comment | 7 + ..._73bf2c6dfa71cdb10b36c5cda2d2dc11._comment | 8 + .../problem_with_non-ascii_filenames.mdwn | 5 + ..._ad7e7d7ef4b25ef59f93246dab0e3048._comment | 9 + doc/forum/public-web-frontend.mdwn | 16 + ..._c73bd2dfe020c25eaad1c0707dd2db01._comment | 9 + ..._0026d7be6b17e50d86b3b54985882f80._comment | 14 + ..._only_annex_without_location_tracking.mdwn | 7 + ..._47262f048a87fd6b781090f880a9bf99._comment | 12 + ..._ec3ff6487c9e5c89c7e508d72518bd50._comment | 10 + doc/forum/pulling_from_encrypted_remote.mdwn | 12 + ..._e9d6a9a6e01d01edb41a11b0da11d74d._comment | 10 + ..._8d0db2ff65ce935c6e68044a3e0721a8._comment | 16 + doc/forum/pure_git-annex_only_workflow.mdwn | 46 + ..._683768c9826b0bf0f267e8734b9eb872._comment | 8 + ..._6b541ed834ef45606f3b98779a25a148._comment | 30 + ..._ca8ca35d6cd4a9f94568536736c12adc._comment | 10 + ..._00c82d320c7b4bb51078beba17e14dc8._comment | 8 + ..._b63568b327215ef8f646a39d760fdfc0._comment | 32 + ..._cb7c856d8141b2de3cc95874753f1ee5._comment | 12 + ..._a32f7efd18d174845099a4ed59e6feae._comment | 32 + ..._66dc9b65523a9912411db03c039ba848._comment | 15 + ..._9b7d89da52f7ebb7801f9ec8545c3aba._comment | 12 + ..._dc8a3f75533906ad3756fcc47f7e96bb._comment | 20 + ..._afe5035a6b35ed2c7e193fb69cc182e2._comment | 24 + ..._3660d45c5656f68924acbd23790024ee._comment | 12 + ..._33db51096f568c65b22b4be0b5538c0d._comment | 15 + ..._6e5b42fdb7801daadc0b3046cbc3d51e._comment | 12 + ..._ace319652f9c7546883b5152ddc82591._comment | 14 + doc/forum/purge_files_with_no_copies.mdwn | 3 + ..._12b578689eb8d5d38c06261ec65e2109._comment | 12 + doc/forum/pushing_to_android.mdwn | 1 + ..._1a7f6d21a3eef88d20d6f2bbad4c39d5._comment | 19 + ...out_assistant_and___47__archive__47__.mdwn | 22 + ..._97890e26072af9277144651e3fdcada0._comment | 10 + ..._542bf265e35a976ac76767762d67d617._comment | 104 + ..._bafe99159df2adcd5fecc0d67bbf05a5._comment | 8 + ..._e77fa2992d9302a49a05f514c81612ca._comment | 10 + .../race_condition_with_drop_-J__63__.mdwn | 7 + ..._0607c11410d99a6933e02c28b54c1f65._comment | 12 + doc/forum/read_directly_from_annex.mdwn | 1 + ..._d8c4a60a672e60f89d6e57e515ef86cd._comment | 20 + ...ld_location_log_from_encrypted_remote.mdwn | 35 + ..._f84f955fed7b96ae6208b6ff2ec650cd._comment | 12 + ..._c0b2ce3bc7cd55a0c77ddc31493068c2._comment | 10 + ..._06a73ca3dc73399ff000b642cca72de7._comment | 10 + ...ndirect_renames_on_direct_repo___63__.mdwn | 254 + ..._f4b0a14373c75cb752597c832e296bcc._comment | 17 + ..._8c86dfc99f0b9040402c9d746decda53._comment | 41 + ..._0246fff6c7c75f6be45bd257ec3872a5._comment | 75 + doc/forum/recover_deleted_files___63__.mdwn | 66 + ..._d7abb7c45c6ec2723a04f153ed215453._comment | 8 + ..._8ea2acaa30d3ee7e9f75310f4ec859b2._comment | 8 + ..._376de81c70799bf409be189a48234815._comment | 12 + ..._2e73ac530d65a01768a57058b7220a29._comment | 8 + .../recovering_from_repo_corruption.mdwn | 11 + ..._01fc85037e24fc70e5c5329898cf6781._comment | 15 + ..._3bd1c0bf25a0e892e711a60f53cd5298._comment | 8 + ..._679dde8ca0081fc6854d6d2e8a42abdb._comment | 8 + doc/forum/recovery_from_failed_merge.mdwn | 7 + ..._84e5b55d473d16bc9bdba5d88dc29bc3._comment | 10 + doc/forum/reflog_of_pruned_commits.mdwn | 27 + ..._edb31e8722edc58be7e2593556dc3ddf._comment | 8 + ..._cd0f057a730389509bd12dcaf21e3150._comment | 9 + ...annex_receives_from_more_than_one_src.mdwn | 12 + ..._c805561fa714ff3930742bb330b340c9._comment | 20 + ...annex__44___does_not_recognize_remote.mdwn | 8 + ..._c1962d757dd22f49e774afa13a9862ca._comment | 10 + ..._1f0f4a1dc89643cee81ff7199b55e747._comment | 8 + ...ion_for_macOS_called_git-annex-turtle.mdwn | 12 + ..._58f236c940ca20bfbae53324a530da0d._comment | 22 + ..._54ba7672150ee32df4d2d92390a960c1._comment | 21 + ..._107d0a3c9de6880d0ee164a651d2c20e._comment | 10 + ..._ddb6d671ddd28ba79efce74e41eab7e1._comment | 10 + ..._d496549c4f8bf3500e8ac5c2f2ae0d6e._comment | 12 + ..._8b3555fe33da55c01b199efd492951b0._comment | 37 + ...ity__47__completeness_of_XMPP_updates.mdwn | 7 + ..._e0f7aa48d54fc0564f41c3a569c723b7._comment | 12 + ..._4e74039a673c16c0163f2cfb406dc4c3._comment | 8 + ..._41ade4fe72804b2f06cd4dbf405c1746._comment | 8 + doc/forum/relying_on_git_for_numcopies.mdwn | 47 + ..._8ad3cccd7f66f6423341d71241ba89fc._comment | 36 + ..._be6acbc26008a9cb54e7b8f498f2c2a2._comment | 18 + ..._43d8e1513eb9947f8a503f094c03f307._comment | 8 + doc/forum/remembering_state.mdwn | 5 + ..._4a6ac5f50dfa5a17a0f0ccd0c2e7a466._comment | 8 + ..._1b02d3713a2986bc027d166589a11c3f._comment | 9 + ..._b48775ea1e90b061b084f61a4a9baca5._comment | 19 + ..._cbebcc6ed4bdae6815c0576475e96f6a._comment | 8 + doc/forum/remote-specific_meta-data.mdwn | 5 + ..._179ec4787d93ca4710c5bd448754d404._comment | 8 + ..._51347629414ac42a6709d00d38ebef9c._comment | 9 + ..._repo_is_invisible_due_to_+__47__.git.mdwn | 19 + ..._8333d1f8d773cd114aee8899d51b8fa1._comment | 12 + ..._174f467144d1977c6bc313f6461fc5c6._comment | 13 + ..._cea5b2a55fd82e4e42ad045d1bdda0a0._comment | 13 + ..._5bd942d53cf0a4978883eed1b61cfe91._comment | 25 + ..._6863faa0a64ff72abcf82435bfabf7b0._comment | 10 + ..._df69e9d176b14c687098d52dbe3cacd3._comment | 9 + ...ent_repositories_are_bare__33____63__.mdwn | 17 + ..._234241460f6c75a8376b303b8dd4e882._comment | 11 + ..._42dfc382d07af2a4f29c76016084f87c._comment | 12 + ..._32bf10cf837db16566dcc99d0b9aaf67._comment | 10 + ..._cd04cfaf97f200d5e581b83bb8d018b2._comment | 26 + ..._information_from_special_remote_file.mdwn | 8 + ..._a3c41731dbbcd53715c205e29ab99e4e._comment | 17 + ...ing_remote.log_information_completely.mdwn | 9 + ..._033f5b8f2b306c756b3f12e0a9bc6637._comment | 14 + ...aming_directories_not_supported__63__.mdwn | 45 + ..._94bb80e70fe619c6f1913b4a233e47ec._comment | 15 + ..._4bd6386dbd5cb907a9c85fb240265ee5._comment | 8 + .../repair_stuck_on_ls-tree_command.mdwn | 54 + ..._791c50f8a2284b704e34cacf15637341._comment | 14 + ..._1d951126a9633b206dffbc77bfc65f6a._comment | 12 + ..._1a844376915c6a40ad03c2b9b599367b._comment | 10 + ..._9555c925516ce3be83b4dd17d587100f._comment | 37 + ..._17327b90d09f8dd0bf7f359c16cf69dd._comment | 21 + ..._2ae0c755f5a0bf5c93afe5e081fcb915._comment | 19 + ..._875f9e36a94264a92eb097e9f4bda444._comment | 20 + ..._d5c29dc4ea49542f7053bf2e83e0f07f._comment | 17 + ..._061770159851c0f06a962937dff035b9._comment | 30 + ..._5d9e5fd148d5f9e918ad818e07009d69._comment | 30 + ..._726c9a887b7df1833d7aef3bdce50517._comment | 7 + ..._163cdd18380a13aaa13d68d516af1e30._comment | 7 + ...a_locked_file_without_unlocking_first.mdwn | 1 + ..._637598d027bc6194dad89d63aea511d4._comment | 8 + ..._b3ee1b086bf0add1e5f286635c02959a._comment | 10 + ..._ed4137413812467d67dd84aa5fde6263._comment | 16 + ..._8aa708a1bf76e452ef12c35999774791._comment | 8 + ...eplacing_a_union_mount_with_git-annex.mdwn | 18 + ..._b627a4028d98f1a137c4af85918f49c0._comment | 10 + ...repo_corruption_in_usb_external_drive.mdwn | 41 + ..._d9122bb0cc3551d92877c299a25b9c9e._comment | 10 + ..._fails_to_show_files_in_one_direction.mdwn | 7 + ..._412c319a1610b447fcf372584c2bb15c._comment | 49 + ..._c10d614039b82c5be289e8e34bc70f86._comment | 17 + ..._4fec14b132bea863b58aa07e03fc31cc._comment | 11 + ..._space_with_directory_special_remotes.mdwn | 2 + ..._cd17b624704d93b51931023f69573323._comment | 8 + ..._877ca1be23d1484a8a30cdaeb6630053._comment | 15 + ..._65910eeaf3c6fcfd03f22c2957293232._comment | 8 + doc/forum/retrieving_previous_versions.mdwn | 7 + ..._a4e83f688d4ec9177e7bf520f12ed26d._comment | 11 + ..._e9251f66154e49a77be661c4b4918e18._comment | 16 + ..._5b0ca6fbc000727bf78f5fc4ba34b91a._comment | 9 + doc/forum/root_assistant__63__.mdwn | 3 + ..._fccab2e36d393f420d0fa23958e6a9d2._comment | 15 + ...es_for___42____42____42____42____42__.mdwn | 13 + ..._7754e2cfb72b034effe8642c1b3e593e._comment | 11 + ..._04e1da4352ef9f9be90253ea726e5f24._comment | 12 + ..._84aceb9a9d3e5bd14c044861f47e3b9d._comment | 10 + ..._2cd17d01edeb230197865e6ea0884de0._comment | 8 + .../rsync_asking_for_an_unknown_password.mdwn | 60 + ..._f23d1c04a27625089eaef5b4bb7f8456._comment | 12 + ..._ce4b399fdb2f04e30bd8a951994f1c80._comment | 10 + ...annex_without_overwriting_links__63__.mdwn | 13 + ..._baa5351a0653838cfbf5f194f6252bcc._comment | 23 + ..._598cc6e65f57e941be1319255e66a55f._comment | 11 + ..._d765f93511e0ba446f54f3ad30e91e6f._comment | 30 + ..._62cf96d62228b52bf7dd52eab0b94f67._comment | 22 + ..._40e4e9fe7d301b5e75140136d0132860._comment | 26 + doc/forum/rsync_over_ssh__63__.mdwn | 2 + ..._ee21f32e90303e20339e0a568321bbbe._comment | 8 + ..._aa690da6ecfb2b30fc5080ad76dc77b1._comment | 8 + ...protocol_mismatch_due_to_encfs_folder.mdwn | 24 + doc/forum/rsync_regression_on_Windows.mdwn | 16 + ..._0e713f8949a3e5a949489fc89c0b9078._comment | 7 + ..._2e340c5a6473f165dc06cc35db38e5c0._comment | 8 + doc/forum/rsync_test_remote_fail.mdwn | 84 + ..._deffffd5112a60ad7837479da045d39f._comment | 8 + ..._824e45450cc01b30144ac5f8265b930e._comment | 8 + ..._0b910e98485832dd7f305decdc39fa7f._comment | 9 + ...rsyncing_.git__47__annex__47__objects.mdwn | 24 + ..._25eb9f7be5730337b9efd96dce9efd2e._comment | 10 + ..._d7ceae666c8a1951021d3c6e6ac39a11._comment | 8 + ...andwidth_limitations_and_next_release.mdwn | 7 + ..._6fba752ada4ca86c96a026a4d09ef16b._comment | 11 + doc/forum/s3_server_side_encryption.mdwn | 9 + ..._68345d01b016abf96c226d2bfa17c641._comment | 16 + ..._b2ccef6dc00d58e103ac0fda48ee94d3._comment | 10 + ..._3eb57b98e4136b8550ea5d19393fe967._comment | 12 + ..._71d6c2356af8974cb848c3574cf3eb6d._comment | 8 + doc/forum/s3_vs_ssh_Performance_Problems.mdwn | 8 + ..._65f064f09d7850abecab97007b0d30f0._comment | 12 + ..._baaf2384d9196077268e9ca9bbe3b871._comment | 8 + ..._dc44be42070c073d150c476406e9b425._comment | 10 + ..._f9c3ef3b1b44bfb29125acb6ec621f38._comment | 10 + .../safely_dropping_git-annex_history.mdwn | 20 + ..._a4b93a3fbc98d9b86e942f95e0039862._comment | 8 + ..._383882fafd32f25ed22b5eb2fb3691b9._comment | 18 + ..._47794a2abf29bf4ea2763ff89d872ab4._comment | 8 + ..._b7b920862fc82eaa5d7deae34b4aebc4._comment | 12 + ..._979bbccf31dbee1707d403957bde3493._comment | 16 + ..._4fd76d10a93fe01588fce7a621f9254d._comment | 12 + ..._10ecf3220ffcbbe94ba09da225458f18._comment | 12 + ..._e3beb8acb075faaeef6c052aecbf0a41._comment | 50 + ..._61a5fe2e7e47c60a8b237ea69404a37f._comment | 8 + ..._426d02e2f2a2ae4ec7eae02dfe4519b3._comment | 9 + ..._410a7296c2cee16d3d5bb618a5a41c1d._comment | 10 + ..._42cf492fc98a9eba8176387749ef12e0._comment | 8 + ..._c0327ada073d8b69535f71b4dc6aa57e._comment | 21 + ..._f83d6090aea2b7d5d54c876df940cbad._comment | 40 + doc/forum/scalability_with_lots_of_files.mdwn | 43 + ..._b9bb0a71d81b8cbc2a751bb7bab84812._comment | 18 + ...ule_repository___91__expression__93__.mdwn | 1 + ..._b123b657a92897017973927e3e47673b._comment | 12 + ...__files_for_files_not_in_local_remote.mdwn | 8 + ..._76453756be78f06ef3a3d7d1bf011b9f._comment | 11 + ...ty_risk_presented_by_remote.log__63__.mdwn | 5 + ..._9715488033f2a8939a32ed12259377ba._comment | 9 + ..._40383346237de0bae4760dc85fefc348._comment | 15 + ..._b1ddf06b34f750e9bbd88e6d5348e765._comment | 29 + ..._428bbced6406a35eb093a27e35831f38._comment | 7 + ..._df1eab397c8e08698064391438bbff1b._comment | 9 + ..._6a3911dc346d506d4350b5aec7619462._comment | 21 + ...o_build_fine_on_haskell_platform_2011.mdwn | 1 + ..._multiple_repositories_on_one_machine.mdwn | 28 + ..._1606849eb13b6069394455297395dc30._comment | 15 + ..._f60c43ec9d493db03e2a5a5595501e55._comment | 11 + ..._b041da6694d9d9d21a67f7bbdda0f62e._comment | 20 + doc/forum/shared_cipher_tries_to_use_gpg.mdwn | 10 + ..._760961eaaa7d5c254dd71c5792437c9e._comment | 12 + ..._f3260aea3a5bb9b95a9bdf1d0dfce090._comment | 8 + ...efspec_notation_for_git_annex_unused_.mdwn | 22 + ..._0aeb5702e74fcf158f1e9aca16ca9e6b._comment | 19 + doc/forum/slow_ikiwiki_server__63__.mdwn | 1 + ..._f734812a94c0f6c7612257f82e0c4b36._comment | 14 + ..._1eb8334b06b784211eb93405dbf93a77._comment | 8 + ..._d73e4ff5f273160a3df5590ebafd440c._comment | 11 + doc/forum/slow_s3_transfer.mdwn | 20 + ..._a6e3f8579447d85c22f3bb99c4e6cf0d._comment | 11 + ..._f66a8d597de5065049a9a9b245166540._comment | 15 + ...directory__34___special_remote_on_fat.mdwn | 26 + ..._a6f0ae755b9e24fd0de5868b57c6a497._comment | 13 + ..._9fe4a596aea6bd1a898b4c235126dce2._comment | 14 + ..._02eae41ba9ad2f2fb15cbd20069bf1da._comment | 11 + .../some_symlinks_left_in_direct_mode.mdwn | 5 + ..._fd8d8107861453f0aa6b2c390e369307._comment | 17 + ..._63f61caf28e834d48e12467bf09b2e3d._comment | 9 + ..._really_good_happened_with_3.20130124.mdwn | 5 + ..._1712bddd2f483a353f6313aa626445f1._comment | 8 + .../sparse_git_checkouts_with_annex.mdwn | 31 + ..._c7dc199c5740a0e7ba606dfb5e3e579a._comment | 12 + ..._e357db3ccc4079f07a291843975535eb._comment | 8 + ..._fcfafca994194d57dccf5319c7c9e646._comment | 8 + ..._04dc14880f31eee2b6d767d4d4258c5a._comment | 20 + doc/forum/special_remote_for_IMAP.mdwn | 44 + ..._7c7d4b57a1b6508fff1a6b0508c861f8._comment | 10 + ..._9c46fe8a857aa7a5ce797288144386bd._comment | 8 + ..._27e3b644df6942ce4c103236d0d5cb1b._comment | 23 + ..._0f8e01c453afb02aebf44b3fb2c9a7c1._comment | 8 + doc/forum/special_remote_for_iPods.mdwn | 5 + ..._37cc3dc740341cc663074fd3bfb85947._comment | 8 + ...lies_a_lossless_operation_in__47__out.mdwn | 9 + ..._195f52aaaa36ce20955f2eb40af3c79a._comment | 11 + ...sistant_startup_on_large_repositories.mdwn | 1 + ..._5ba637a0f6d01ba24fe25e6265134e0a._comment | 10 + ..._d65746697977f8971a4b59f5b413f926._comment | 13 + ..._be6c4fe5a0c745688438b716973791cc._comment | 12 + ..._a07472338a08c068a9b88b2176fc2bee._comment | 9 + ...__read__58___Connection_reset_by_peer.mdwn | 28 + ..._87b9540e37abb16c0ec7605f5ab204a5._comment | 8 + ..._bd3383c142bf93d9cd496cb668d7782c._comment | 12 + ..._9b1911ae6468d09dae74ab1a60d2757b._comment | 12 + doc/forum/ssh_key_setup_woes_in_Android.mdwn | 15 + ..._f16fbff27a449409699f3dbcf9590622._comment | 10 + doc/forum/ssh_password.mdwn | 3 + ..._a3e5a41e1d4da683d577976b134b11ee._comment | 10 + ..._fa261676a99d49d4b237b0d43048d76d._comment | 10 + ...itory__34___option_during_setup__63__.mdwn | 3 + ..._7244794579a191a677190c60758f32e7._comment | 8 + ..._277cf12907bd7c5930eb4f137b115e29._comment | 8 + doc/forum/ssh_vs_cifs__47__webdav.mdwn | 7 + doc/forum/ssl_errors_with_special_remote.mdwn | 7 + ..._a3d68cc1af06c54d29818644a9943cc4._comment | 9 + ..._6ef51ec4daa0c4d3abae22dafe6f068b._comment | 9 + ..._d0e4921bd6d71c7b43418722008d2c22._comment | 10 + ...dalone_tarballs_for_specific_versions.mdwn | 2 + ..._3c41c48d40ae44129a80f2d2bef284ae._comment | 12 + ..._543bb94e6a6c1313a09328402a191995._comment | 8 + ..._b187721c1480debba3d391c965d17800._comment | 9 + ..._121ae7a2803975e3bdcb5f9df0c4af3f._comment | 12 + ..._5183f3d940ef116b07f88bac25cb97a8._comment | 8 + ..._b822c789e2736caa2c7bce27e619c463._comment | 8 + ..._33af5c294ccdff942f078ff366470342._comment | 8 + ..._a8d92991f13993d0beb72c7dd51e23a6._comment | 28 + ..._28f604900388b087eed76e7c03b8945b._comment | 28 + ..._00592c4cdcd7c3f63d5eacd16abdc88b._comment | 13 + ..._945d08e40897ee964be5e6945ad9914a._comment | 11 + ..._59066dc14b5b45a3a15ee65cf6746bab._comment | 10 + ..._c4fcf4abe2550b677ee312c597556e66._comment | 9 + ..._fe5049bba125e20d766595cb30bf7ce2._comment | 10 + ..._23bf8b9ab7e7850d801dcaec60ccf22d._comment | 14 + ..._3dd596dc5f09564932dacd90fbb5be2b._comment | 8 + ..._dd482d39c746dd6845382e9503731b6f._comment | 20 + ..._7fb08748b8610ad33f800c1bd173b120._comment | 8 + ..._211e260fbc60dc83a8986fac4e9700b7._comment | 16 + ..._9002aa86c44c19f28ab74724daad5422._comment | 11 + ..._ea42a5cb83e9cc8e24673bb805cfd4e1._comment | 8 + ..._c6d2c756b51247c784786e3a02d3840a._comment | 8 + ..._f7de3190366e81fc898393c1ed168c56._comment | 7 + ..._6ac3fa868ab0dfa6cc26928098abc334._comment | 11 + ..._74875c799f20d051739227e2b79de18f._comment | 8 + ..._febd89250e37af938c723e4a204c5cef._comment | 8 + .../start_assistant_from_command_line.mdwn | 11 + ..._f8dfce1fca9f1212ccaf84e431db71a9._comment | 12 + ..._e769c5d09afbff85961363ddc5eb4019._comment | 10 + doc/forum/status_of_v7.mdwn | 3 + ..._88d3bcb329bce6dfe33707f39b843b39._comment | 25 + ...nnex_in_different_place_on_hard_drive.mdwn | 2 + ..._a95add69028ad71f3c66b544c1a28db6._comment | 16 + .../support_for_git_sparse_checkout.mdwn | 1 + doc/forum/switching_backends.mdwn | 12 + ..._ecf4109c1148dafde3519243ae3c5a03._comment | 10 + ..._21f465a18f40b95dafd307fce0de659a._comment | 8 + ..._4c13d22c1695195e6b101bd20ef6bb42._comment | 35 + ..._e1d4a48baac23fd3f67b20eba4eee8af._comment | 8 + ...irect_mode_while_assistant_is_running.mdwn | 2 + ..._7832243a36613c48d0077b438dbf8b4a._comment | 10 + ...k_in_textfile__44___100_bytes_of_size.mdwn | 7 + ..._ee6ec862a391c54c8e1254891d4d477e._comment | 8 + ..._0748b20c8a0d7d4704003c0ecfc27716._comment | 8 + ...___fatal_is_outside_repository_errors.mdwn | 50 + ..._d4a649874ee9c9e6a4c0252700607713._comment | 12 + ..._668dae37dd46047b46c9e1c23f7bcec4._comment | 11 + ..._09c62e4abf4ccc0d2e030ef5e1bcdf71._comment | 12 + ..._8f694afa77f5a835c826d29d46d44615._comment | 30 + ..._a7f476aeacf88679f25badc78fad886a._comment | 57 + ..._e96503f38cba755b2e6bd89b1ffab6ff._comment | 28 + ..._7443fe5f7384431914c714c2b462cf5c._comment | 24 + ..._63225cc9557886ae12b3450f68812815._comment | 7 + ..._baefe35266021184ee78440226fe2a8d._comment | 25 + ..._a9ed50cd4a1f436822ae97bfcd1ced48._comment | 8 + ...ent_sometimes_iterates_over_all_files.mdwn | 35 + ..._a276f0f6aa87a491c2fba3d58217b75a._comment | 12 + ..._1f8ae9a0099d456e25f387798f99eec9._comment | 9 + ...sync_between_indirect_and_direct_mode.mdwn | 6 + ..._7efc0d79196675582571c05fdd133b53._comment | 8 + ..._8ac84dbaf7a4d503497487cbdb1749d8._comment | 8 + ..._9acb237711669ec6046a8d07f9ed3b2c._comment | 8 + ...ntent_through_repo_that_wants_nothing.mdwn | 7 + ..._6c014bc88fc8a685ef79a044c8938c7d._comment | 8 + ..._ef89154903395025bb0a0408e1c23bdf._comment | 13 + ..._e05a3e3d991617bb2b323b5572cd771e._comment | 17 + ...ts_after_first_non-successfull_remote.mdwn | 27 + ..._dbca6ea763702a82ae7563722cdc7fab._comment | 11 + ...nc_remote_repo_on_local_sync_upstream.mdwn | 21 + ..._db650b4b5764e33219cb28eba2987ea5._comment | 8 + .../sync_stages_deletions_on_remote.mdwn | 72 + ..._2b639066095e450c2d9be3b2775d24b3._comment | 8 + ..._da5775526a2a476b6ead1cd1a735b8bd._comment | 8 + ..._9e07593228915936fadcf90373be9f4e._comment | 14 + ..._e5a3dc34c6229ec40bc999c3cab28041._comment | 8 + ..._f3350d336c6c66c3aacc7caade2ef12c._comment | 31 + doc/forum/syncing_home_directories.mdwn | 7 + ..._220a6e0ffe0ea610921a63c0a6e3beab._comment | 16 + .../syncing_music_to_my_android_device.mdwn | 17 + ..._81653a23424ac04675651fb7632c57ae._comment | 11 + ..._e49c9e5da5c5d1db228b9b753bed53ff._comment | 18 + .../syncing_non-git_trees_with_git-annex.mdwn | 46 + ..._7f9593bdfd95e4a8814e6cc5c44619e6._comment | 24 + ..._49f15478781a0ad5e46e75319070335c._comment | 16 + ..._6d8f399f0549eddd1d1f5c9c9a10c654._comment | 13 + ..._won__39__t_prompt_with_pinentry-gtk2.mdwn | 3 + ..._daf41d0e59d384dfe5c86a53600ea3f7._comment | 8 + doc/forum/taskwarrior.mdwn | 11 + ..._1c3a29e7d292cb602d9d349f8009b51e._comment | 10 + ..._4b3d70501763f6d36c927ae37bbd33c2._comment | 8 + doc/forum/telehash_syncing.mdwn | 10 + ...ll_us_how_you__39__re_using_git-annex.mdwn | 6 + ..._4884803ddee7f642a3ac995a19967a6a._comment | 17 + ..._61f5054918e7b36c191454365bc7f3b7._comment | 10 + ..._db07e8703be606c998c831e91d300d69._comment | 10 + ..._a58595969cdd42ed20210e9615b42e42._comment | 22 + ..._4de0a5431431e80f4a81d87e649d4598._comment | 8 + doc/forum/temporary_AWS_credentials.mdwn | 2 + ..._655825b3aa981e97969e226c98034c4b._comment | 7 + ..._d4b66fd587c3a0ce74436ec09b398f10._comment | 9 + ...est_whether_a_file_is_already_annexed.mdwn | 1 + ..._55bcb41abae2b70c046e3da1c4d8c761._comment | 8 + ..._e2531c7e77bbc75f24af7ce5f789826e._comment | 22 + ..._21f51c99b1aac8b3292f60bd83493e94._comment | 15 + ..._2c61629777f47ce3e697298d5736f997._comment | 22 + doc/forum/the___39__here__39___remote.mdwn | 1 + ..._8100ed97a671afea207efe3f70230707._comment | 12 + doc/forum/time_profiling_the_assistant.mdwn | 19 + ..._0227d9c0db24c6abadfe091f92848ec6._comment | 16 + ...95__remotes__47__hook_with_tahoe-lafs.mdwn | 22 + ..._76bb33ce45ce6a91b86454147463193b._comment | 10 + ..._4d9b9d47d01d606a475678f630797bf9._comment | 10 + ..._8a812b11fcc2dc3b6fcf01cdbbb8459d._comment | 12 + ..._fc98c819bc5eb4d7c9e74d87fb4f6f3b._comment | 39 + ..._c459fb479fe7b13eaea2377cfc1923a6._comment | 8 + ..._2e9da5a919bbbc27b32de3b243867d4f._comment | 23 + ..._d636c868524b2055ee85832527437f90._comment | 20 + ..._39dc449cc60a787c3bfbfaaac6f9be0c._comment | 10 + ..._2592749c2f02b3e151896e31acba359b._comment | 8 + .../transfer_bare_repo_setup_problem.mdwn | 111 + ..._3b6c15b81c5df09587bc75c5e358b39c._comment | 48 + ..._c011e8fcda61b6ee0067020abbddf61a._comment | 18 + ..._with_multiple_files_as_a_single_item.mdwn | 7 + ..._89d2819893ae954041d65a5758993be8._comment | 11 + ..._6889f4695bca77c18efe0000fc491b57._comment | 11 + ..._61924cf10643a6d2d011899d95b4ae56._comment | 12 + ...tes_syncing_to_gcrypt_based_ssh_repo_.mdwn | 7 + ..._4ad9a6a7cf5678ac0bc6d46a54f64cd3._comment | 10 + ..._82dc18ed14879936d04133f248879fb9._comment | 10 + ...ries__58___fatal__58___not_a_git_repo.mdwn | 32 + ..._0a755a4a281c3bd130722093c8ddd080._comment | 10 + ...ssistant_sync_with_ssh_special_remote.mdwn | 32 + ..._d42def5dfc1cf814fdb07f7cf808bb12._comment | 24 + doc/forum/two_lines_back_to_remote__63__.mdwn | 10 + ..._064d786c5550e4470440717994e62051._comment | 8 + ..._b1debe6f63e811c79ad97b9e38dd2935._comment | 7 + ..._70ee40b99e06c4f64d3e2e4433c8b4ba._comment | 12 + doc/forum/ui.mdwn | 11 + ..._f3e3446b05d6b573e29e6cad300fb635._comment | 10 + ..._b493ee97eb2378e72c12f3d137109580._comment | 15 + ..._remotes_when_cloning_a_gcrypt_remote.mdwn | 28 + ..._cbcc4be05aa6d8f030d5ab0dc46858f4._comment | 11 + ..._3623a37d918d08e8681276206137f5af._comment | 19 + ...unable_to_clone_annex_repo_in_windows.mdwn | 29 + ..._588af0e0b655966c2d344f3f4b4d2e5f._comment | 18 + ..._e4fcc8329b2deb058b7368ce1c226a3e._comment | 11 + ..._20aa8de2513fdb6b19a4b24f20983f0a._comment | 12 + ...in_.git__47__annex__47__objects__63__.mdwn | 47 + ..._4aaf93801119b36a01e452c7bb0fc7e9._comment | 18 + doc/forum/unannex_alternatives.mdwn | 9 + ..._dcd4cd41280b41512bbdffafaf307993._comment | 46 + ..._58a72a9fe0f58c7af0b4d7927a2dd21d._comment | 36 + ..._b1687fc8f9e7744327bbeb6f0635d1cd._comment | 16 + .../unknown_response_from_git_cat-file.mdwn | 8 + ..._f26ba569e715fe69b6de3093930362ee._comment | 8 + ..._bba450e83609225c161b4fec1e006f8a._comment | 8 + ..._8e0458e86764242e9e35940b4db302b7._comment | 32 + ..._275fcf1e6643cb247f8ed5afc4c69e56._comment | 15 + .../unlock__47__lock_always_gets_me.mdwn | 11 + ..._dee73a7ea3e1a5154601adb59782831f._comment | 12 + ..._f89b4349dde840c355a3bc28908decdf._comment | 8 + ..._acbab7b75726d34dccb5c9dab7b3e728._comment | 8 + doc/forum/unrelated_repositories_sync.mdwn | 15 + ..._c899b7b05a96d14e25c2efadff3b4e52._comment | 10 + doc/forum/unsynced_folder.mdwn | 3 + ..._7d7a262f067c7b02d76e82637223934c._comment | 22 + doc/forum/untitled.mdwn | 5 + ..._0176d1d50bd62b113ff690346ba4161b._comment | 15 + doc/forum/update_via_cabal_fails.mdwn | 35 + ..._e1235dc2acd3bac3dd51b7614dabbb88._comment | 8 + ...ting_the___34__number_of_copies__34__.mdwn | 14 + ..._327bdb0d9c190c60c7147b3acf07af09._comment | 10 + ..._7e11c839637e0894332e413cde02cee9._comment | 8 + ..._8b7a70fb3bb41e4eda412302834730bb._comment | 8 + ...ng_an_archive_on_a_new_external_drive.mdwn | 13 + ..._27b5283c65c402f330263426e4ca6ac1._comment | 10 + ..._b3a6b5ff0aaddd78903fc7bc7fbd6ee2._comment | 10 + ..._aab934c0e37771d7f834d2567a9e76a1._comment | 13 + ..._42beace277e009ddff449cb220775d44._comment | 13 + ...8___what_are_those_arrow_things__63__.mdwn | 29 + ..._bf34c169c725f9504e0f2114ba53be4b._comment | 10 + ..._364ce8b369fd0ba7ddaec3127840ff39._comment | 16 + ...tifier_of_objets___40__doi_like__41__.mdwn | 20 + ..._955f3aac12c1ddb41267c5a23ccb79e3._comment | 12 + ..._0aff36755f49afddd5482a602a1ccd2b._comment | 10 + ...question__58___developer_repo_with_s3.mdwn | 6 + ..._3e48d0a6c74e1bd67b1128d6b52f5fc4._comment | 24 + ..._751d3f5855729d493ee2042b19117a70._comment | 20 + ..._69ec3fedc166d68c10103b97c231e3d4._comment | 9 + ..._4afea3a65b6b5c57a4dac5cdbbf89432._comment | 8 + ..._743d7435c4e94efb293f4d6b1e83483d._comment | 9 + doc/forum/use_existing_ssh_keys__63__.mdwn | 5 + ..._c420c53f022bbd1b28494bc44d076feb._comment | 8 + ..._e4cae848e5701852073ced307832872b._comment | 12 + ..._a97c20b6df74c49e5f57c7caf962f1e2._comment | 10 + ..._8977bb8ee662c30dfcecae73cede9dfa._comment | 12 + doc/forum/using_--quiet_with_sync.mdwn | 9 + ..._69c2034761a8b92b001b142e49f0449e._comment | 9 + doc/forum/using_git-annex_with_lightroom.mdwn | 6 + ..._ec977efd277f0644767a4fc7064e4baf._comment | 8 + ..._4dc4f1ea91c72418843a682fab1854d2._comment | 28 + ...2_directories___40__like_unison__41__.mdwn | 7 + ..._5c3ee8a8aaa6d0918c0cc9683ce177ae._comment | 10 + ..._648946353c6d90c57351cce4010f1301._comment | 10 + ....net_as_backup_and_glacier_as_archive.mdwn | 13 + doc/forum/uuid_mismatch.mdwn | 17 + ..._ed29dcf70b916bdd094015c1c9616550._comment | 32 + ..._de4beb1eb76ae7084387e8efc28e55d3._comment | 15 + ..._a681a4847acbe890c4e486288b3c81d3._comment | 19 + doc/forum/v5_to_v6_upgrade_strategy.mdwn | 21 + ..._1505166c806ab3d1a3148a245faa713a._comment | 15 + ..._ef2648a58037b867e2d745eb4b3a15a2._comment | 17 + ..._46fb3f5b0a7fa13b6f16ccb9832dac7e._comment | 22 + ...inning_seems_to_be_not_working_for_me.mdwn | 42 + ..._751e603141513faaa43abc38f3329a3e._comment | 8 + ...illa_git_repo_as_special_remote__63__.mdwn | 27 + ..._67e186265ae21f2cd8451750152f2a6d._comment | 13 + ..._6314256da98966f4c7d02aa0d6bf94ff._comment | 17 + doc/forum/version_3_upgrade.mdwn | 9 + ..._05fc9c9cad26c520bebb98c852c71e35._comment | 13 + .../version_5_repo_with_version_6_repo.mdwn | 3 + ..._95037082d15758d7b2c23ad041d7f6f0._comment | 12 + doc/forum/very_slow_on_exfat_drives.mdwn | 7 + ..._5f67c870fc7e43ae75d8e1f8ced975c2._comment | 9 + ..._65460ed123404478ae59fed1b5cff627._comment | 18 + ..._77cd7b20abd0cd1eadee0ebeb186b3cf._comment | 18 + ..._1d6588477082dd6de6eaad02fdc53463._comment | 8 + ..._6487a9a170f7caa7c9db06ac3bee8c0e._comment | 11 + ..._1d7c3ff1eaeffe03fe7e3e25af822e4e._comment | 19 + ..._0f16c72ed7bcba01398b36cb8b3cee08._comment | 14 + ..._769b971263b9124ec08079336d03869d._comment | 8 + ..._b6ee8c6384c73b44ae9ccc0ba32c3135._comment | 8 + ..._b1dbbf57a46c79e8e32885c2ee8f45d2._comment | 12 + ..._ec5d339021f2a26942248962ea818a80._comment | 11 + ..._a6c5e8dc86ed6b4b5ff45f66f5bad50a._comment | 12 + ..._3e66ef8493d2839cb26418788c510463._comment | 8 + ..._ae7380ff84e4200985c22deb647853e3._comment | 18 + ..._5b69d3cb7d3a51ce8a9cbdb608be676c._comment | 8 + doc/forum/view_from_numeric_values.mdwn | 9 + ..._f3c440f3f0104002a0020ba96ddcf87b._comment | 11 + ..._2414e1a8cfd154c339d8fc0e4a630ae9._comment | 12 + ..._7879a11cc9767cdaac14f9993182dc25._comment | 13 + ..._517c7659654a6fc608eb3332053df8a4._comment | 28 + .../view_including_files_with_no_tags.mdwn | 5 + ..._b0aafc023fbec33af268576c4c199af3._comment | 24 + ..._5ae9d5308371bdb1f94342c9f9b01aff._comment | 8 + ..._40__branches__41___never_get_deleted.mdwn | 16 + ..._ff53fa0b5f0c4a6554a37e3309e26925._comment | 12 + ..._1d4a3f4e83b288262e291262a6636602._comment | 21 + ..._4e96e5325fd12e48f190fe551a6ac07e._comment | 12 + ..._a4764b5bfb08ebe90430ea14fcb6e8e0._comment | 10 + ..._02e08dffb01246010b390aeef8f32234._comment | 8 + doc/forum/vlc_and_git-annex.mdwn | 11 + ..._9c9ab8ce463cf74418aa2f385955f165._comment | 10 + ..._037f94c1deeac873dbdb36cd4c927e45._comment | 8 + ...ough_report_setting_up_tor_p2p_remote.mdwn | 91 + ...existent_ref__44___unable_to_checkout.mdwn | 69 + ..._c0d9758be80d1a349ffe82c80075bebd._comment | 12 + ..._c28dae2eb0ab825ee6d43735e04a18a3._comment | 22 + doc/forum/web-browser_for_the_repository.mdwn | 10 + ..._1f8e7e54e9f377417cd672d66ae9bd9d._comment | 9 + ..._551d5bb2d24212de65720d796365177f._comment | 9 + ..._d410df4b7160f17e3846674c3e0e9368._comment | 9 + ..._d06217403bf53a713b845bbc9ca8b962._comment | 7 + ...p__58___disabling_a_paired_repository.mdwn | 12 + ..._9dd316fedf55afecbc77f3b99e66d837._comment | 18 + ..._28cf58629b9774426c084d80964151d7._comment | 19 + ..._799d66b116e8ddf42e624bb4a082337c._comment | 8 + ...webapp___47___assistant_without_watch.mdwn | 9 + ..._1bcd99aa81f937ded683e19a69d33dd9._comment | 10 + ..._9f5b3f5bf7fedcd5baec519d97d3aa8c._comment | 16 + doc/forum/webapp_and_manual_mode.mdwn | 7 + ..._5b5df5ffeb6ee15779972f13fdc11729._comment | 10 + ..._a1f06b50d1317c78a301b47eb05d2617._comment | 19 + ..._f0739bf4304a91a5d4ec33ac2421c966._comment | 9 + doc/forum/webapp_does_not_start.mdwn | 72 + ..._dd27d30ce305562a1552f46c87b1cd27._comment | 12 + ..._ef37f40288a1181ca619ae13b0f7a994._comment | 8 + ..._6e625dba9f7fa36bf9c7e9d77fbadeff._comment | 9 + .../webapp_listen_port_with_autostart.mdwn | 3 + ..._65dbcf3d8f6c16568f5a326242eab9c5._comment | 20 + ..._39664f833dedc1a4fe083eec9bc4a7cd._comment | 75 + doc/forum/weird_view_file_naming.mdwn | 13 + ..._24a44f94194231bb8efe9b20ee311d4c._comment | 12 + ..._2ff3002e45a7443f0502243b3690df9d._comment | 11 + ..._git-annex_when_using_it_like_dropbox.mdwn | 6 + ..._b76e6d3c4d530fd6735460aa5ab03ad5._comment | 8 + .../what_happens_to_deleted_files__63__.mdwn | 24 + ..._a476174646ad3adfbbe0cafdd7d42d08._comment | 10 + ...ync_--content_using_to_send_files_out.mdwn | 31 + ..._86428fc8286266d01cc51af8ae4aa335._comment | 34 + ..._50c1a19a7278e8748c2e6e789f6b418a._comment | 16 + ..._368403625451415c66b9e62005d9ddea._comment | 14 + ..._53ccb5c7c8f15f44fb2f113742fe77f3._comment | 10 + .../when_repo_offline_list_whereis_slow.mdwn | 2 + ..._79052583012da5097ca7bdc52dcdfb7d._comment | 9 + ..._caa2b4ca2826444bdfb47616a549f4e6._comment | 7 + ...mit_pull_requests_for_git-annex__63__.mdwn | 4 + ..._f5e6022798ba63b55bff197b5937f9fe._comment | 14 + .../whereis__58___Why_not_here__63__.mdwn | 33 + ..._02a423918efcc760bb89dfb78586dc2a._comment | 12 + ..._e55ce8cbb6bbabc654ba743d755a6eee._comment | 10 + ..._7de87ad1fd8a0f53562d3083af1410d6._comment | 33 + ...and_with_file_names_instead_of_hashes.mdwn | 7 + ..._4eaca07152916adc18032fb404e4dd92._comment | 10 + ..._94b43ac23ff8332b35723422eede8997._comment | 8 + ..._45ffa6dd17667ecd6685f85f34046eff._comment | 10 + ..._d459fbcf0db59b821ae67f4949e48103._comment | 14 + ..._e52a8c9cb418fbc2e2cba71f37bd44ad._comment | 8 + .../which_version_should_I_install__63__.mdwn | 8 + ..._147f12392f6f546ab50dc346052ad4b7._comment | 12 + ..._c85c107a60b4b642ed9a8de7d233f95e._comment | 46 + ..._f627212a612f5d746bb8bcc5e1ea48df._comment | 8 + ..._1c8201cf1de60fde73a2370a6e6c3ad3._comment | 15 + ..._c0f850927683d45dbe4d6d1d61788b4a._comment | 8 + ..._b563b2be227a1a128d8ac0679108f5b5._comment | 11 + ..._e24a8a8edd7d0b314f26406d17775fdc._comment | 10 + ..._ef725153df7a9b65f7ade4d7e6cecffb._comment | 12 + ..._git_annex_fix__96___fix_a_link__63__.mdwn | 32 + ..._865245182d765fed7bbeb42a35dd605e._comment | 9 + ..._c1f5a285b7cfb92d218b9b0d31caeed6._comment | 7 + ..._be2816c47091842b829cd626e18c5fda._comment | 9 + doc/forum/windows_port__63__.mdwn | 2 + ..._23fa9aa3b00940a1c1b3876c35eef019._comment | 9 + ...et__47__drop_via_webapp_file_explorer.mdwn | 1 + ..._c818a6d44dc13a56460b1865f70eb97c._comment | 8 + ...ake_copy_stop_on_exhausted_disk_space.mdwn | 4 + ..._467e5e3db3e836030bc4b4f15846951f._comment | 12 + ..._e3ca3db9bea11d3e085ee9c3c56b33fe._comment | 8 + ..._0ef8c37350fc192d9b784fbab1d9f318._comment | 8 + .../working_without_git-annex_commits.mdwn | 20 + ...peared__44___broken_symlink_showed_up.mdwn | 27 + ..._00b084f9786de6516f46065c0cb00e79._comment | 11 + ..._138499b36d28c5e267b4aad8792dc87e._comment | 48 + ..._6c59c494b563e56d061417eb2216bb19._comment | 8 + ..._ccbba61cdd6fce3e5de82417bcc0cbfb._comment | 12 + ..._50526283b35997cece2f087507cdd4ee._comment | 12 + ...de_to_track_my___47__home__63____63__.mdwn | 7 + ..._b011442de2f67f3ad340031a0767e990._comment | 8 + ..._c69865c08c3eb49d64310fc76e80c65d._comment | 8 + ..._7651fb48fc71b2c7b4e7b6830a0f9865._comment | 10 + ..._7d88f1aa163185c801b7697846086c7f._comment | 12 + doc/future_proofing.mdwn | 53 + ..._2614eb2e9b7b23fa9bb4251c0d025909._comment | 16 + doc/git-annex-add.mdwn | 137 + ..._0e6b855afb4fba540ea5560df26839c5._comment | 11 + ..._43cf725964c63a2d2545d9f204316a57._comment | 11 + ..._8517f9634d217f731efd704405d3f2ca._comment | 10 + ..._3bbbe94633b6cb4ef93b7942eb36cc6c._comment | 9 + ..._f67bd5fdbe9deeeea1d48175a6b5c536._comment | 14 + ..._be9e67994aacebedb478f68a8ae542a5._comment | 14 + ..._bb9d72f90f4d3c93d71de1a1bbc244b6._comment | 14 + doc/git-annex-addunused.mdwn | 42 + doc/git-annex-addurl.mdwn | 190 + ..._66051cf22495e661828f2ef3291f8578._comment | 8 + ..._a09a85bbabc112369ab661b7ac5f277d._comment | 10 + ..._f75e35ae6f739e98aeb15c3f8708be8a._comment | 15 + ..._f413cc1febfa70e3ad885c6fa031a209._comment | 9 + ..._5719924fbda2daabe83ef2fde447d620._comment | 12 + ..._460d474cb8ef32d41eae71ee070de0b3._comment | 27 + ..._c6e1743647bb4d45b5a1b237f53d77a6._comment | 7 + ..._ce9c660be160a22c28aeb6de8b3b5818._comment | 16 + ..._9bc984fb80d77309b62a4e915e65a31a._comment | 14 + ..._46e1b62d37619521a60eb2339b8d094f._comment | 21 + ..._0951800d761d18614eb6c5f08cdbb885._comment | 18 + ..._47dfa82fc6426fb9ad050dd00290dc03._comment | 9 + ..._8d8ac07a0f0fe599ea5ed1e4089b13fa._comment | 8 + ..._88aea3014245634d42f23a22ccf2fcc9._comment | 17 + ..._b261e7bfeeffb2c5264aaadae1d78817._comment | 9 + ..._48741c1c625dc1ecba2db4f7be2f644c._comment | 41 + doc/git-annex-adjust.mdwn | 137 + ..._364d1d5546c0f448a4b27cfe69a59a07._comment | 14 + ..._383af8e1e26e4119671437aace0a58f5._comment | 20 + ..._c5af3a73af8925839413467a7d1e0e14._comment | 8 + ..._597c5e0254012e3a4ecafa49cfa23cb6._comment | 8 + ..._f00c27078cce5ad75fcf0cec1033751b._comment | 14 + ..._a9c88b1d83d5e874f8f8063fcdd9e624._comment | 8 + doc/git-annex-assist.mdwn | 69 + doc/git-annex-assistant.mdwn | 72 + doc/git-annex-backends.mdwn | 24 + doc/git-annex-benchmark.mdwn | 65 + ..._fe0e8d2e2e875521e715ee2e68818570._comment | 21 + ..._3d8dcde00f8df7961490ef81f5400824._comment | 19 + doc/git-annex-calckey.mdwn | 47 + doc/git-annex-checkpresentkey.mdwn | 40 + ..._756f276929a0b0ff73baea141d3ef07d._comment | 8 + ..._e277962791b64e67b08ccff47dd22447._comment | 14 + doc/git-annex-common-options.mdwn | 155 + doc/git-annex-config.mdwn | 238 + ..._26bd743439e87e71b1eea2c620e6fc12._comment | 10 + ..._0cf3e61f86b217b89dcace22bdfaaa44._comment | 8 + ..._cd443c49f9d1122f078872259e342683._comment | 8 + ..._e1c484811ea276532ed1b5c965d4de1b._comment | 8 + doc/git-annex-configremote.mdwn | 41 + doc/git-annex-contentlocation.mdwn | 36 + doc/git-annex-copy.mdwn | 151 + ..._9be279110a112335bc72ee8c8a347da2._comment | 12 + ..._599958b0a57d2f8f4383733d28ad9c8d._comment | 7 + ..._a9408822e314c32bebf8230f9d40216b._comment | 12 + ..._44dcb42a011cc203655bccca06de2e10._comment | 8 + ..._fe7c2c6617b3a5ca153af2225fc66498._comment | 11 + doc/git-annex-dead.mdwn | 65 + doc/git-annex-describe.mdwn | 45 + doc/git-annex-diffdriver.mdwn | 64 + ..._b45fd606668e2eee0a37bf1db3391f37._comment | 9 + ..._05c3a29d7827dd6fc5babe0ac1ff2a94._comment | 9 + doc/git-annex-direct.mdwn | 27 + ..._5d6f9e9393e534e027ddcd555861196b._comment | 9 + ..._ef8ac748470549776c1ee299b062add2._comment | 7 + doc/git-annex-drop.mdwn | 152 + ..._9ed8d998831414436e5d0e100ed96fb7._comment | 8 + ..._95c5be6e2be84dc0903e3d7384f67313._comment | 8 + ..._ecb863aea64eadbaeb7759c5cb0bf5a5._comment | 12 + ..._c9017041b01d803b346b1b14b8d1e066._comment | 14 + ..._16095aad685d142672911e799450634a._comment | 14 + ..._156873ca9820b316a2099b6646562891._comment | 9 + ..._655f0bcaafdf03eb637af715e7642e27._comment | 8 + ..._ed46bc0407457fc5db0d5241ba69d9ed._comment | 10 + ..._f9b255923bdb20c92b878d86998b7ae2._comment | 11 + ..._cf6fbdc5355aebe33188825d578690c1._comment | 11 + ..._55d96bb12b325954bb7e7817f1a8ff3f._comment | 8 + doc/git-annex-dropkey.mdwn | 49 + doc/git-annex-dropunused.mdwn | 65 + doc/git-annex-edit.mdwn | 18 + doc/git-annex-enable-tor.mdwn | 40 + doc/git-annex-enableremote.mdwn | 88 + ..._43876327581d6bcfb69c318c02d6389a._comment | 21 + ..._78223f5c6ad120d5e0b98583543425db._comment | 37 + ..._4bc11d1df0ff6962b12f5b8a1bb6188e._comment | 9 + doc/git-annex-examinekey.mdwn | 91 + doc/git-annex-expire.mdwn | 79 + doc/git-annex-export.mdwn | 175 + doc/git-annex-filter-branch.mdwn | 151 + doc/git-annex-filter-process.mdwn | 52 + doc/git-annex-find.mdwn | 96 + ..._8d931c135df8f9eba201a3dbb94af87e._comment | 18 + ..._b9d4cc7438ce5dbe22b62e9decc6cbee._comment | 10 + ..._d5846a41e2e227569d7d90dbb8edf7d8._comment | 8 + doc/git-annex-findkeys.mdwn | 75 + doc/git-annex-findref.mdwn | 27 + doc/git-annex-fix.mdwn | 49 + doc/git-annex-forget.mdwn | 43 + doc/git-annex-fromkey.mdwn | 60 + doc/git-annex-fsck.mdwn | 134 + doc/git-annex-fuzztest.mdwn | 27 + doc/git-annex-get.mdwn | 156 + ..._9914f6f6c99757927eed9b5d0217908e._comment | 19 + ..._ce5c85afa01019afe58c79df151c65ff._comment | 12 + doc/git-annex-group.mdwn | 39 + doc/git-annex-groupwanted.mdwn | 46 + doc/git-annex-import.mdwn | 250 + ..._8961635a772b4ddb5ba1e04a50034e6a._comment | 11 + ..._e62b59d5c9cee04a77c51799624a3357._comment | 8 + ..._3891ccc35010e1e5c328a9aa6b9e596b._comment | 15 + doc/git-annex-importfeed.mdwn | 147 + ..._d0197108d07873040e46577df1faadbd._comment | 16 + ..._25d4ed016e98609066597a8d2b956f87._comment | 15 + ..._bce2b233e4d42fc87a2e17d51e2c2606._comment | 11 + doc/git-annex-indirect.mdwn | 27 + doc/git-annex-info.mdwn | 99 + doc/git-annex-init.mdwn | 86 + doc/git-annex-initremote.mdwn | 148 + doc/git-annex-inprogress.mdwn | 72 + doc/git-annex-list.mdwn | 40 + doc/git-annex-lock.mdwn | 50 + doc/git-annex-log.mdwn | 147 + doc/git-annex-lookupkey.mdwn | 48 + ..._100fcc1559449ae99a2dc6eade61662c._comment | 49 + ..._897eaca8174d5f568a19805f90d9e1c3._comment | 8 + doc/git-annex-map.mdwn | 52 + doc/git-annex-matchexpression.mdwn | 75 + doc/git-annex-matching-expression.mdwn | 92 + doc/git-annex-matching-options.mdwn | 310 + ..._09d1a7961a79dff47bef8797b3775766._comment | 9 + ..._78a5e7090e5ac3e6710813bac600fde0._comment | 7 + doc/git-annex-merge.mdwn | 56 + doc/git-annex-metadata.mdwn | 182 + ..._278fca1c579d0acdcce819449aec8eee._comment | 13 + ..._deee9a4c3a812c9c8097d89f2f6c7d76._comment | 10 + ..._45492400069021adbe048978be6957ef._comment | 12 + ..._12e615b99bf9999df0678cb6dc09d398._comment | 11 + ..._6537bd785997501a9708682acd91f9f6._comment | 18 + ..._49c885bd5840aba9f9e011a1618931a1._comment | 9 + ..._b4f928a4e8a81165e3845219483a9b25._comment | 10 + ..._11b1fa357953736925cfbbc1079590dd._comment | 13 + ..._fe7d15a1a4cd729b6ffec26f49d8b47a._comment | 9 + ..._54cff011e3e13882cfbd7a30fb43d078._comment | 11 + ..._a14b21109aa12eaf13e8c215e108cc29._comment | 8 + doc/git-annex-migrate.mdwn | 112 + doc/git-annex-mincopies.mdwn | 48 + doc/git-annex-mirror.mdwn | 100 + doc/git-annex-move.mdwn | 146 + ..._b69fbe2f3892deddb269dd3eb1fdcd84._comment | 12 + ..._f2908113a633034aa73b8564d22abba6._comment | 8 + ..._82cfbc0f3600c7c4c9dffc1d35e81123._comment | 11 + ..._013e20add9a007d3f9a9c2a2ceb6cb06._comment | 13 + ..._e7608b7fac4ec80781cb4281dc2bf596._comment | 8 + ..._eb62a9020575d89799815f6e4b98b28c._comment | 10 + ..._e23e2a133db02112ca99aeda0499e841._comment | 8 + doc/git-annex-multicast.mdwn | 97 + doc/git-annex-numcopies.mdwn | 45 + doc/git-annex-oldkeys.mdwn | 54 + doc/git-annex-p2p.mdwn | 82 + ..._d5a6a2eab5d32a9c2f4ed194e01d95e8._comment | 10 + doc/git-annex-post-receive.mdwn | 36 + doc/git-annex-pre-commit.mdwn | 32 + doc/git-annex-preferred-content.mdwn | 317 + ..._4c24f4513af72214bd5feb69f1ab86bc._comment | 8 + ..._e4e0f34466db1fecd21db0e929530ad0._comment | 8 + ..._73c14351e041ac5ba86f6ab21487fd12._comment | 7 + ..._4f30e99af93a2eb571f5b084cfa72d0d._comment | 11 + ..._b05949f87e0073e93a7e09658bd21f05._comment | 13 + ..._f10a0c185fa2f2b4b8ec9fceaed6e8e1._comment | 10 + doc/git-annex-proxy.mdwn | 25 + doc/git-annex-pull.mdwn | 153 + doc/git-annex-push.mdwn | 147 + doc/git-annex-readpresentkey.mdwn | 32 + doc/git-annex-registerurl.mdwn | 77 + doc/git-annex-reinit.mdwn | 52 + doc/git-annex-reinject.mdwn | 97 + ..._070a87e0cb1bbc49088989293334e1fb._comment | 48 + ..._d1a04e31fea877ae5fe873fbd01fdcaa._comment | 8 + ..._2dcdd82efbd6dcac0f3b729d55a09386._comment | 8 + doc/git-annex-rekey.mdwn | 59 + doc/git-annex-remotedaemon.mdwn | 58 + doc/git-annex-renameremote.mdwn | 47 + doc/git-annex-repair.mdwn | 59 + ..._088ce57c74a653478e03968e1d6bba23._comment | 16 + doc/git-annex-required.mdwn | 49 + doc/git-annex-reregisterurl.mdwn | 64 + doc/git-annex-resolvemerge.mdwn | 70 + doc/git-annex-restage.mdwn | 34 + doc/git-annex-rmurl.mdwn | 53 + ..._fc99b7e905c81183f78320af266ae1a5._comment | 8 + ..._181581caac6ee439ba1003ebca79ed09._comment | 11 + doc/git-annex-satisfy.mdwn | 74 + doc/git-annex-schedule.mdwn | 55 + doc/git-annex-semitrust.mdwn | 46 + doc/git-annex-setkey.mdwn | 33 + doc/git-annex-setpresentkey.mdwn | 44 + ..._58c98aafb5f6c20c6b71126cd17d3a40._comment | 8 + ..._57b0ae8a49df6c8809aa3050610191b2._comment | 10 + ..._30a5d3fbd8e02726989ab80ed98b4a54._comment | 15 + ..._df3018b9b3491963311063e8ff202df4._comment | 9 + doc/git-annex-shell.mdwn | 194 + doc/git-annex-smudge.mdwn | 66 + doc/git-annex-status.mdwn | 46 + doc/git-annex-sync.mdwn | 92 + ..._2e12ed1c1a594dfbd06a3f25f5e25e57._comment | 10 + ..._cc11f83a06352e5049dcbc588d216f27._comment | 10 + ..._cf05eba2bcc10f48092334f9ce889863._comment | 8 + ..._bd5e45a7e668063df9159033a0857075._comment | 8 + ..._5bf6c2b9750dbe5cff87d630f59f511a._comment | 9 + ..._2c989d6d9f2ad2821db970cb3aed83c7._comment | 18 + ..._8f9a5457020bed293e9a93ccc9461a65._comment | 10 + doc/git-annex-test.mdwn | 71 + ..._5fbd7f75fef7a9f504baab1fae05d72c._comment | 8 + ..._752ca0ba483203cc4f5ccf36752e656d._comment | 9 + ..._cac436ddf4dec95006d1ebb4171a3289._comment | 8 + doc/git-annex-testremote.mdwn | 60 + doc/git-annex-transferkey.mdwn | 39 + doc/git-annex-transferkeys.mdwn | 31 + doc/git-annex-transferrer.mdwn | 28 + doc/git-annex-trust.mdwn | 52 + doc/git-annex-unannex.mdwn | 56 + ..._281aea2f018ea0fc98452c0d180c3bcb._comment | 62 + ..._d325e4201ec2964c5633e00c473df755._comment | 10 + ..._034db8e67e4bf5321e022918902f38e8._comment | 27 + ..._2a5334f59a4bdf242d53d2d5c120283c._comment | 12 + ..._d549796a3b1bdd3e980cb2c05f30fe2e._comment | 14 + ..._d5a8450349b0383ec29d150420189937._comment | 97 + ..._a6b64c4d90f4d228b8facce5e2399eca._comment | 25 + ..._54a6008e1db73d16d72587830912d772._comment | 9 + doc/git-annex-undo.mdwn | 49 + ..._3466520304aa164ec44ed4e9d67590e7._comment | 55 + ..._3dba1a993cbd357bdaa453366c0185cd._comment | 16 + ..._ac1369c0417c1dc5f1b41b5cc88fe2fd._comment | 18 + ..._18ed23e07ffed1cbf63e71fb115b0654._comment | 66 + doc/git-annex-ungroup.mdwn | 27 + doc/git-annex-uninit.mdwn | 41 + ..._075670e8e153e1d9f420b7d53c6ec06d._comment | 9 + ..._c695775bdb2c7491314a33dd6bcb447d._comment | 14 + ..._3386d8419830354b4422d38448467e95._comment | 9 + ..._53358bdd6093e2fb787df8de7190c5fd._comment | 17 + doc/git-annex-unlock.mdwn | 79 + ..._1f5ca7ccd35e9b102bf24b3f14deeee1._comment | 17 + ..._26ad80a6ad142e7dac6c8af955a4413f._comment | 17 + ..._d7f38f681be51db1244988847840d735._comment | 11 + ..._51158d4484ecb39633ec828beb8d9ce3._comment | 8 + ..._516a1522db3d1c14cc5131a24d672a8f._comment | 11 + ..._d04a1d4159306939b91a34fd17ab0325._comment | 9 + ..._40abc819288a97753747562f16b8febe._comment | 8 + ..._047355b1ba5e90b71fc85b42f52d1aeb._comment | 16 + ..._7ab5b674d0fc18da262e6c0264953e21._comment | 9 + ..._d10c8b6e2dd8800cbfc11a7fa8536065._comment | 10 + ..._31c72f60ddf029f09c1850223d5a8a55._comment | 8 + doc/git-annex-unregisterurl.mdwn | 68 + doc/git-annex-untrust.mdwn | 45 + doc/git-annex-unused.mdwn | 110 + ..._5c1ea2e8ac475d8c0ddca2c38f968b95._comment | 13 + ..._573e68def90ffd899271c6a9f80eae3c._comment | 8 + ..._4a935c0c8862b24202c877031c35e238._comment | 8 + ..._029c4bee59e48806c9f3d83579fdbb90._comment | 8 + ..._c4d994706f69024788e6653d02a09517._comment | 8 + ..._ca010846ef8eed4a302b6755f1f521f4._comment | 8 + ..._5eb913bb96a04a174c04fe5d119977f4._comment | 10 + ..._5b208cb45335f0d383a456865068e659._comment | 29 + ..._65ab9f687f2817199eda7455d9b82677._comment | 8 + ..._962097729f8b4a657bb7b9863fdffb68._comment | 8 + ..._e21b036767651c5cfdd34bbd24a31fb5._comment | 8 + ..._10ee2770ffe1cde367f3d310b2670539._comment | 10 + ..._cfcc0bab810d58b7db66c2fa4e92f769._comment | 8 + doc/git-annex-upgrade.mdwn | 60 + doc/git-annex-vadd.mdwn | 42 + doc/git-annex-vcycle.mdwn | 38 + doc/git-annex-version.mdwn | 38 + doc/git-annex-vfilter.mdwn | 36 + doc/git-annex-vicfg.mdwn | 32 + doc/git-annex-view.mdwn | 77 + doc/git-annex-vpop.mdwn | 38 + doc/git-annex-wanted.mdwn | 39 + doc/git-annex-watch.mdwn | 47 + doc/git-annex-webapp.mdwn | 60 + ..._443c5595412a19ef9c6948c4224297a3._comment | 12 + ..._7b1c4c4356e801006081588b32075fb4._comment | 9 + ..._aee70625f7cff6e7312f9bc2cbbb02d0._comment | 8 + ..._c1754cdb4087ad278867ed8fddd99409._comment | 8 + ..._31301895752f0dd81db72c463f0dc732._comment | 9 + doc/git-annex-whereis.mdwn | 122 + ..._6a1f97de22983127bfc351d14838fb0e._comment | 8 + ..._69a861de80c7d2b939aae7103b1b7359._comment | 14 + ..._d06a33bfaeb2a9274d12639fdedcfa8a._comment | 10 + ..._3f06096e582178b4c69d63e84735d911._comment | 11 + doc/git-annex-whereused.mdwn | 53 + ..._bebd4ad86c6a64cc48e6f0dd5861f3de._comment | 30 + ..._f926fbe7c558a242a2af949daed415f7._comment | 8 + ..._bc04457bf320e81437c2eb858793c5ca._comment | 7 + doc/git-annex.mdwn | 2203 ++++ doc/git-remote-tor-annex.mdwn | 36 + doc/git-union-merge.mdwn | 38 + doc/how_it_works.mdwn | 44 + ..._b3bdd6a06d5764db521ae54878131f5f._comment | 14 + ..._2a8ce5859040d815e6234fc18f5f1961._comment | 10 + ..._806c0fe325942a425e43afb9b78327ec._comment | 8 + ..._0ef6b8c9dbd5a7f9b9f274dc6f9988f0._comment | 9 + ..._11e5141c9ffb37db4fa0c1bfb32c51a9._comment | 15 + ..._2ad3441a02f1bcc2cca0c10ecf7b216f._comment | 35 + doc/index.mdwn | 40 + doc/install.mdwn | 41 + doc/install/AlpineLinux.mdwn | 3 + doc/install/Android.mdwn | 7 + doc/install/Android/git-annex-install | 58 + doc/install/Android/oldapp.mdwn | 11 + ..._225f2c6fe255be93702cfbd4dc172f3b._comment | 8 + ..._4b565e73f02f0e84bdf7e686b0d7bf5f._comment | 8 + ..._3e7980603749665fafbdeb1b7ab068a5._comment | 8 + ..._4e970633d9073fcf4bc33f3fff2525b2._comment | 10 + ..._57867e2b13b83cc9815df56b027d388a._comment | 9 + ..._87da4f379a0276b662583e7e22061218._comment | 8 + ..._169025cf0b415d5a45dd89856e53cca9._comment | 26 + ..._19909ddf4e7e6da0e814e165c5c9b44a._comment | 9 + ..._f9ced494a530e6ae3e76cfbaddb89f5d._comment | 8 + ..._74cccae04ea23a8600069c7e658143aa._comment | 8 + ..._82c7cb31d19d4e18ca5548da5ca19a79._comment | 8 + ..._cebaa8ee5bbed27d9b2d032ca7bdec6e._comment | 8 + ..._34f7c42050fa48769a6bfae60d72e477._comment | 8 + ..._f3d289b78d6bdb3cc65689495a8439a5._comment | 11 + doc/install/ArchLinux.mdwn | 21 + ..._b68c42b3804481808dfe83ae557edec3._comment | 10 + ..._0d51aaebe5929b03cba38156a97bf3cc._comment | 13 + ..._e5f923e6d81cfb3fba7a72f60baaf4ab._comment | 16 + ..._8e607cd883ec174571e9dfe3b25bfd05._comment | 8 + ..._a378391dd218859f381c479259dd8fe3._comment | 10 + ..._1d597d6a95f9c2df7dae6e98813e4865._comment | 36 + ..._2d708977e2fad6b68803494576382df5._comment | 10 + ..._97d611f1ae6d4fbe91f84f9fe739f368._comment | 13 + ..._5b5f5e0b64e5bfb1ea12e8b251c6fb5f._comment | 15 + ..._ddc13b45286933e7dd06f5bd6ea8fac9._comment | 10 + ..._b5f1bd5d92cf35002e2ea75e07040bea._comment | 9 + doc/install/Debian.mdwn | 14 + ..._b44ed53973ac26eedd3838df28f74a7e._comment | 7 + ..._a0105d7f045511b9c80ea9bb0eac3708._comment | 8 + ..._435fb1359ea7f481ae23a973216085d8._comment | 8 + ..._a34e23d9aa3027012ab1236aa4f7d5cb._comment | 8 + ..._20d8271ba3f6cfe3c8849c3d41607630._comment | 8 + ..._89f67da4a4a6a626a7db9c6674b244b6._comment | 11 + ..._ef7f3e88d61833e51f0302e938343818._comment | 10 + ..._029486088d098c2d4f1099f2f0e701a9._comment | 9 + ..._648e3467e260cdf233acdb0b53313ce0._comment | 8 + ..._4d922e11249627634ecc35bba4044d9e._comment | 8 + ..._2a93ab18b05ccb90e7acc5885866fca2._comment | 9 + ..._1bccc7bf7a4ef61a9b30024b9b22ba7d._comment | 12 + ..._5b5a3b0e8abe8831a6a15a4e258d14fd._comment | 10 + doc/install/Docker.mdwn | 6 + ..._909e3b2da0050ce1102c289cc5aac522._comment | 66 + doc/install/Fedora.mdwn | 40 + ..._c4db84e672ad4b45b522db735706b00f._comment | 16 + ..._f98c488c09bef86e2b0414589ce9e141._comment | 25 + ..._d872acf8865fe7c99a9b712db5b38ea4._comment | 8 + ..._93b3402e4c51e1a5c96f907bb528164b._comment | 16 + ..._0427e0503764b29e57abf9e97155136b._comment | 15 + ..._1b1b38a79251fe2e8c1e4debbe3bc3c5._comment | 12 + ..._4832d271dcc63a6cd1c40fe38ad5e367._comment | 24 + ..._80e167cde1a6511683a8f6e8029c0da6._comment | 10 + doc/install/FreeBSD.mdwn | 2 + doc/install/Gentoo.mdwn | 3 + doc/install/Guix.mdwn | 7 + doc/install/Linux_standalone.mdwn | 68 + ..._1adc00aecc51f1e74701bd67cd74155d._comment | 8 + ..._7983285b56fd10359a7cc3615fd1e2fe._comment | 12 + ..._eaa9b0532d4629b61f3a684886b1d4f9._comment | 7 + ..._070689ea45739d06260da07d1369dff9._comment | 7 + ..._9046b80114fc03179c971bfb3e4d666d._comment | 8 + doc/install/NixOS.mdwn | 10 + ..._4e487ddd2654a8a992c1538b9c3bf003._comment | 21 + doc/install/OSX.mdwn | 42 + doc/install/OSX/Homebrew.mdwn | 25 + ..._61cad5a309c3c4e3f278dec1890c9f40._comment | 12 + ..._2f89cfbc42590885fb7e92a89d0f7895._comment | 38 + doc/install/OSX/MacPorts.mdwn | 27 + ..._987f1302f56107c926b6daf83e124654._comment | 11 + ..._47a77a03040fe628109bd54f82f9ad7a._comment | 17 + ..._e5172de344908f85ce6cf976e3c3806b._comment | 10 + ..._8d53c477b441ab0984257b21003c7cc7._comment | 12 + ..._17b84f51de6bed88e373350b194c8a8d._comment | 10 + ..._f4b39e2009274539d60b29711a4a2c8d._comment | 22 + ..._5581b7d1c09e6a78419d626bb25261b6._comment | 10 + ..._dda16b58686b0e5d061521f8e1831f89._comment | 9 + ..._277249620801bd4305776a3d598bd074._comment | 24 + ..._06e8fc7a4670a42c249f90a3602c3523._comment | 11 + ..._5eca3153048d2b3b4fa707d6b8a5ebeb._comment | 9 + ..._040d388c94ee0e537990f0cd782d8554._comment | 8 + ..._3e6a3c00444badf2cf7a9ee3d54af11e._comment | 8 + ..._951e6bb1f70d8f02374e9e3fb91dc182._comment | 9 + ..._6ae394921280d3cd4907f210b9845a2f._comment | 8 + ..._895d4e837d05a318512730d66f14db22._comment | 11 + ..._af10ed56c037499d002fcf0114b9426a._comment | 15 + ..._db90984062a07576a4777b2d743161f1._comment | 24 + ..._25552ff2942048fafe97d653757f1ad6._comment | 8 + ..._25cac8bcd84a5210fc0a5243260b8cc7._comment | 18 + ..._39b4b748b4586bf32b37edfefef84bba._comment | 8 + ..._1a9c91ef43edc4148947f202ff604114._comment | 8 + ..._892f7e65f95f43697164267c4b71c0d5._comment | 8 + ..._b94193a0583605920effa7179a6164d9._comment | 10 + ..._f11f726d1fee3c4c91f3c984e792037d._comment | 8 + doc/install/OSX/old_comments.mdwn | 1 + ..._4d15bfc4fc26e7249953bebfbb09e0aa._comment | 11 + ..._798000aab19af2944b6e44dbc550c6fe._comment | 10 + ..._707a1a27a15b2de8dfc8d1a30420ab4c._comment | 10 + ..._60d13f2c8e008af1041bea565a392c83._comment | 8 + ..._a6f48c87c2d6eabe379d6e10a6cac453._comment | 8 + ..._6ef2ddb7b11ce6ad54578ae118ed346e._comment | 9 + ..._6fd1fad5b6d9f36620e5a0e99edd2f89._comment | 9 + ..._af6fe3540032cdf4400478de87771058._comment | 30 + ..._8d3a0596db67108041728b20f2790f31._comment | 7 + ..._0a1760bf0db1f1ba89bdb4c62032f631._comment | 13 + ..._0327c64b15249596add635d26f4ce67f._comment | 19 + ..._7683740a98182de06cb329792e0c0a25._comment | 25 + ..._c9362141d15a2f68a75df9f8bfe29da0._comment | 17 + ..._8106196c3fef70652cb2106e2d5857db._comment | 8 + ..._47c682a779812dda77601c24a619923c._comment | 8 + ..._733147cebe501c60f2141b711f1d7f24._comment | 16 + ..._b090f40fe5a32e00b472a5ab2b850b4a._comment | 8 + ..._fc092412e99cf4c5f095b0ef710bc4de._comment | 8 + ..._d513e21512a9b207983d38abf348d00f._comment | 16 + ..._d68c36432c7be3f4a76f4f0d7300bac9._comment | 20 + ..._e6109a964064a2a799768a370e57801d._comment | 30 + ..._50777853f808d57b957f8ce9a0f84b3d._comment | 10 + ..._626a4b4bf302d4ae750174f860402f70._comment | 8 + ..._18a8df794aa0ddd294dbf17d3d4c7fe2._comment | 7 + ..._2ce7acab15403d3f993cec94ec7f3bc6._comment | 14 + ..._a93ad4b67c5df4243268bcf32562f6be._comment | 39 + ..._ae3ed5345bc84f57e44251d2e6c39342._comment | 14 + ..._c6b1b31d16f2144ad08abd8c767b6ab9._comment | 23 + doc/install/OSX/porting.mdwn | 7 + ..._cd2120552ef894a37933b328136fa4cc._comment | 8 + ..._740fa80e2e54e6fb570f820ff1f56440._comment | 8 + ..._a84028080578a8b60115b6c4ef823627._comment | 8 + ..._d6f1db401858ffea23c123db49f5b296._comment | 8 + ..._035f856923276b0edad879e196e94097._comment | 9 + ..._336e0acb00e84943715e69917643a69e._comment | 35 + ..._1befafa862b7d07b1f6e57c0182497cf._comment | 36 + ..._19c08b2c6c2c5cd88bf96d2bcbbd9055._comment | 10 + ..._537fad5d8854e765499d47602d1ab398._comment | 8 + ..._18d4377f4ded5604d395d73783ba82c9._comment | 8 + ..._6b5f44a98f9d37a1c6ecfe19a60fe6c5._comment | 12 + ..._3d82a270dd4b0159f4aab5675166e1e3._comment | 30 + ..._b9d3563a2cc3d769f27876e028dc344d._comment | 12 + ..._2a60108a440231ba83f5a54b6bcc5488._comment | 14 + ..._d453510b9bb62072a4c663206c12c8a4._comment | 8 + ..._0970bfd63137ea48701dff6aea1b4bcb._comment | 18 + ..._8622ed56c6a8034c20fb311418d94003._comment | 8 + ..._ce58633ef5b2f8f4caa7e626358f33be._comment | 8 + ..._09084a7b3cf06bfa3add0f4991476ffe._comment | 10 + ..._a46d8e3e7795b9afb1e1c2be943d12af._comment | 10 + ..._203a36322b3c453c05c8906c64e62e06._comment | 8 + ..._874ff01f27911baf6ef0f559d5d5f5a0._comment | 27 + ..._38d9c2eea1090674de2361274eab5b0e._comment | 29 + ..._35bf3812db6f3ef25da9b3bc84f147c5._comment | 8 + doc/install/OpenBSD.mdwn | 1 + doc/install/RHEL.mdwn | 4 + doc/install/ScientificLinux.mdwn | 6 + doc/install/Ubuntu.mdwn | 11 + doc/install/Ubuntu/Phone.mdwn | 20 + ..._490e065314693423ab6969d8ae6978fe._comment | 8 + ..._4ebac3fb43de854ed1a3b1d2ea94011a._comment | 10 + ..._38f69dffe2db0d15e4c4e5cb47f40ef8._comment | 8 + ..._7964374bb2332940677eea570bdb0b69._comment | 8 + ..._b511063001af2e2170bef657cf016ff2._comment | 12 + ..._4ea052431b49a0505b4a58a760054bed._comment | 8 + ..._b5dd1d73309e427d6e817a3a69beea74._comment | 12 + ..._d1c511153fe94bf33e19a1281f1c92f2._comment | 8 + ..._ad13886c1c1f76d1cd995ea7b7d8471c._comment | 8 + ..._a08817322739b03cf0fec97283b16f1a._comment | 8 + ..._fe0997e56136bd30749f0995cbf19b56._comment | 12 + ..._fbb5306a162db1a1ee9efa3523aac952._comment | 11 + ..._a97e7f0e62ac685c3ded423bddeaa67f._comment | 14 + ..._921a223fd7e679b9ced3d8ba5ce688e0._comment | 8 + ..._1f943cb084fa8e21bc6ee5fc3118f02f._comment | 8 + ..._c2f8b35ada873acb1ce593b04e2899fe._comment | 11 + doc/install/Void.mdwn | 1 + doc/install/Windows.mdwn | 37 + ..._39edee046193c7d36daaf245fa87007c._comment | 9 + ..._6310a850074cf65b1c0b5b49e2e5b582._comment | 8 + ..._3a7080a31d30ccb32fede56a98bb635a._comment | 9 + ..._6a998c400070059477de18a81a3ba0b5._comment | 12 + ..._7b5f0c6b31d9c409ea0989123788bacf._comment | 13 + ..._19226be8cae0c29b0e9a54cebcf1f17b._comment | 15 + ..._b4b60bed666355ace286775afe87860d._comment | 9 + ..._165ac8b0e1cd4f250e681eb88c0624d3._comment | 9 + ..._e0adfbf74754f847dc4705685cf00640._comment | 10 + ..._e5e5c7b75859493a7d94cbf7df746fb9._comment | 8 + ..._ef329ea100b36a1180e232a1f97369d6._comment | 12 + ..._10fb90bc434b4da189ed7235818ef30f._comment | 9 + ..._c81a36e387ca11050cf8cb977fff98ff._comment | 9 + ..._88ad2f657bf92e8c6144608612b9be49._comment | 8 + ..._90ef5d5a4f66ac3e440aadf302a625a9._comment | 23 + ..._0589dd8c33572dd1d0ef5cb7b29ebba7._comment | 8 + ..._35c66016c971a623ec86318adf7923b4._comment | 11 + ..._2687128ff7aa4b6f29e8b880b5d4d13d._comment | 8 + ..._0aa16754fb08d8f2a54c8c3f78b6c187._comment | 14 + ..._ba3985a5cbd9f5682807d2bdbb9874e2._comment | 8 + ..._9a2118d6f967585cb21f9d9b372f4017._comment | 8 + ..._a2532a0fea59d15a2efa11748ff0d70a._comment | 8 + ..._4ae37152bc9765cea921b436fb2785d8._comment | 10 + ..._bc273d60cb74241231183186aefbc147._comment | 36 + ..._1330a5413b720eca0103a0880d24eb2d._comment | 7 + ..._768498659909c37044f2b4dd08bacda3._comment | 8 + doc/install/conda.mdwn | 15 + ..._d9fbae3aca8853a13919350d405d686b._comment | 23 + ..._8968f1e04a08fb95644910089438b02d._comment | 9 + doc/install/fromsource.mdwn | 121 + ..._7ebe353b05d4df29897dc9a4f45c8a91._comment | 8 + ..._0d06702e6e0ae3cd331cf748a9f6f273._comment | 44 + ..._b93ca271dffca3f948645d3e1326c1d9._comment | 12 + ..._3dac019cda71bf99878c0a1d9382323b._comment | 8 + ..._14b46470593f84f8c3768a91cb77bdab._comment | 9 + ..._c3a5b0aad28a90e0bb8da31a430578eb._comment | 8 + ..._4faf214f97f9516898d7c17d743ef825._comment | 10 + ..._2a9d6807a3a13815c824985521757167._comment | 10 + ..._1efa0c7a963ec452fc6336fbe4964f6e._comment | 10 + ..._6f42f9234f9ff6a2ca6bbb4d2643843e._comment | 44 + ..._9d085e460553fa045999ab7cb945cdec._comment | 13 + ..._f04df6bcd50d1d01eb34868bb00ac35c._comment | 18 + ..._0f553be2a4c666e3bed58b2bce549406._comment | 8 + ..._f91a6ec21e96eced73ea9579fd8cbd15._comment | 8 + ..._2f27b78215f97ade1986ca806c634cb3._comment | 16 + ..._c34d2b1d95830a3e58671a5b566a1758._comment | 8 + ..._40cbde8ec067b3a860e6df1a9bea5f76._comment | 8 + ..._8a7664e6f9271718dc607a0782366c5b._comment | 8 + ..._bd455c732639728bce2bfc39e32871d2._comment | 8 + ..._c080e9239b6eec88d329c28da7bb4141._comment | 17 + ..._15951dd070a675300420eea137a28ef9._comment | 10 + ..._ac082dca67f4a29b06070c0283130f52._comment | 39 + ..._a69d17c55e56a707ec6606d5cdddee25._comment | 17 + ..._b7954521d9ab40622b665f278dd72e17._comment | 10 + ..._ad639c07cb79e89406e95c1dafce3a01._comment | 35 + ..._4763b24a29627d55f465b9ea260ea7ec._comment | 22 + ..._1d34c294486c85b1149675fa5861ae35._comment | 10 + ..._8d4dfc33cada6091c30d3a43ce404b8b._comment | 21 + ..._38451e751add6daf479b559c4b6a7c61._comment | 8 + ..._4d44e4531e6686bd340f26836ad40026._comment | 8 + ..._2a095a5af53a356bd29abd22a9cb1bea._comment | 16 + ..._f33e1a4575dccc20b0d3d7c00e6db709._comment | 69 + ..._5c1e96221154a4ae4ebd636232044ced._comment | 16 + ..._a86057d7e6d47113330f79e1812c3a5d._comment | 10 + ..._55bed050bdb768543dbe1b86edec057d._comment | 10 + ..._a3bf3ce57ea73515a059267f25b816eb._comment | 23 + ..._d9cccbb9620cc8218e72b5380fd89a05._comment | 8 + ..._954de34275d33bc4590927f911761563._comment | 10 + ..._6de25c1e450e1e3b1d18d2c76235ccb8._comment | 7 + ..._9c08300c5d172ba9223042a00c8acb2b._comment | 18 + ..._c8370525547b435d963a2c1192a21124._comment | 93 + ..._2ff7f8a3b03bea7e860248829d595bd1._comment | 14 + ..._765334858ef1eedff2c5d89ed42aa7f6._comment | 37 + ..._c1ce6084ba1e96afa30e18f0f6433aa4._comment | 10 + ..._514bac1020c4227a23380d1675184fc7._comment | 18 + ..._df7d36e4d169fbc4199026d7af1aa581._comment | 8 + ..._e4bb31024aa4a317be2f45667b6d6f9f._comment | 8 + ..._d7fabada8101596954ed7e401a8c460b._comment | 31 + ..._0592c3d36ab569cd777009a491e25ba2._comment | 13 + ..._13a198daa871e001b02b9df2e8d7c446._comment | 13 + ..._efac370d382fc79e1f207e8090e0f06b._comment | 45 + ..._64b44da5ec93fe4f50ad8b856823558d._comment | 9 + ..._4ef618a5de9b86ffa54ae849cbb329bb._comment | 49 + ..._4aea55dc5b24d84e0953382ccfea1a01._comment | 12 + ..._8789fc27466714faa5a3a7a6b8ec6e5d._comment | 24 + ..._55ec2dcb5e1b5e272fdd53aa063bc162._comment | 8 + ..._7fb2a70b6d39ad95ee701a99b9e19961._comment | 8 + ..._4cf71016c3b42ec972760a938031cbf9._comment | 8 + ..._dddfc7e7d2fa09008f538abde3213b45._comment | 63 + ..._c3195cbc42058593ea6ca9d2eaaf9722._comment | 16 + ..._663426a5014e5a38d477fb6fed411c17._comment | 16 + ..._849c4c2cfc34991c13d55495e391cce3._comment | 78 + ..._5655a80d206bd1f7cf1f326c645df7ed._comment | 8 + ..._059f1cd929228e131bf88d80aca0b573._comment | 24 + ..._444e529f8838ef127ff115eb6c2ef8ca._comment | 140 + ..._5afb2d081e8b603bc338cd460ad9317d._comment | 21 + ..._ab27934713fa6032ec9992f7e04fa9c5._comment | 8 + ..._3075af9a88b717c8ff1a489177e689f4._comment | 18 + ..._fb9581f4949efe1e8c90851fce9d61bf._comment | 10 + ..._bc163a82180b00a8b757edf269cebc06._comment | 24 + ..._473d320a05f08ce3cbe24789dcb01200._comment | 22 + ..._58dfd18135aa187d8b3977521ecff2d2._comment | 16 + ..._129c4f2e404c874e5adfa52902a81104._comment | 22 + ..._738c108f131e3aab0d720bc4fd6a81fd._comment | 8 + ..._5ddbba419d96a7411f7edddaa4d7b739._comment | 12 + doc/install/openSUSE.mdwn | 7 + ..._a5aea1ef644d0402d3caf593fef2456f._comment | 26 + ..._095d48e7dffe57421b2d3384a83d7183._comment | 19 + doc/install/rpm_standalone.mdwn | 12 + ..._7d234e64f3b6e97cd6d91c339ebb0025._comment | 9 + ..._11f0fdc5be4fd6620732867070c53477._comment | 9 + ..._3a38ab16ca034025476b4df0a566b4a9._comment | 8 + doc/install/verifying_downloads.mdwn | 33 + doc/internals.mdwn | 366 + ..._c4298babd96b2596bd4f6ad828212c92._comment | 31 + ..._9758bb3a17f63b4dcf51742ea482dbe9._comment | 8 + ..._f0325cefa5cd53a5a897046606137cef._comment | 18 + ..._e45b6fa035a30703618448a0f764f935._comment | 9 + ..._3f62751c2dd041f4ead1c6580ea5eec1._comment | 10 + ..._c3d12d14e4d044f39829c5d92f523655._comment | 8 + ..._2455c898d6c77a5437a2c1532144bb8a._comment | 9 + ..._df13b7e66963a6d2673e49f52afb978a._comment | 14 + ..._1adce7945940b9c384c2383261388dd9._comment | 17 + ..._4b8ed353dca4f484b3b6eb463fa02fd8._comment | 8 + ..._c19232d5cc4976c2e5b014aef6e8d9ec._comment | 8 + ..._5a26ee5aab274f321a4ea6f8527f53bd._comment | 12 + ..._81293b180fb09105ec158fdfef73d249._comment | 7 + ..._354012b6a9ac11160eb926234d38051f._comment | 12 + ..._7e40f744f9ac7f0403df9d1a2162a516._comment | 14 + ..._9c82a2878f3feb1b2a95662ed25b234b._comment | 15 + ..._9dccdd3a9556ceef54e318cd5c8a50ad._comment | 10 + ..._40442b012886ad698f448c262f0d7f4c._comment | 8 + doc/internals/hashing.mdwn | 44 + ..._9153e4f4f9335e524cf1b96a51bef41f._comment | 10 + ..._086ea37acf15e2a8694b8386222b73f6._comment | 11 + ..._19b7d20ca392078f14f9f10992f288ec._comment | 7 + ..._7642d6ce5fd4d37d464b05d0b4f869c6._comment | 8 + ..._b0cb207a85cda5a0ff2ea71caca22c0d._comment | 11 + ..._edb5c3388b5ac3481403c7accf9bb3f2._comment | 7 + ..._843592cf125be06fb316be43b85b0524._comment | 8 + doc/internals/key_format.mdwn | 31 + ..._4ec126bffafc81fae04e183874ffce39._comment | 11 + ..._1e46521ab48805c36233dbb69b11e389._comment | 16 + doc/internals/lockdown.mdwn | 48 + ..._caa8b378e8c35177083e6cc2f6937180._comment | 15 + ..._7bf74adb5556b7fc74a94e751c5fd3d6._comment | 13 + ..._caf6d5318703d188a2135737093d8323._comment | 421 + ..._0253bf642148ea853f6d1c8580e09db2._comment | 17 + ..._3d7ab5c8e813b21812b5132c708aad68._comment | 13 + doc/internals/pointer_file.mdwn | 25 + doc/license.mdwn | 6 + doc/license/AGPL | 661 ++ doc/license/GPL | 674 ++ doc/links/key_concepts.mdwn | 7 + doc/links/other_stuff.mdwn | 9 + doc/links/the_details.mdwn | 9 + doc/location_tracking.mdwn | 30 + doc/logo-old-bw.svg | 60 + doc/logo-old.png | Bin 0 -> 9092 bytes doc/logo-old.svg | 77 + doc/logo-old_small.png | Bin 0 -> 4713 bytes doc/logo-with-cli.png | Bin 0 -> 39440 bytes doc/logo-with-cli.svg | 107 + doc/logo.mdwn | 30 + doc/logo.svg | 92 + doc/logo_16x16.png | Bin 0 -> 233 bytes doc/logo_32x32.png | Bin 0 -> 473 bytes doc/logo_small.png | Bin 0 -> 4749 bytes doc/meta.mdwn | 5 + doc/metadata.mdwn | 49 + ..._d367fdaf0425b59d694bf16059d47192._comment | 9 + ..._e15d2b5a405db4ccdb91d6aad4a22983._comment | 10 + ..._50b17af1cf75ce88c4aef59dcd971b82._comment | 7 + ..._237721c5e8f66f303a1828810573a23d._comment | 15 + ..._fd30444aecfc4792eb4dbfdebc230786._comment | 9 + doc/news.mdwn | 11 + doc/news/2013_git-annex_user_survey.mdwn | 5 + doc/news/2015_git-annex_user_survey.mdwn | 5 + doc/news/2018_git-annex_user_survey.mdwn | 7 + doc/news/Distribits_meeting.mdwn | 12 + ..._774494da38afecc425aceca21d047b5e._comment | 7 + ..._bbdde32c4bd9c7a1a62450d59a1e879b._comment | 8 + doc/news/LWN_article.mdwn | 2 + doc/news/Presentation_at_FOSDEM.mdwn | 4 + ..._shirts_now_available_at_hellotux.com.mdwn | 3 + doc/news/git_annex_fall_of_code.mdwn | 27 + doc/news/security_fix_release.mdwn | 32 + ...rebox_a_FUSE_filesystem_for_git-annex.mdwn | 19 + ..._e238d1734238e37bb55ff952b32e06b8._comment | 9 + ..._341b567722797eb02bd96ffada431b0c._comment | 8 + ..._d6f6e7181f30094339a49ab420bee380._comment | 9 + ..._ab0d45c5058595a71656035c962c1143._comment | 13 + ..._b92045c91d92da7db794aed2c67dde0d._comment | 9 + ..._6f3b5d5a5781b3a570f46481dc2ebca2._comment | 9 + ..._6202ae898f24b3e02bc343d0fd2ac35a._comment | 9 + ..._884a0b9571544a95fad55cb5fc5963d8._comment | 15 + ..._32b5d0fb9c328fbcd8105dfa31f032d3._comment | 16 + doc/news/version_10.20230926.mdwn | 17 + ..._6edf64272975935ac4874d7e8dd44390._comment | 8 + ..._b1bb446c48a4abc4df73354980f9f7cf._comment | 8 + doc/news/version_10.20231129.mdwn | 22 + doc/news/version_10.20231227.mdwn | 28 + doc/news/version_10.20240129.mdwn | 24 + doc/news/version_10.20240227.mdwn | 16 + doc/not.mdwn | 70 + ..._d8fb9add7e98dadea2a39f8827f75447._comment | 10 + ..._6c23aba5a9c341f2d5e2007e4b43f2ea._comment | 8 + ..._a0ef1a045257659f0f8722e4987e0ccc._comment | 8 + ..._c5c20576388f18daba3af913b44fb001._comment | 8 + ..._837e3699014b73e8f2bd2a668eea9eef._comment | 23 + ..._ac7396ca125abb80a42f9aaaf61a6ab4._comment | 10 + ..._d2ae9613ad81508dbda6ed425d441ccb._comment | 17 + ..._ab41bec1ccc884e71780cb9458439170._comment | 8 + ..._0e19ff7deb5ed65f2bc685d4c516d816._comment | 8 + ..._bab9584c41a25dda934ad230e3eb732d._comment | 8 + ..._b2a0d5a45ab8ddd66c29dde9412d7a12._comment | 51 + ..._f2829ecbe80a61aa9a8411d2403de69e._comment | 14 + ..._547fc59b19ad66d7280c53a7f923ea08._comment | 13 + ..._581e23cca0219711f8a4500a8d5d20fc._comment | 16 + ..._5c61457f117de38ef487e5cc2780d554._comment | 24 + ..._69aa47398a3c13ce64f146de985b727d._comment | 10 + doc/polls.mdwn | 3 + doc/polls/2013.mdwn | 5 + doc/preferred_content.mdwn | 71 + ..._d9eb7d8efe731cbcdb456fc56935d886._comment | 12 + ..._f0bce3c67f293eaba97b92f0942876b6._comment | 8 + ..._fa7249ebbd7d5b499b486311c0a8f96d._comment | 16 + ..._7d45e21dfb016e9ffa4715346dd0c1a6._comment | 19 + ..._1ccd90b009245667ad59f4d29d2a3a37._comment | 8 + ..._384025b5fa23a3f175985a081438149f._comment | 8 + ..._6a9bc657bc7415f0e118357d8c6664c6._comment | 18 + ..._f0a957e67297c4bb5a8778c11b3c9fd4._comment | 9 + ..._b434c0e2aaa132020fd4a01551285376._comment | 12 + ..._c4acaa237bf1a8512c5e8ea4cdbd11b9._comment | 10 + ..._f82538be42428691d7cab60a7add2e74._comment | 13 + doc/preferred_content/standard_groups.mdwn | 133 + ..._026e47e425d06c4b2580238b3187a379._comment | 13 + ..._460bae34ba7c05357318a202b2932d25._comment | 8 + ..._f5cd38886b58917fa3c417861fd10a10._comment | 9 + ..._22434bd01b2b9ce62ddc9fb64b18f8b8._comment | 8 + ..._9288dfe6b89885fe287db27cf941be64._comment | 8 + ..._31fa43557e7585dec5dd105531b0fc10._comment | 18 + ..._258ce07e607fa8eba80d142651393a95._comment | 9 + ..._2d4737488451f1376500098919652808._comment | 11 + doc/privacy.mdwn | 47 + doc/profiling.mdwn | 3 + ..._c1f99493f5e5c362d5c39f048280b11b._comment | 45 + ..._f4d802a28b79905da0cb24af6cb65b0a._comment | 42 + ..._1af4ac0d37c876912678522895c1656b._comment | 61 + ..._1ca8d9765e6e3a18ae09df74bc390a00._comment | 49 + ..._1ca8d9765e6e3a18ae09df74bc390a00._comment | 80 + ..._ca4ac016a0fb0132fc5c746dfb6fefb3._comment | 70 + ..._95f5afb616c7eba60473cdeb85a070b0._comment | 40 + ..._951c1c047ef414268295626218474677._comment | 29 + doc/projects.mdwn | 5 + doc/projects/annextimelog.mdwn | 10 + doc/projects/dandi.mdwn | 26 + ...d_be_taken_as_is_without_obfuscation_.mdwn | 49 + ..._6450f220a0d4252ceafdd82f0cc24486._comment | 42 + ..._f787daed9b02af18b81f033cc2f84d0b._comment | 26 + ..._a1aeed36b8317144bc5df6fe7bcfd488._comment | 18 + ..._a32f922bb12d6cfd96c5116b20cff828._comment | 20 + ..._fad1fe49c2c545aeeb388176d2f5a893._comment | 15 + ...durl_failure_has_empty_error-messages.mdwn | 6 + ..._86b9cb50635c8ef8cf5918ab9a76d013._comment | 16 + ..._2a151ccc0d9ef464df1452adc6ca449a._comment | 8 + ..._1732be4c1d48acefcf3174cf8a7c8434._comment | 8 + ..._74e37e96d01bfb8b9521000d5faa7e53._comment | 14 + ..._1b87390e69204b42878930cc1614437e._comment | 26 + ...ke_git_and_ask_for_credentials_if_404.mdwn | 21 + ..._aa0be7b60156b1b8a036081b36d120e0._comment | 17 + ..._0bbf38af3012493cee0ada5248f32525._comment | 8 + ..._d36533f093ced2a0fa5aa74de492b69f._comment | 22 + ..._7f8537172df5da79bdedd66bdc5cd231._comment | 112 + ..._1993718701b7ad180ec683f80c87003f._comment | 29 + ..._a84145c6537ac1a81db59cdc03bc625d._comment | 8 + ..._3fd3445beec2a6cc6e8c71bd8e90cc83._comment | 11 + ...s__58___init_tests_FAIL_resource_busy.mdwn | 88 + ..._0c17cba36b1feddc956e0075f73536ed._comment | 23 + ..._33143a5f2467c58201496c8f59532b53._comment | 24 + ..._1241df23fa4861554cf9a5d65235c8a1._comment | 50 + ..._8c64d10dbfcd8189465affbf5329c63e._comment | 10 + ...tion_in_git-annex_does_not_try_chunks.mdwn | 28 + ..._5d11bb90105b4d0cf14f85e6d8795023._comment | 26 + ..._f48e4d3571a8fc2b45fbaad7a9f8fb60._comment | 29 + ..._ff3bcc2cce6e0cbbeef10a187541f5d3._comment | 8 + ...-lfs_remote_URL_is_not_recorded__63__.mdwn | 119 + ..._e2bcd52490fc04850738b72255692e32._comment | 24 + ...while_keeping_original_files_in_place.mdwn | 49 + ..._d385d0fffdd6ac18f38828f805e4daff._comment | 13 + ..._0c6006b53f97515c1ed31d8d4ab464cc._comment | 7 + ..._300f74178ef17e2e549fd7a04a262428._comment | 59 + ...1__git_is_not_working_for_unkn_reason.mdwn | 70 + ..._182b9cc42f7287c8b022422404fc74b7._comment | 26 + ..._0baadee49b21451a99a38306a98e3e56._comment | 10 + ..._d51bb87dc5ed0f4ede808c5a9594240d._comment | 13 + ..._ea413a9dec0243688cbfcaf8a5998ac5._comment | 8 + ...ad_downloaded___34__config__34___file.mdwn | 150 + ..._08af564539efb1b0d85905c0aa862c43._comment | 8 + ..._9a63b2918f5621efbfe8cdb33b23ff21._comment | 8 + ..._3df07b6c8ef25ad96ff4f198931347ad._comment | 31 + ..._051d22f0bd0eb601476cd3b74a9b98b8._comment | 10 + ...leeping__hash-object__processes__63__.mdwn | 48 + ..._c01d8d2e4aa2cb0d064ab223e615a75c._comment | 16 + ...tadata_cmd._vs._--json-error-messages.mdwn | 8 + ..._198df45c72d0c9b4997d1342ffb666ca._comment | 13 + ...ource_busy___40__file_is_locked__41__.mdwn | 44 + ..._14d5ba72397406620ac0a9fb05f2862d._comment | 22 + ..._6216c1eb6991cec787333284463fcc9d._comment | 8 + ...34__modified__34___whenever_it_is_not.mdwn | 96 + ..._43f1eec4aa317ff3b1a4fc18def96c6f._comment | 15 + ..._f8a54670d8eaf00624e9b8f85e803864._comment | 11 + ..._5cdddca4ca03216b68d443eeb49af581._comment | 8 + ..._68a79183b04b99d4b00b363e3cbe3f3c._comment | 32 + ..._5c03731700b2a025755fb06c9a96f331._comment | 30 + ..._df08c2530b890544d5eb2df792c8fd4b._comment | 12 + ..._4b8a360c38dfa4c8d22e3a96fbace0e5._comment | 33 + ..._5dead4bf9fe9a9c7627843c91613caf5._comment | 12 + ..._49e075aaa89e60fe1d35513dd4d4d755._comment | 46 + ..._2a08321045a8ede5c3b5a690232020b3._comment | 30 + ..._ac9c166c2b0c3aad8391abb56654ecf2._comment | 29 + ..._7d339e9a04a7c303949523b235a046ec._comment | 10 + ..._48819ddcb8713087c78db8941e4c1151._comment | 33 + ..._3186ec45f20c4d768c7682e1d42fa24c._comment | 58 + ..._927028d040b0e24d772b667324b1a5e1._comment | 9 + ..._64ba2901154b629a9697b427f3ad92e2._comment | 19 + ..._needs_more_depends_-_libgcc-s1__63__.mdwn | 72 + ..._93f4c8f86c58da7988bf1550867f8945._comment | 23 + doc/projects/dandi/done.mdwn | 1 + doc/projects/dandi/potential.mdwn | 5 + doc/projects/datalad.mdwn | 30 + ...debug_is_not_in_effect_if_precedes_-c.mdwn | 69 + ..._0f66414e629e31c2de868f8b7eeb7af5._comment | 24 + ...__58___prop__95__view__95__roundtrips.mdwn | 34 + ..._3a2be0a1cd74c7dba3b07e1300ce2a30._comment | 17 + ..._1945040bcdf209b9a0faecd4a77e0f35._comment | 8 + ..._06dd9606225cf881f7681fc27fb4833d._comment | 42 + ..._0c6b8a3b0a6fbd700b3c8934bfec199f._comment | 19 + ..._c2f248745388b508337c5097baaa1979._comment | 18 + ...d_FS__58___Unable_to_remove_all_write.mdwn | 42 + ..._22a1f4b025a6046e4d11f90590a6e4bd._comment | 34 + ..._71e985981c14780cc172a07beb0e9854._comment | 10 + ..._ac3fe75560c020015ecca615cf0e7abe._comment | 7 + ..._3bdf724f5e9203424b7cb5630fb49a46._comment | 27 + ..._46acb87752c0f0574d8f3b91fdfb1697._comment | 7 + ...2_ssh_connection_prompts_for_password.mdwn | 66 + ..._f78784304b46b77d334f74c827d0889b._comment | 34 + ..._62a5cc7cd6b8b06850fb32b76121ad82._comment | 25 + ..._f621e615a745910b4e28f91b27132c0e._comment | 43 + ..._43e5a90d6215b414f4e3357ea91af663._comment | 21 + ..._27b5669cecba4863ce296049804e82af._comment | 8 + ...expectedly_becomes_annex_pointer_file.mdwn | 79 + ..._ea82bf47752807531870651653160f1c._comment | 97 + ..._27faf0663265bd3855e98f7f1f382bdd._comment | 42 + ..._37fb6d6361068f57c2068270ceb72ac0._comment | 16 + ..._4c3b233aa1c6b0b6c0b0d7519b5877a1._comment | 45 + ..._d1d23d3884fcbef3c8715ebdf8791f01._comment | 58 + ..._b713bf610c4f4d9c2463b61721bce406._comment | 8 + ...l_special_remote_stalls_after_7245a9e.mdwn | 66 + ..._c0a98d1391d4426182d3d43651ad67e5._comment | 27 + ..._952d0856b79cdf1637a84c74f396d9e8._comment | 44 + ..._ed02f45c96f7eedf2c15add673ca84f2._comment | 57 + ..._639337906e441523a610c7080f215aa8._comment | 27 + ..._746ffcf575f91bc3d156b279bcdf8ae2._comment | 20 + ..._e4f249bc78e870c91b3fcbf34596a9ed._comment | 11 + ..._a9b594ecd43c0d2f35029c934ba7e143._comment | 10 + ..._9fdcef0d78d04ce05765693fe296bb3d._comment | 8 + ...es_not_resolve___64__loader__95__path.mdwn | 15 + ..._138124e29ad5a27751fcd133e9dbf6df._comment | 8 + ..._4f68ed79045c93831cb8b41888057f29._comment | 25 + ..._72d271ac0612e13b3ceaf736e9e50fd9._comment | 10 + ..._69ae4b847873d039d790cd2b1cfa97c0._comment | 7 + ..._ca662cade7153349ce644cd93c379815._comment | 19 + ..._c75c9bcbcc8e68c60323dfde9c0248a7._comment | 13 + ...ing_because_MonadFail_is_not_in_scope.mdwn | 31 + ..._3ebe2e53fd8e8ce673267ac2715d964c._comment | 12 + ...ld_failing_on_Windows_since_ef3ab0769.mdwn | 76 + ...ils_on_Windows_as_of_commit_0a9a9c44e.mdwn | 6 + ...ils_on_Windows_as_of_commit_4b1b9d7a8.mdwn | 6 + ...ils_on_Windows_as_of_commit_a706708d1.mdwn | 6 + ...ils_on_Windows_as_of_commit_ddd7d1d11.mdwn | 6 + ...annex.largefiles_leaves_repo_modified.mdwn | 179 + ..._7cd205f8f5560420d117d5a2bde48532._comment | 14 + ..._725d46358366ea79e375fd47beac6acd._comment | 77 + ...with_wanted__61____34__anything__34__.mdwn | 80 + ..._03eebb6527c364552b8f81c12616e926._comment | 21 + ..._fded8e94841cb23a9d2715b00f63ae98._comment | 13 + ...lude_submodules_from_export_to_WEBDAV.mdwn | 37 + ..._43cde828704e54cad344c066ba1e2821._comment | 8 + ..._f1d89a826b5a2847328f6eec36b9f452._comment | 14 + ..._38d687454c618c3321ad6d9b3c4e7a38._comment | 7 + ..._8f31a065f5f97285adeb3f9614c1f3c9._comment | 10 + ...ype___96__Annex.AnnexState__39___..._.mdwn | 59 + ..._special_remote_on_GitLab_not_working.mdwn | 119 + ..._e821d8666ace3a760a2a335220844b29._comment | 56 + ..._3cdbe5b9b7150f9ad9fd5d7af01b247b._comment | 8 + ..._1dcf8d6a37bec46a7e7c2d9a65becf28._comment | 9 + ...es_being_converted_to_git_files__63__.mdwn | 68 + ..._e9f5fdf1078c87718fb6ca2559323b1e._comment | 18 + ..._5d0e1468f7ab2e8cd42452812d9ce49b._comment | 17 + ..._a9837edeacdf55c74d8fed2b8d7bf1f9._comment | 8 + ...rt__96___have_file__58__null_property.mdwn | 26 + ..._bf743f047b8063b8ecbd8c87d12fa475._comment | 12 + ..._d6e28d84238cb79c1df927da491f50db._comment | 8 + ...rtened_output_string__dies_off_with_4.mdwn | 42 + ...tch_for_compilation_errors_on_Windows.mdwn | 38 + ..._eb8d464da14af1fead372b4b61b20f17._comment | 8 + ...O_permissions_are_stalking_me_somehow.mdwn | 58 + ..._9e4ba1e03a89c219c5e62280757311ba._comment | 12 + ...stems___40__Xenial__44___Jessie__41__.mdwn | 167 + ..._d9dc3550012a618ba674119dd1163642._comment | 34 + ..._5dc1d7c54fc4768849d39affac51fcae._comment | 9 + ..._7cb4c4e1bc100e8f3241ece74ce463e3._comment | 8 + ..._a1bce716987b0d8d00a4a9aa07e9ac65._comment | 24 + ..._dd51471ec6a8f380663c62d6f9edb176._comment | 8 + ..._93e2dd2b30cdeddd5e273eae78a422e0._comment | 16 + ..._b2d1550e20e8c4cc07dbd0ebba64c603._comment | 78 + ..._5274e7f715ef060383046e8f5da08164._comment | 58 + ..._8976d014def1910f5140b1e5cdd37fb0._comment | 8 + ..._efccd6c930ea37f782cbd3b029f4fa71._comment | 37 + ..._282d1a5a2942820785b9cdacc1126545._comment | 20 + ..._34d7c2fb1b46f61e348a92f86a3d732c._comment | 29 + ..._279dfc4d611e2dbcb2523b9756f13a9d._comment | 8 + ..._815bf1b8985a49a0fafbcddc7c96f9d6._comment | 55 + ..._6f5e18dec962aba505ed15bed328f11f._comment | 17 + ..._bcc64259541b35eed34a63f4955884e5._comment | 16 + ..._contains_invalid_Windows_paths_again.mdwn | 15 + ...stems___40__Xenial__44___Jessie__41__.mdwn | 115 + ..._ce71734986fe4c86a43a5805628dd3de._comment | 59 + ..._8e7487f2f093e79dcce0be34274d7fa2._comment | 10 + ..._4ddca3bdc573ed3c7f6d846c4309ac2e._comment | 10 + ..._c480f7fad76759742bbdc4837d8c0c36._comment | 31 + ..._8a5b1e1cb4482fb787bde97a6066de59._comment | 8 + ...e_calls_to_git_repeat_--config_values.mdwn | 69 + ...etion_not_synced_from_adjusted_branch.mdwn | 124 + ..._6473d7eceae5141e36c87156044b9d06._comment | 8 + ...ot_propagate_changed_submodule_commit.mdwn | 94 + ..._5b56b989145a8ef6a6203e4df38e2288._comment | 50 + ..._e37aaf6d440b6c2a7567b3df1c344ff7._comment | 13 + ..._9e1cc48bb2125cc8fd375e3ff2f3310f._comment | 8 + .../Syntax_error_in_comit_f29d49d47.mdwn | 31 + .../bugs-done/Tests_failing_on_Windows.mdwn | 149 + ..._69e29a9c9b6690684ce1f4f8df3f3a2a._comment | 170 + ..._e95cf7f151ba51fd4324dc212afd5467._comment | 7 + ...n_v6_without_employing_.gitattributes.mdwn | 111 + ..._5eb0622b326a8094b06f5f0de627e288._comment | 20 + ..._a3b5e2047185bbd3972ada07ddb79172._comment | 31 + ..._db64ae67b8aa974bd6d00aad005058ac._comment | 31 + ..._5f11262639d60ef63a44de09b191e0b6._comment | 21 + ..._cfab68df294195498fe71daa376e9f68._comment | 15 + ..._e42f03c3e880dcd71d57bc2f6292d95d._comment | 9 + ..._045f90b5693de55958c6ad1b825cbc9e._comment | 10 + ..._ead7e348547da0598a82be8d064c0c08._comment | 36 + ..._ff0746f08600fb9729b8e1773317a52d._comment | 9 + ..._598622df322c56da71320d1b15e0348f._comment | 10 + ..._9707d9dda7ebb2c94c71f1ea2f99064d._comment | 8 + ..._56c8ddb604b54b8a5cfd077225971582._comment | 13 + ..._6b2a763f3d07f0cdc035008638e08194._comment | 14 + ..._5aa63bf0d8e4145974702a86b36bd435._comment | 25 + ..._5a22839b8dc11965a879dd2654bd5d60._comment | 76 + ...export_has_wrong_subdirectory_content.mdwn | 58 + ..._0598b1ccc9d7002d6b7fa08f29f8edc9._comment | 14 + ..._03ea7014854be4fa9f40a8815616b81d._comment | 16 + ..._e4b3597a6be74b10f03af3cdbc9ab4b2._comment | 16 + ..._aa11bebaa9ca341434fbc1382bbbbee4._comment | 34 + ..._22290ea94d5e547a199411d696657708._comment | 13 + ..._b6c36a9f466cbd0a09ae83ada7bc728c._comment | 41 + ..._201fb2f59e3143145f9f0b07a5f3ac30._comment | 8 + ..._e1051429a09bf5d7e5887d0eb378d72f._comment | 8 + ..._e50ed095c335c616b8e27fe20dae00d9._comment | 18 + ..._c1f5a71c217b965ece29fe8d9a01e6b2._comment | 10 + ..._b25f2c71675f4d8f6a6e22bb5cd98b23._comment | 7 + ...ToFileAbs__95__basics_started_to_fail.mdwn | 19 + ...ms_that___34__content_is_locked__34__.mdwn | 99 + ..._ddf822288da76a16eaaade2da51c5b43._comment | 16 + ..._00fa93b8a064bd1e6ca6c35b1a10d5aa._comment | 33 + ..._26e80ddbcb3f0c149e6565552558f6c7._comment | 7 + ..._5f9a1e4468a4531a7676d1b749ba0b9e._comment | 8 + ...ial_per-file_cost_for___96__add__96__.mdwn | 62 + ..._4e3cec5a4ce33dadfd0ce7a8d17bfaa0._comment | 12 + ..._f1a92680ab7874aa0c102cbf4b8a445a._comment | 17 + ..._e38a372b6d9f498160369a9c3071939a._comment | 20 + ..._26472db382e75e03cf10c6e5770ef42b._comment | 53 + ..._94d2048dcd33712e08f2206a5182b23f._comment | 18 + ..._0a170534b266ca55afbfcfe191ff18fc._comment | 30 + ..._7db34973cb362bee271545c3c58690b4._comment | 16 + ..._2e8e840cabbc547ef758568bb2779f9a._comment | 10 + ..._c89853eca5c16e9dfa4a4acc982ab526._comment | 14 + ..._8623b98bf21427ae5734d74e2576af5b._comment | 28 + ..._281ded4caa0dd407431b205ce6746c05._comment | 8 + ..._cc08c222cc36e3a0462f370df12eb129._comment | 22 + ..._1c001d885bd4d7f60b3260d494406e5c._comment | 16 + ..._cedee281d3f6f97499e70dacd0560f70._comment | 8 + ..._80c5ec6993e8a720fbd1841fdd21e311._comment | 68 + ..._85f07d906b836ac968ab877258180c0c._comment | 33 + ..._0d2ab75208877136534040b726c7f97b._comment | 62 + ..._891b532bd662b1198351803b82ed634e._comment | 21 + ..._3947b44c88820da49d8a2d1afd3595ff._comment | 12 + ..._1c867ba26de03f921dd347c14b8ec402._comment | 35 + ..._4ee757b45706816c3296dd4b29f05fbf._comment | 69 + ..._b46545c78628379dd50d306c87550b9d._comment | 58 + ..._409a95cb01a4b26d46d7aaff042026a0._comment | 44 + ...ws_build_failing_as_of_commit_cb7bb3e.mdwn | 6 + ...ests_failed__34___on_NFS_lustre_mount.mdwn | 138 + ..._61c1fe6f14a30082a325c0efea9632f6._comment | 20 + ..._541e257ea04d6a7647a337998d79232c._comment | 44 + ..._80b15bc4e0c8c9ed4680da9408c1d559._comment | 12 + ..._8f305fa196210899d2215324849a8fab._comment | 8 + ..._66d72d1d214124eaa57681df21b9b121._comment | 18 + ..._6354d1e144830bea5a0d7872f698ccc0._comment | 8 + ..._945d45b37b0548deacddab19568dd5b3._comment | 8 + ..._4e89c558748c370e8bbb1ef50f4cdcf7._comment | 42 + ..._1c0abfb39eafb73527c99dd56b41c0bd._comment | 19 + ..._ff06b532b0ec6edc17ae26a7a80233af._comment | 15 + ..._86eed28bf04fd293851afcbea5312271._comment | 22 + ..._71f5f1704b97cf4e809a55a71e9da3eb._comment | 14 + ..._78258166fed7a555e59ed2b78143fad1._comment | 8 + ..._1219295230f196c00744058ed3441a98._comment | 66 + ..._640a2685ca0efb7367da6bc502354735._comment | 67 + ...ailed_to_send_content_to_remote__34__.mdwn | 222 + ..._755703a901687283f1a9b3bfcdf1ea68._comment | 8 + ..._539c272450ceb56badde88702afb4e4d._comment | 23 + ..._67567cf57d9b7d57fb5e10ff7a54a99f._comment | 17 + ..._a4643d9f91947714b6105ca81164cb26._comment | 10 + ..._41f1271bdc7a4d62b30f6254a0f6ffd6._comment | 9 + ..._0d6bfbc5539ef2083e0bc2e32762a9c0._comment | 29 + ..._6ef33d110d709e46768549c59b02841a._comment | 16 + ..._7c7b953b2366fbfc1b95cc6048473ddb._comment | 27 + ..._eb8b597167a6708a27ac03ef4fbf3632._comment | 31 + ..._9a1c92462a5393155298d70ef90d3019._comment | 11 + ..._c36b1968c69e9794c723ff29d1738759._comment | 14 + ..._e6ed93310ad694f6c52b52530c63f8f5._comment | 14 + ..._79ccde86a33f486b77857720d97185f3._comment | 16 + ..._4b6cf4221ff9d4f106d595f2897ea85f._comment | 35 + ..._503d0507c55412ca8c625b32feb7f80e._comment | 20 + ..._4345e2d7f30318dc7565e90ac8578086._comment | 19 + ..._5b1148d1d771b71f6af654f974dbf427._comment | 144 + ..._ac650ab647f5fda2623a958b30b40c18._comment | 10 + ..._af8d80956d3ccedfe9aeb0fe22b2592a._comment | 27 + ..._93cb28a06189d349a59d8d79c44d3b51._comment | 15 + ..._d76a32758b58695dcef7d4ec83abb1ea._comment | 8 + ..._40094333a89de09f7e64ca715ba20f16._comment | 11 + ..._4da389b802a114dc18e0264a4df36dee._comment | 16 + ..._c43d7b153cc8b68f31ea007922326ee8._comment | 24 + ...k_error_when_link_is_upstream_of_repo.mdwn | 81 + ..._a2d1112b0a9338b7c093546a985a5f90._comment | 51 + ..._c6e30af134a73bc8b3faee83c7c3b378._comment | 11 + ..._9ac6e3436ab4866993ebf4e469b13636._comment | 12 + ..._efe4490c33e874bd78fd567c70874088._comment | 41 + ...39___failures_introduced_by_75aab72d2.mdwn | 142 + ...__N__39___can_land_on_unsupported_N+1.mdwn | 53 + ..._c67521dc54f12efbbf7e13c828775e30._comment | 23 + ..._d65fc129524c92fa1c783d8dbc516f5f._comment | 8 + ...e_introduced_a___34__regression__34__.mdwn | 62 + ..._0bc5a3d36900d9bd8c978a08383d409d._comment | 10 + ..._ecc658185b485a5ccaf592ab8a255241._comment | 14 + ..._38baec012d7ebc95f92df59c85c6d525._comment | 11 + ..._ee9f695290b1bcaf2c9320d8042047cc._comment | 11 + ..._3fb410419608d725ea15a4849266396e._comment | 8 + ..._2455f440750a285768746e764fbfb9cd._comment | 8 + ..._c8f6ee2cb993b22b2531d1a4b7c3da8e._comment | 12 + ...ce-small_fails_on_modified_submodules.mdwn | 128 + ..._95e4a43684338e28a74b6df8d2e5281a._comment | 14 + ..._annex_into_git_in___39__addurl__39__.mdwn | 42 + ...dd_file_into_git_until_pipe_is_closed.mdwn | 99 + ..._correctly_if_non-annexed_file_exists.mdwn | 22 + ...o_talk_to_ssh_remotes_for_some_reason.mdwn | 22 + ...redownload_even_if_it_already_present.mdwn | 33 + ...-ssh-options_dropped_since_8.20200330.mdwn | 50 + ..._2ba303f406a0be7c3bb4a8466ce4b9c3._comment | 10 + ..._d3fdcfe9e75f2fa6a7c4d12e318455db._comment | 8 + ...t___34__in_effect__34___in_thin_mode_.mdwn | 113 + ..._cc1417bb8173e3b2636d465967a704d9._comment | 9 + ..._60ab40449991dbb3f64d08f01c5458c4._comment | 47 + ..._86e8f44191a004da20db8e97577744a9._comment | 11 + ..._d6039a6d2df740600e98b50fe90fbdfb._comment | 10 + ...ex_add_ignores_.-prefixed_directories.mdwn | 79 + ..._path__95__to__95__repo__34___is_used.mdwn | 84 + ..._b90f22ce0ab931658856e949ac227985._comment | 23 + ...lity_on_a_http_url_redirecting_to_ftp.mdwn | 132 + ...--batch__34__ed_but_not_yet_committed.mdwn | 67 + .../annex_get_-J_16_via_ssh_stalls_.mdwn | 99 + ..._4b053c393627e2efb746a2b81838e518._comment | 21 + ..._e8ff5342533744617248104b04aa227f._comment | 29 + ..._7b5857e8415f386813b1b174e39e899f._comment | 14 + ..._552c0283748b64d84e84f5117f697d3b._comment | 8 + ..._7e3f849312d824cfbd10cce1f024c80b._comment | 8 + ..._666dcda30f5a34588c4357c3fa43e8d8._comment | 66 + ..._39227b7dc49d141556680980aa558318._comment | 55 + ..._c39c3b0978777987dcd8c86906aa6532._comment | 16 + ..._bffd59a35ae162f4141b6de7efcc7422._comment | 11 + ..._b3fc7c5f6acfa23b6bfd0f709d2f6b96._comment | 20 + ..._4916bb94a700e72d42302d2938693daa._comment | 8 + ..._3070880ace124795e07c4f8d1f47e81b._comment | 23 + ..._797c40af56ddb435db3d4affa86d49a2._comment | 8 + ..._35fbdb89eb658439e4125c22a04173a7._comment | 16 + ..._301141057296da0e01fcc622b4f14dcc._comment | 69 + ..._1c96a68c27ba09cd1f8c035dd026582b._comment | 14 + ..._d107200df348bc2b97e2fefc4342e49a._comment | 13 + ..._a3d803f25795365c9651d2ec023d9145._comment | 25 + ..._0f2e6c7dbfbb3007d4e3f7faa63d16b4._comment | 8 + ..._0812ef7942034a4ece952dd8069813a3._comment | 10 + ..._c18ec0797bd55780a0851c3b0c71b184._comment | 8 + ..._8d391bacf291492846d9253057653082._comment | 12 + ..._2bee4762be30b9864083ed1d32fe942e._comment | 9 + ..._6f228fa6770aad308d0f99647ac21347._comment | 26 + ..._3eaebe28f2925cac21a49f30aed3fa3c._comment | 239 + ..._c31884e8d52324c0e04cdbbee42d4d35._comment | 43 + ..._0707380cc043d9bbb84f0232eb1c1322._comment | 105 + ..._f7fd86a45b6d5440cdd0588ebb8753c8._comment | 21 + ..._7eee5a23aa67cb156aa31fe9fd92dd50._comment | 8 + ..._ee7333607930d8e3fbd4cca2b974c55b._comment | 68 + ...should_retry_failed_downloads_from_S3.mdwn | 62 + ..._1cbef11391d23210230872a75f8e5414._comment | 8 + ..._4de90238d57de0d49b75418411135dbc._comment | 18 + ..._5da78a05b781029fa7f0f9d8ead7e093._comment | 61 + ..._b279da2a2db1ba5a24a76a9112e691aa._comment | 11 + ..._089f1d2d7de435a98dc1098ebf1cf3df._comment | 8 + ..._3b840d50a1ecc9cb6e161e3c039fe332._comment | 7 + ..._2c83482ead69a902c99fca3ae63dfc34._comment | 15 + ..._51f6745c4abce7b3cdfcf1c5998f8329._comment | 8 + ..._d8ccfe3fe0d5123c1065ace73b623b44._comment | 20 + ..._df98c47016e79f15218880a009e671ea._comment | 14 + ...re_of_files_added_via_addurls_--batch.mdwn | 46 + ..._4169fceac6ef95400ddc79652558dc13._comment | 20 + ..._c479f19eb55dce35364eea30d0b727b7._comment | 81 + ..._f694e35efa09aa60daf17d63270968af._comment | 17 + ...ctually_update_local_branch__47__tree.mdwn | 117 + ..._6fb5a4fec435eccc0528744c55b7468c._comment | 15 + ...e_to_add___40__null__41___to_database.mdwn | 36 + ..._9c91eef41c51737f85d4df3c737fc6c7._comment | 14 + ..._f6759af83ddd62293593a276e089188d._comment | 8 + ..._798629780fa04dc1a8bf1c21ca813d40._comment | 11 + ..._b7c2abf63c9f350402b3176e028bda03._comment | 21 + ...61__true_seems_to_not_work_any_longer.mdwn | 82 + ..._457027471d09aa4ae8718c1508cfae1d._comment | 27 + ...7__git-annex.desktop_gets_resurrected.mdwn | 13 + ..._020c0c7a51638cf28efc518da4ccdb9d._comment | 13 + ..._0378843b9c7281d587304ac9c42d46f5._comment | 8 + ..._935f2fe1f7ff1a46b1038cd4458317a4._comment | 7 + ..._5bb365e15cd27002b0104d9eb9b5f28d._comment | 13 + ..._operating_on_a_clone_with_submodules.mdwn | 64 + ..._86b409dc4b7824f601deeed0a14cc8e4._comment | 11 + ..._f5bf66e8494b4ee2c6da7f3a6de8da18._comment | 9 + ..._40__e.g._application__47__json__41__.mdwn | 24 + ..._a18cfae149effed2375b3b0be021ac3a._comment | 8 + ..._08448687578634b6281ea285f18d87e7._comment | 23 + ...ead__95__write__95__transferinfo_test.mdwn | 22 + ..._e9db58f71eedc99ccfd7a7a446843316._comment | 31 + ..._make_annex_happy_in_freeze__47__thaw.mdwn | 179 + ..._07ee2e1b3e0bf8959001c22273a71afe._comment | 24 + ..._ad34ddcf5bd0466b66eb1b93f65297fe._comment | 43 + ..._223df2a9cebd99a312537137863b1781._comment | 19 + ..._c78b91393ca917f9d231c39702c70e14._comment | 9 + ..._1bf2ff8d5ddbc8121ea69a5f4042f190._comment | 8 + ..._e12bd42ef9690d3bb74236d55da66bff._comment | 55 + ..._f0a3a944479e52a7789ff9a346001a6d._comment | 10 + ...standalone_git_annex_within_afs_mount.mdwn | 25 + ...ile_status_to_be_committed_to_git_now.mdwn | 73 + ..._ad19d064dd9c175debe647a6928e4f35._comment | 16 + ..._19de1d89dd0a266ce43e0f25cd2b74cd._comment | 12 + ..._92b71940fe9d00bf58ee08b327f4a991._comment | 55 + ..._010b0b10ce6f9cd2b9a3f9847ff2a91a._comment | 10 + ..._8ab0f0852a1dc6c51a502f07faba61eb._comment | 8 + ..._7081b1386ca8807dff79e8613088b619._comment | 17 + ..._d987bcd1f589cd9f19a4df92461f9e1a._comment | 15 + ..._a9100e161d004729db9e3157fcb78343._comment | 18 + ..._220be99862a8a24263bd5f5f27988a1c._comment | 13 + ...ing_pathspec_with_git-commit_leaves_s.mdwn | 119 + ..._a71ce38ec25075ac7037550094da2bf7._comment | 44 + .../change_in_behavior_after_8.20210621.mdwn | 7 + ..._ba8a5b590d2f690bcabeb63c0ef6f46c._comment | 13 + ..._28ea6b8a7addc23f2eaf5626705fc789._comment | 8 + ..._bd3faa20f746fcf4fd99a011b7453b38._comment | 18 + ...j__in_copy_for_--json_--json-progress.mdwn | 19 + ...commit__61__false_as_of_recent_change.mdwn | 95 + ..._793ab4d52a3a4a3a30b0e72b72ac18eb._comment | 18 + ..._1c0e6f07f1da2872455401ac97c4ccc8._comment | 36 + ..._d064cceaaded97ce52169ca176959187._comment | 11 + ..._8209bed5e7c10f74b3ac17c368c92023._comment | 9 + ...t_some_failed_copies_in_--json_output.mdwn | 28 + ..._4ed0e29f0b599135b1b1c9197d58873b._comment | 15 + ..._cae2883d41b495a6722a7039f0ec2726._comment | 45 + ...ks_samples_as_well_as_stock_git__63__.mdwn | 62 + ...stem__58___SQLite3_returned_ErrorBusy.mdwn | 90 + ..._b96755e44bedf262cbb32403f8edaf0b._comment | 21 + ..._9356da08c06aeae254fc84e44b0b3d14._comment | 8 + ..._918ed48f23dfdc1fc95e3df9526b489c._comment | 16 + ..._baafac7f80ff4b7cc4cf078e4ab969c3._comment | 21 + ..._ac112e35d792bdaeff268aae7ef0dc6a._comment | 40 + ..._e1c7bd12aba40c6d9e9c039fa0de8631._comment | 11 + ..._e524de262247edc4c541ce3af92c48e0._comment | 43 + ..._1e0f10f694f7d07c0ab75136daec669c._comment | 20 + ..._bc9b8c1b80a3308c997fdccbf8465f08._comment | 22 + ..._21e8b47c5f100196f3d2062001a484d8._comment | 61 + ..._36f796f2ed8cd91716ee5a083e5a5ace._comment | 19 + ..._0d34bfeab48421e35c6880bca639cbb2._comment | 16 + ..._d0d441c94af2fe63ed1b20fb031181a3._comment | 15 + ..._annex-init_crash_when_remote_name_is.mdwn | 55 + ...es_not_workout_on_unlocked_file__63__.mdwn | 121 + ..._f5f0bb494672fb6b959c2a72a042467d._comment | 29 + ...ption_value_passed_within_arg_for__-c.mdwn | 27 + ...__47__XX__47__YY__47__KEY_dir_behind_.mdwn | 198 + ..._ef17dd348b2404000c29e7b41f1e5253._comment | 26 + ..._51a060d64f2dead1aa030596b0b34bc8._comment | 17 + ..._6c79c41676318bd976eff9988463d167._comment | 13 + ...h_--json_--force_is_always_succesfull.mdwn | 36 + ...s_reports_in_parallel___39__get__39__.mdwn | 25 + ...mote_stuck_with_a_recentish_git-annex.mdwn | 26 + ..._1a3d3ade491f97e68a7bfcd853062875._comment | 8 + ..._d53e63d817a71ae88580c5b08ce28956._comment | 71 + ..._435c4cad7d3837aa09292642b983f041._comment | 14 + ..._afc2af08abebba808886464fbcd0b9d7._comment | 16 + ..._a532adc63a5ad97ab37a0a775cda0d0e._comment | 10 + ..._ba2420e2d8f41dbdafc839246b8362aa._comment | 15 + ..._8768afda308d5afeee2002f53f5cbf2c._comment | 9 + ..._06103ccf5423718b35d35d6b2e4f04d2._comment | 15 + ..._e47d2cae9fa224bef2433eba4d21ec7e._comment | 15 + ..._de71be6bdc853567ad52a05c591b3bb5._comment | 36 + ..._36b91cb600c0a14dedd58e91e97132d5._comment | 100 + ..._2a15295f0a6f907d684ca5a7134619ac._comment | 15 + ..._e7a571699a2e564bb8364e353d9a1245._comment | 9 + ..._362351708d543f1d219dfcf8d71b5a14._comment | 32 + ..._1fbf8751d378f4e838e7f5ba6b43a6ca._comment | 13 + ..._03d750b6461b965b33e1e4bed1242658._comment | 10 + ..._3f8ca763326523a79184192332107879._comment | 14 + ..._be_treated_as_crippled_already__63__.mdwn | 98 + ..._a3111068628efcfe8c5dbbe653805481._comment | 26 + ...nvalid_object__while_setting_metadata.mdwn | 28 + ..._d027727bb0063e82ef9f92c8558e191d._comment | 8 + ..._e7d11326148bf27a0233d36e26e08e6a._comment | 12 + ..._3ef1310132adf09cd426e49c93503a88._comment | 23 + ...son_record_with_--json-error-messages.mdwn | 29 + ...S3__58___transfer_already_in_progress.mdwn | 98 + ..._f81e00b5293f2df894dc3cd1678530c1._comment | 16 + ..._0efd2da2e467c0607d1903ada98a3f20._comment | 8 + ...import_fails_on_crippled_FS_on_ubuntu.mdwn | 30 + ..._fcf8372714c74e5001b5a18c7100c7a1._comment | 18 + ..._1fb916ff03e0b8c96c554caf1558ecab._comment | 15 + ..._18d4577c331bceceaffed7518902975a._comment | 8 + ..._d949841feb6a035e20a3d0f31634d388._comment | 30 + ...t_where_versioning_info_was_forgotten.mdwn | 95 + ..._917b46d9ca69c4e8181d041d5414d373._comment | 22 + ..._363c4a87018de7be3286d88d0d5f8ebf._comment | 231 + ..._1fd43cf6dd14f50ef8087f0b22ad640f._comment | 8 + ..._4a4d5b62af4a42ab9072ccaa6d8bed7d._comment | 18 + ..._6c1e74df4c7e566c4c1ba43fbbbd3beb._comment | 14 + ..._http_while_wget_fetches_it_just_fine.mdwn | 52 + ..._fa6649208f1882a6bb412ba40cf57fec._comment | 25 + ...ch_reports_files_that_have_no_content.mdwn | 68 + ...s_with_--__123__un__44____125__locked.mdwn | 84 + ..._d0dcd56a0af59bb53092c518a4e3eefd._comment | 21 + ..._3f1980c96f795c30886b3decba69819d._comment | 10 + ..._5299bafc9ae75788d2e7e9aa7f48d00e._comment | 8 + ..._b68abf3a46bf0137c02e439c58ce0014._comment | 12 + ...34__trust__58____34___-_trust_failed_.mdwn | 17 + ...e_directories_for_pointer_files__63__.mdwn | 96 + ...7__fix_some_key_directories_correctly.mdwn | 46 + ..._1d627cb46d9ecdf0b526a9c8e9764011._comment | 8 + ..._eb7c6445b1ca53d5552506d8ae93b5d4._comment | 8 + ..._c7d43b06f88d2000fcf574ebab971ae1._comment | 8 + ..._9d7c83cfb6154bdfc51caae00da4c4b7._comment | 38 + ..._09bb754f4e7e19cd52d68f91368f57fc._comment | 12 + ..._3cba6bde1e5c1e978519672bf4c2d33f._comment | 11 + ...get_works___40__with_https_urls__41__.mdwn | 55 + ..._a9aee679a5069dc8ee8960e975bf020b._comment | 27 + ..._f1e97aa8b9927c01e3365b940061d3c2._comment | 10 + ...___getFileStatus__58___does_not_exist.mdwn | 22 + ..._83448258af56b5872a9530cf60c72eb0._comment | 20 + ..._92dec3e0c31ffbef1a70ea3038ba6ca1._comment | 7 + ..._ab590b41983d84c8fe7d5dc7276689b8._comment | 8 + .../bugs-done/get_-J8_resource_exhausted.mdwn | 54 + ..._61622483d4f1962f191fb6a791c6817d._comment | 15 + ..._ccc6f5f1ac5743b0857f68cf21eaa6ea._comment | 7 + ..._5f9e9600d65c1270b479cc8910d507d0._comment | 26 + ..._54cf519a09cfaa0c85d60734daf58d72._comment | 26 + ..._132ea480f90af577e3cad67f2f01c73d._comment | 8 + ..._06e99c29eaa770ab96ea5fd832ee04b8._comment | 55 + ..._0e7b492da14e067c34693b7be02e6864._comment | 14 + ..._db1ae584fc803c0dbb48c7e31a540c4e._comment | 21 + ..._f584dc15789b371569e1925c4ee5ae36._comment | 127 + ..._83eccac19016c971f1b799d935a4c0bb._comment | 8 + ..._5db907d77c5f5490c1bdc8e51387a9e9._comment | 27 + ...lready_in_progress_..._for_some_files.mdwn | 33 + ..._57844bc289adacc6a53162cd224e6df3._comment | 8 + ..._ea5d3efc56b70de03a5b0b5e908bf11f._comment | 8 + ..._ed5fa01a2263ebb4a24bfe0e46ee820f._comment | 8 + ..._5964e40963325975e5de37506a2852ca._comment | 11 + ..._64705f2eddbb6fcb55edc797bbd3b22c._comment | 36 + ..._e51841ae57dd9d2f48cd21fbdb90ac29._comment | 8 + ..._2f7f87db7ca4d379d439ab88bdeee5b5._comment | 9 + ..._36bcdc23439c4f19c5aaedff85213db0._comment | 10 + ..._7ce83c16509bd42b2460ce59470f70c0._comment | 8 + ...__34___to_get_files_with_the_same_key.mdwn | 53 + ..._5b3879d1bb992ddf2aafa3fcb41b968f._comment | 19 + ..._af7078b291d99569070f6a76579787aa._comment | 10 + ..._86e1be495262a7f57428e92eb27a559f._comment | 47 + ..._3428942e9b52091b2297cd9823f17219._comment | 8 + ..._525ac8695b6253fc435112f336238c41._comment | 8 + ..._5f2ed95bcad2e3d1c4260d1fb0440052._comment | 19 + ...ed_with_password-based_authentication.mdwn | 44 + ..._236d2b897a550e7db4b266814d4e778d._comment | 25 + ..._c877de08f959dee4ace34e66f42c8615._comment | 21 + ..._daac1d424bc9e5b56772fa49707bc5a5._comment | 7 + ..._05bf20db275b911e2d89311182f289f6._comment | 7 + ..._b094509fe0194313666b5b1db0a68156._comment | 14 + ..._f5fe8d4cecfceec5cb4a03dd054d2e0a._comment | 42 + ..._0118a107147f6b94a7da907e599e58db._comment | 15 + ..._5da63cf5fa93120c85b98077fba51488._comment | 11 + ...tries_to_lock_in_home_directory__63__.mdwn | 50 + ..._362a858ce78fa0b8d7949fb39fb247d9._comment | 8 + ..._3f985fc652c9a15b5989cc82cb5da1ad._comment | 29 + ...nly_in_--debug__41___with_rsync_error.mdwn | 83 + ..._d30e7f8eecfb73f2f97ec87285966f21._comment | 10 + ..._6ec6e02bfb94b27b8da1ed68e4f9f121._comment | 8 + ...____41___-_lack_of_further_debug_info.mdwn | 94 + ...y_explicitly___34__annex_init__34__ed.mdwn | 78 + ..._dee4b1e8c5cc15a5d362df3b97a886a8._comment | 8 + ..._16bf63e639626f5dfedd6f3809216747._comment | 9 + ..._3b3dc5b946e405955b68b0c4c3d7df3d._comment | 47 + ..._91cdb022987aa3a8852a82ace092a929._comment | 10 + ..._b2c7517a7482071111514a68c70ce8dc._comment | 22 + ..._76433ca072233f8cd24600d3e45f97c5._comment | 9 + ..._21dbdbf7e4e889dc7c2475a0b9d4c5d7._comment | 7 + ...__58___hClose__58___resource_vanished.mdwn | 69 + ..._dd7883772bb37fa85aa1332633184071._comment | 18 + ..._375e6d23c43a2cc0ef8bb81b06c3bcc9._comment | 47 + ..._032dfcb0dc7e5c54a0cbc6634ad77268._comment | 8 + ..._1c079d165831b790676dc6bec0549773._comment | 21 + ..._d83330ad40f4f2c2c55f29acf6680620._comment | 8 + ..._129a1946d7c76b89ae2f45b8a804959f._comment | 10 + ..._1713d56b81db533db4532f2a79250c87._comment | 21 + ..._a14f999b63905c1f29999bd68ded42f2._comment | 16 + ..._31ecf1c31511e6454a274e3c9a9bef75._comment | 26 + ..._3aecc3467427b4ebecbd53012e111004._comment | 42 + ..._dfb1b7ee4e674cf18d6f41e4f4b6c879._comment | 21 + ..._trying_to_move_under_NFS_and_pidlock.mdwn | 43 + ..._d44de6a250694b25ce9c3169d62db8d1._comment | 20 + ..._56ae0f15bbdea2331df3b261b74d0b0b._comment | 7 + ..._d499a2f44e8ee2f39ee959f4d6373570._comment | 13 + ..._05687dca2462eb79872879bd7695d665._comment | 51 + ..._cb1df663b03f3ce9cb27e311e5a70198._comment | 15 + ..._a98a54c04fa4e81f35fe958e746d61cb._comment | 7 + ..._18169e7bbd2caba5ee4bb0286961ac95._comment | 10 + ..._e3b623ff6714a9fe5fa0d332c72fe32f._comment | 9 + ..._58eebd8cfd664b32ef6fd0ddc34c5e86._comment | 9 + ..._e5e24428ac02b78d38cd4f197ae3807b._comment | 31 + ..._01dc7a1ff67783ce672d72cefe7b4bb5._comment | 7 + ..._458518805b8d6613930b38b9ccc3c1bc._comment | 7 + ..._853bc273b19bd6d84ca8f5da6c3dfb56._comment | 20 + ..._86656a409ab25c7fa24de8ac3e68b254._comment | 7 + ..._createDirectory__58___does_not_exist.mdwn | 35 + ..._88439da4b9df6e07aa0300700b66d910._comment | 9 + ..._020d7c6292c2a8238a5ec891fba9eddd._comment | 17 + ..._f533ffdb2b37f98094fc7633cd686e5c._comment | 8 + ..._301ac4a37a0f2da6b9c394509a369484._comment | 26 + ..._f2a25cca5d72ce1dcecf36c2780abec2._comment | 14 + ..._b8f96a403990a125bf181f0ce8bea44e._comment | 72 + ..._2899ef72aa2a5488eb945d14f7a2d76e._comment | 18 + ...-annex_looses_itself_on_Windows__63__.mdwn | 43 + ..._e809445ff0109d8aa98093b024b3b35c._comment | 24 + ...vides_remote_name_with_GETCONFIG_name.mdwn | 21 + ..._005fd5bb4e8a025f1b15c7bf5f22d2c5._comment | 14 + ...igration_of_a_file_to_another_backend.mdwn | 61 + ...austed___40__No_locks_available__41__.mdwn | 49 + ..._6c595bec40f6bf470e9170c8ae4bb573._comment | 14 + ..._4c2e143b8b3283734963e0a6e68755ac._comment | 10 + ..._dac1401bd3661397a9388a5b6ce673a5._comment | 14 + ...leanup_commits_--_really_needed__63__.mdwn | 62 + ..._7bc271ddeafc92d36d2b90fcb1481891._comment | 21 + ..._d0a7283aac4f3c231e20ab284a1f2253._comment | 8 + ...le_instance_of_a_special_remote__63__.mdwn | 41 + ..._447c9cf5e9e137238fb2c662a54ee2d7._comment | 19 + ..._8432a49e6af69efbfcb4d615e147f873._comment | 38 + ..._f66844b716e48c5befbe99346e940962._comment | 10 + ..._e90ba33f7506745582d18841ae9a9531._comment | 13 + ..._098b2e2c51f70d495fe1587220173f55._comment | 30 + ..._306afca0827aabc092fd99e56a5b658c._comment | 28 + ..._987b2c1de4638e01c4f4feb028d47b88._comment | 8 + ..._d0d8a729badb551bb8d0f77e7104c159._comment | 15 + ..._7159b17d64ee147822969d79d5a1c48c._comment | 15 + ..._39__.panfs__42____39___being_created.mdwn | 41 + ..._833cf2db9881a401a3d5db6d4f3c450a._comment | 19 + ..._ae3d42be1a15dda2cfe97c99248ceacb._comment | 7 + ..._bea29c2596ddcc7f8cd7f02ff7bfd9ef._comment | 14 + ...ible_to_login_to_the_website_at_times.mdwn | 14 + ..._a5824d9099dc4035e09086166b13f133._comment | 8 + ..._fceb64e98fb7566f7cb999e9b37914f5._comment | 9 + ..._49b8cf8de638190b3b29ffdca3fe0bdd._comment | 8 + ..._dc940fed174b32dfdb4b4ff8c10529f0._comment | 8 + ..._c76fddc3aab4d3580c79f105c97d6998._comment | 14 + ..._annex_info_without_write_permissions.mdwn | 23 + ..._8b60c52d8fe41718377d6d15a25cae97._comment | 20 + ..._066d2f95ffab1b36b69aa84643d67765._comment | 8 + ..._05f7eec04634e5b4e200cf3dca1bb1b1._comment | 33 + ..._705616c61fe7a0779df3794fa8a1d6dc._comment | 8 + ...ot_forbids_reliable_parsing_of_output.mdwn | 25 + ...ackend_usage_stats_as_a_list_of_lists.mdwn | 35 + ...ax_warnings_in_diff_driver_on_Windows.mdwn | 125 + ..._65fda26959f82d1f3d110e72d7aaec9a._comment | 13 + ..._61__git_fresh___34__regression__34__.mdwn | 22 + ..._54456b2ce0964933db23257149b5a651._comment | 8 + ..._23398e5403c3a9f40d3b544139ee9915._comment | 45 + ..._7fd5d3decc2d6b40d6d2f2d7e6dcabdd._comment | 8 + ..._307e7328ca24ff386e0dd734b9ff103e._comment | 24 + ..._e9800d53c4f88d1555aad2e0e945b40b._comment | 12 + ...___34__debug__34___messages_to_stdout.mdwn | 42 + ..._fc8fa8020a9e542d90dd459799d6ec6e._comment | 9 + ..._dac0fc9914eff0e187d4cfe3c21348bc._comment | 9 + ...ynopsis_for_git-annex-checkpresentkey.mdwn | 19 + ...ches__61__false_-_automate_and_extend.mdwn | 31 + ..._d2242b526c7cce1084bbb63ef2bfe06a._comment | 8 + ..._c3fbb6eb15a510ae9b1af13cd7df028a._comment | 29 + ..._c33bf0bdf6bf85e4ee9e1286208c0b73._comment | 21 + ..._4c957c33a1c8dc179e0e6cd67a5a29d9._comment | 10 + ..._497bbe4e351a66731c920ca5a2048c92._comment | 9 + ..._53c317adf0ef48d9ba4af0571f9ded3f._comment | 36 + ..._7fac2098e6d7cce997a540592e20c97a._comment | 41 + ..._05e4e6936d7b87cb21e312a7aa1731eb._comment | 8 + ..._ccb6c9756a2fcf75be8049d89731a5bf._comment | 52 + ..._49cda6f52fa4fb527b392f6ee6bae078._comment | 17 + ...adata_--remove_stalls_as_of_88a7fb5cb.mdwn | 54 + ..._5a7d8371910b27a82e479bdf3bb63d8f._comment | 10 + ..._bdc4f86afd827beb20b3d888d96aefe9._comment | 8 + ..._d3c6aa8c91630d4bb40b3267bfdebfbf._comment | 8 + ...annex_status_output_of_the_added_file.mdwn | 84 + ..._4d7eb95c73eceb079a176db1957df25e._comment | 13 + ..._ef55541955a6a8840a63309aa403ecae._comment | 9 + ...if_other_special_remotes_provide_them.mdwn | 94 + ..._for___34__find_..._nonexisting__34__.mdwn | 24 + ..._ac192db19137f8b65a13a2c3f7f454a9._comment | 13 + ..._88d08c4b269c075e0724fa1bce70f671._comment | 11 + ..._28060f4bb31730e3334cf3db56fc032b._comment | 30 + ...1___cp_from_coreutils_lacks_--reflink.mdwn | 45 + ..._53714ec51d6ae4769f6c4dd9ee46ebae._comment | 25 + ..._44965e93c65148f06bf4fe4cad95993c._comment | 28 + ..._4a704f47a709a9de35358d6d2fb9fe20._comment | 8 + ..._fea65a7f0218ccf27446ee7ce6fc017e._comment | 24 + ..._c2d4485b2a49ada5ab5266e30df91b0b._comment | 17 + ..._94d4cc9baf46fbc09c21abd08b441b0c._comment | 9 + ..._db5de257e8cfb468bf31d46065b7d251._comment | 14 + ..._644826ed86849eb4babf37bea3937a7c._comment | 8 + ..._dd50ae03bc9a71e04528ac793e79a8b2._comment | 15 + ..._552e36f88bc39bc68b65ccba06002082._comment | 26 + ...r__44___ignores_--json-error-messages.mdwn | 60 + ..._a7ad806ceb76f13ff8fdcce62bc0ed8a._comment | 17 + ..._495820d777c889f88466d725c11895f9._comment | 7 + ...ome_downloads_and_require_re-getting_.mdwn | 34 + ..._1173126bd91dcb7fd13c57f06fd16c2b._comment | 14 + ..._2ba8101ed0e91df7079744d1b37779fd._comment | 51 + ..._6674e4dbc7437ce941bcef6272c3433b._comment | 40 + ..._480df575c68bfb37b8bb4fb43737726f._comment | 29 + ..._03e474b00b1cb2a5b8244d9161857b9b._comment | 15 + ...ed_indefinitely_in_an_STM_transaction.mdwn | 73 + ..._46420a92dbd8655af9b16349da24d0fc._comment | 20 + ..._b1f4dc12ad00a4aa73e5bdc7c0a8f489._comment | 83 + ..._d8ba7cc5a860e9ccaab32c637cc2a7cd._comment | 17 + ..._eecaa7f7b0279c56902c90ed58d1444f._comment | 83 + ..._052acf169f9c2b8b0233adddabb02559._comment | 25 + ..._880c962d5ca77c494c984e7f74725265._comment | 10 + ..._e33df0ec76069deb069b94c944d62c76._comment | 69 + ...ne__41___marks_remote_as_annex-ignore.mdwn | 30 + ...AWS_creds_ruins_access_to_public_urls.mdwn | 87 + ..._9222f76d21e8260327b4f127cc90782d._comment | 25 + ..._9e694fdee4a40581a86d21b962f99f25._comment | 16 + ..._79626c62d4ce8be2524f9ef3a1351363._comment | 10 + ..._40d710dd89b305a64ff8df5d238778e8._comment | 12 + ...nt_silent_data_loss_on_unlocked_files.mdwn | 76 + ..._9b101babc7cb9e697a6195366d4a0a67._comment | 35 + ..._9bfcb8386d5589623423f4d3f040df3c._comment | 14 + ..._704ecfd2888a8153eaa5e4a8e6e3d011._comment | 14 + ..._3291fcd5100fda8d41fb8714cec15b30._comment | 30 + ..._adb69305a31cf55ff62497b6de8e2f6a._comment | 10 + ...e_fails_with_external_backend_changes.mdwn | 37 + ..._7f23940cfa4451e4cd7137e2d7a46d86._comment | 16 + ...__95__basics_fail_on_crippled___126__.mdwn | 18 + ..._23bf4756af808d1b2cf89f7da119031f._comment | 11 + ..._63d3ff9c10ef530d318653bfadccab22._comment | 16 + ..._e8432845460fd0598f8fea5d00c70993._comment | 9 + ...1_wo_--debug__44___and_1_with_--debug.mdwn | 106 + ..._3c2578d17ce519f80aa278a546df29cf._comment | 24 + ...__prefix_for___34__regular__34___urls.mdwn | 32 + ..._56cd6e167c86f4419ac0971922f2e5d1._comment | 8 + ..._1cebe1385d2b8a244afc259a78f72ada._comment | 6 + ..._ca0bf1079acc89a4a79e55f8f58403c0._comment | 26 + ..._f05e1047c5d22dddba21a9faa3397f0d._comment | 8 + ..._811ba6ec07f6f30c701201178cdb00ac._comment | 9 + ..._2cd156baab77dc3b3c248a2368b59040._comment | 105 + ..._9f3f7c04524063960f1451c90948a41f._comment | 33 + ..._55b111079ecb9732a42d3486160e77b5._comment | 9 + ...___annex_add_of_moved_file_errors_out.mdwn | 48 + ...__39__add_.__39___if_file_was_renamed.mdwn | 51 + ..._bd132d7cfa21b2ea3236b76dffaff156._comment | 8 + ..._bceb84ed261a160c4041c146372fc551._comment | 11 + ..._index.lck_in_shared-group_is_not_g+w.mdwn | 68 + ..._7f25fd487c60f8b6fcaddd1444d898af._comment | 7 + ..._92c7a561537e0c6628f30be233b9d7f6._comment | 23 + ..._621beade26a1dbbdea000ca43d93a325._comment | 14 + ..._3b19a1d3e0e13e407af476b54b725bd1._comment | 14 + ..._0655ad5ece1ccd1892ea217aac493594._comment | 8 + ..._9dce3bf28e416dbcc08b314dbc08c8a4._comment | 8 + ...-g908476a9b-1__126__ndall+1_some_time.mdwn | 79 + ..._1735409e62ce82f7ba7258b0167fda06._comment | 8 + ...ent_failure_with_absolute_path_to_poi.mdwn | 43 + ..._10590563da0f80fa8326a90977966509._comment | 37 + ..._1b9b2ebc78949c7b39a255c291d11891._comment | 7 + ..._0ec752dbe8ef55a9884c1c5e83887505._comment | 8 + ...to_have_copied_files_appear_correctly.mdwn | 48 + ...ch__a_file_which_is_.gitignore__39__d.mdwn | 37 + .../return_--backend_for_addurl___63___.mdwn | 29 + ...ME_does_not_exit_cleanly__58___gpgtmp.mdwn | 27 + ..._84a2d253843903f9811652b78d0fa7ba._comment | 25 + ..._key_to_another_during_rename_of_file.mdwn | 50 + ..._cd7043b66977b2a668bbd52f4d8e31ff._comment | 21 + ..._e5b43f5733181fba9f79ae0035b354ef._comment | 10 + ..._10d6135ad4b0c9706ff7b932323118d3._comment | 21 + ..._fda77062452ac619a23298007bc0148a._comment | 10 + ..._fa6d5d0afdc00824da0e04d9bf23d6f4._comment | 20 + ...x__39__ed_files_to_be_writeable__33__.mdwn | 32 + ..._2e61ccc41839b8da70ad26d31e40ad74._comment | 25 + ..._e9af4784ffb84b49b6faaa21aa7c8efc._comment | 29 + ..._fc10e403f35f47a6c4464f3f68d01eca._comment | 36 + ..._43a09de767ed9060dd91d6eca5e0b3a3._comment | 8 + ..._df04a6bd62a60789d8a59cce4b62728e._comment | 22 + ..._0619eec44cddf3d3b1aae27c7bd1389a._comment | 22 + ..._aae8dd8b3b0ce4647ec2d30e1d682339._comment | 22 + ..._c72e6646e39cc487ea52cd17925a548f._comment | 8 + ..._d8c8b725ee91a899a131bf505bd9a2e3._comment | 20 + ..._d0d8065b78c22e62ef780c27e4d5952c._comment | 10 + ..._a82064795fdbdb0187763aeee4a308ff._comment | 9 + ..._c3d447a8f4e63f6a28a02ccb4eed1ad4._comment | 9 + ..._f74642e1dfc4e533b9582e5a13a16898._comment | 41 + ..._entire_name_to_be_an_extension__63__.mdwn | 63 + ...p_permissions_of_the_ssh_remote__63__.mdwn | 15 + ..._35eeb15c0031c18ba6d0922bb7ae8ed3._comment | 89 + ..._65232a9c2bbba075d325ce00b7c5e13f._comment | 7 + ...erformance_regression_impacting_datal.mdwn | 19 + ..._37d5186dfa2da31526c4eafbbbfdbc33._comment | 14 + ..._51a3a86a290b0e3994507f3f64e7c72a._comment | 28 + ..._c841c9db2000c65c56ce8e26e58a3f62._comment | 153 + ..._f6bec279f43603719694e44d99309fc7._comment | 8 + ..._4d2998ea843dd8adee8b7b066d97d942._comment | 28 + ..._c9488d6180e741dfec0793f546c9eb29._comment | 10 + ..._65aaf8e15cd15187cd63863634f25091._comment | 33 + ..._045fd8ebe1f9441e42c9c6fbf5c06563._comment | 93 + ..._8df0e346ed85e52ec94763d11c174ab3._comment | 12 + ..._3e57d7d4640de95a059b2ab3d1e9d54e._comment | 8 + ..._80372cd15a6a8812072a446c41fed4e7._comment | 8 + ..._3eb1b092f41dc5c04d74f7a03249aa0f._comment | 10 + ..._0119751108d8d9fe6848269594bec273._comment | 104 + ..._192f2055345f1156a06d93b4c25e6722._comment | 16 + ..._8693e7e9c800f25cbd274b6781d834d6._comment | 31 + ..._6d11f6aa4b1a435bdf6d165eb8e6db8a._comment | 17 + ..._5525b58ec94084a926c71f749d1f4233._comment | 8 + ..._cb64b1798af6ad507ce4a4196e9c5b1d._comment | 16 + ..._db91e10d0bea246686ba2241b348e67d._comment | 8 + ..._0d6a37f823cd9cb3ed1e6e90066ebd2c._comment | 9 + ..._0f3c8949ae362b43ac7db02eb4e11890._comment | 13 + ..._521f784d686fcaeb5e081599fbdf9903._comment | 12 + ..._386c0cfe688effb1543ffd01a54717e0._comment | 10 + ..._97fa9b7729805704a6a22cf18082e203._comment | 7 + ..._0ab5e774dad1e6e74a5c72b95e40d659._comment | 35 + ..._6e5121e066998a303cf68ebc53e9fc15._comment | 23 + ..._86d07025980e0b50d1a52f73c049944a._comment | 8 + ..._d3437076c759eedc0c8d5d15db035455._comment | 9 + ..._25fa8b726e06dc69e3a0d9ed675da1d1._comment | 28 + ..._d30a515103d04fd966aadee7f141aeee._comment | 13 + ..._4011786784a140442dd7ecd1cefe559b._comment | 11 + ..._85d1031d2b51c0fc1271c283d8ee7888._comment | 14 + ..._b0f1e94e96cf8fe992425cf81f8d1105._comment | 9 + ..._35217e61ccf6936e105df8de7e1775d0._comment | 16 + ..._29bde900ef625702b49cf020118f940f._comment | 16 + ..._431582f1c218f27e50849df1444dc845._comment | 33 + ...n-error-messages_--batch__do_not_quit.mdwn | 128 + ..._4123b5b93a220c1ba46126a5d97b6ff9._comment | 34 + ..._7d37b8d79fcb6a0edd99e0bd6f2b0515._comment | 16 + ..._7ec51c8996c7cc4b555313e84634e406._comment | 26 + ..._7bd5a28d5ba1eefd5a96483b5f00a89e._comment | 10 + ..._3c407c1924e21aa1ec300875680dc3b3._comment | 19 + ..._58997665e5aa0a237a3ec90efca92891._comment | 14 + ...41___regularly_fail_starting_recently.mdwn | 36 + ..._d4c417df9a8e6c13c06ccfc21853de02._comment | 18 + ..._16a96277aecccfa32cd918ac662ce6f8._comment | 14 + ...me_tests_fail_while_running_under_NFS.mdwn | 57 + ..._8e0f72f633ec79bd373b009046ab66b7._comment | 8 + ..._ee9cc13cf34432be00a906bf65cebafd._comment | 10 + ...over_ssh__47__rsync_and_require_retry.mdwn | 35 + ..._b762aa4a31f2153c00988d185ce5efbe._comment | 10 + ..._7d5c57bf17659769d9cf4d56774ba67e._comment | 36 + ..._8a5ceb261338ab55b5c8c2daa56d04ce._comment | 9 + ..._bedf66f7257511d1d245ff0c6bcfe5f6._comment | 13 + ..._63____41___fail_of_crypto_test__63__.mdwn | 38 + ..._9909507b034e25db04e5407717fab315._comment | 14 + ..._a254c4de61a74bf314eb33e301c199f0._comment | 26 + ..._89e9d65073a58188024290a2b32fda2e._comment | 22 + ...ndalone_build_is_slightly_out_of_date.mdwn | 48 + ..._349f2d8f6ef0fddcfe576fc08b3cccb6._comment | 15 + ...h_with_helpers_merely_upon_annex_init.mdwn | 19 + ...t-annex__47__locales__47____96___dirs.mdwn | 36 + ..._343ac13424b0b65db2094c595bcabd7f._comment | 10 + ..._c43bb7ffa7b900f5824b4495a6a82d0e._comment | 9 + ..._57681d5959095d9a3e6ea9e4d0679c85._comment | 19 + ..._5c2c6003b45d78b9e0bee95f5a12c48c._comment | 38 + ..._57834ef04f206e1b351b36ba32ce447f._comment | 12 + ..._9ee31c8d92178b38bbc920df395ee284._comment | 8 + ..._2abc6e368033bc636debbcd83dd2b4ed._comment | 11 + ..._IFS__61____36____39____92__013__39__.mdwn | 28 + ..._ab8017246c0075b731c7d31235672c01._comment | 66 + ..._2b7afff24ba025fe3e272ff6f607eadf._comment | 10 + ..._ba1b34111d47d58517ea64f537214e98._comment | 9 + ..._297b462c0344b8c7e5e113fdda3642f4._comment | 8 + ...n_already_present_failures_on_Windows.mdwn | 19 + ..._7e089c436af03ffd8ad00dba45156a14._comment | 26 + ..._07f7881be6b0d29cdf64a7839b669b3e._comment | 8 + ..._c570246b0484ed3694efff62feff968c._comment | 11 + ..._2f701f39286c3a75a88407dcc6947081._comment | 8 + ..._096b3af691987ef20281c87519a31935._comment | 8 + ...__from_extensions_in_E_backends__63__.mdwn | 18 + ...l_on_windows__58___permission_denied_.mdwn | 32 + ..._9f46a99e5f570de2313a5521b58640b3._comment | 78 + ...any_instances_of_the_externals_remote.mdwn | 221 + ..._6c4afa18ad31f46ff8c0b827415373e4._comment | 23 + ..._daa09ac406dea6cd3ab74fe19d89d956._comment | 21 + ...mote_failures_starting_with_aeca7c220.mdwn | 83 + ..._d779827a6cc3d3d7bb6edfa410170e09._comment | 13 + ..._4cfb0979773618a0bc18d52bf0f274e4._comment | 11 + ..._d53b98bca623d4d25bab58563e7577b3._comment | 22 + ..._a80f9277eb6f6c49710d5008bc2c2c42._comment | 9 + ...emote_hangs_after_asyncexternal_merge.mdwn | 60 + ..._854aecbc440dc3a5aa15f9de5f36c9e8._comment | 9 + ...ng_build_inside_singularity_container.mdwn | 45 + ..._d36c27dca4d266d1e6639e3435198016._comment | 35 + ..._c61b14b76cf06c0b10257c1a84d9478a._comment | 17 + ..._ea210a22073919be434884f006212e6a._comment | 23 + ..._0cfd7d0d93d0747d42d20f13b788fe43._comment | 16 + ..._944a4474401b2fa0b4f3631bac63a07d._comment | 10 + ..._fa8c65c2223d2be21aa95e5889c1f352._comment | 30 + ..._d358bf55d89f5d0609d792a26757d0f4._comment | 11 + .../bugs-done/tests_fail_on_Linux_build.mdwn | 27 + ..._9932a7c60bb369fbffba52092e03bce3._comment | 26 + ..._c042d95b58500933e5932176037ead8f._comment | 8 + ...n__while_moving_within__a_local_clone.mdwn | 41 + ...ddurl_--fast___40__or_--relaxed__41__.mdwn | 30 + ...t_content_via_ssh_without_write_perms.mdwn | 76 + ..._2562d33a1cafb01b2cddb9a42a635616._comment | 8 + ..._8b4fd2331ff62c984f91a9536a3a7e2b._comment | 16 + ..._3889b10d60b007de72b3af87e920e74e._comment | 9 + ..._a4f9bb23f0682a66e951b96aed6ae214._comment | 20 + ..._1b01ff1b092976af137bdfc2c9e28fba._comment | 8 + ..._9e4b82d27ddbb42d74f10a85635590e7._comment | 49 + ..._11cb8251521014ef81b53090f5c78376._comment | 14 + ..._ba7e53135285dbf198f5aa12d7edc1cd._comment | 22 + ..._95ff27c621afe43abfd7403f343b612c._comment | 8 + ..._b70343f8cb81807a7da0da5637d8c750._comment | 12 + ...S3_remote_without_clear_reasoning_why.mdwn | 80 + ..._87983a598cacaa8800db4a01ec23ba1b._comment | 18 + ..._b9e5b868dd5379de18ed77907d1b42a3._comment | 9 + ..._667c5b94580e2ca0305d4ed97c2e199f._comment | 11 + ...ic_S3_bucket_where_it_exported_before.mdwn | 126 + ..._08514c489b916b2ae8e4e0122051856f._comment | 18 + ..._1ae05c24612f50cfe03e2569b332a522._comment | 51 + ..._ae81a2ac4b2167d48c8a447811a492a2._comment | 8 + ..._c49e48ea12ed0a0edb675b532279a5a8._comment | 8 + ...without_stating_any_reason__47__hints.mdwn | 153 + ..._replaces_.git_with_incorrect_symlink.mdwn | 50 + ...r_magic_file__warning_pollutes_stderr.mdwn | 26 + ...____44___git_commit___34__blows__34__.mdwn | 52 + ..._1c86937cee067b5980852fcb066b0bfb._comment | 15 + ..._bd552525b7bb2ceaad72c8fa3bf41c6b._comment | 28 + ..._8cfa8fe790ff2586374f46ed10cc8fbe._comment | 22 + ..._40e9a5b641200c92725df31a654b6a05._comment | 16 + ..._eaafc970cce2c71ce29f136c90e04504._comment | 57 + ...__40__adjusted_branch__41___teststuck.mdwn | 62 + ..._d530fb679b76e995c466fe17c3aab830._comment | 11 + ..._dcc764525370338fbf9b6f2728e3e5ac._comment | 9 + ..._7c9fc177fcb76b76765cece36b4f939e._comment | 8 + ..._981d6d42f411476d1a5e38d987af6035._comment | 34 + .../wanted_on_read-only_repo_crashes_.mdwn | 61 + ...arted_to_dump_debug_output_to_stdout_.mdwn | 68 + ...___34__drivers__34___is_not_available.mdwn | 40 + ..._3f8100a4d9e6ab4302c89eeafd0f843e._comment | 13 + doc/projects/datalad/done.mdwn | 1 + doc/projects/datalad/potential.mdwn | 5 + doc/projects/neurohub.mdwn | 25 + doc/projects/openneuro.mdwn | 28 + doc/projects/repronim.mdwn | 26 + ...it_annex_6.20181011+git109-gff9ba1f4d.mdwn | 43 + ..._244e138f7621c901dd7763159db84677._comment | 9 + ..._cbdfb3dea5c125b52d53811b96b3e01e._comment | 8 + ..._fails_tests_during_neurodebian_build.mdwn | 29 + ..._ddd60096d409a820358d5a57a3a449c9._comment | 14 + ..._b496a4967b6bcc0a4e1cc55e06ba90c8._comment | 9 + ..._bdadf679a2f82c2a1cae747d437add85._comment | 22 + ..._90bc2857c83afae250834135a5884898._comment | 14 + ..._d29518fef1b3b0b8937e078f9303d41c._comment | 8 + ..._24eca56dc972ecff0b553e93b7c649c4._comment | 17 + ..._3adce9695e4e3786f0c68b092d8f6400._comment | 8 + ..._within___34__git_annex_version__34__.mdwn | 6 + ...ion_in___96__find_--json__96___output.mdwn | 35 + ..._034f772098dfb9d3622c6f84976e69a2._comment | 8 + ...8___InvalidHeader___34__preload__34__.mdwn | 80 + ..._247f3c1dfea3cdb0b398c015f4c4d44b._comment | 44 + ..._an_error_message_in_case_of_an_error.mdwn | 19 + ..._636a375fbd8cf8573b3806d7a815b59f._comment | 9 + ..._50d096934badd3e59756939b5c418bcb._comment | 7 + ..._potentially_access_any_address__34__.mdwn | 34 + ..._longer_generates_default_description.mdwn | 100 + ..._eb415152db43c02e4d474dade4a1faca._comment | 18 + ..._c51d386f294529d6ebe7058438577ffe._comment | 36 + ..._6edae77c6ee7e4c4f94f9c0daff375ad._comment | 13 + ..._d92a7f2bc72b27c74cd86811c9bbf098._comment | 8 + ..._0dd1d4e6cd16da2865c3153b61b9e282._comment | 8 + ..._539039e237d9b0db0c97f64d877de7f7._comment | 7 + ...red_while_running_in_docker_container.mdwn | 88 + ..._130f2600057aa5b648f7798c49b4ea60._comment | 16 + ..._802f85441c42ac079b6ecaea39a63c81._comment | 351 + ..._4d03d12bfba811e0a67551e10201200b._comment | 8 + ..._1ea0f89c3c9e8bf1142b2c234cdf90c3._comment | 12 + ..._72c67ef575c90071040cf5347d81ce01._comment | 10 + ..._dcfb1dfb33a690a73547a5855e0ee55d._comment | 9 + ...ectory_with_a___34__tricky__34___name.mdwn | 70 + ..._10045d7efa652ded4c41fd8c3e089bf4._comment | 10 + ..._6d57bda8ddc603f24e16018969ac780a._comment | 46 + ..._1a982c19fc7360a2a231b5a23142bbba._comment | 18 + ..._397686077b5a63196204327c178a7064._comment | 11 + ..._b95c1da49c3a4eecca8038c03a46c709._comment | 8 + ..._d2f9a37824dd2bb49892430f9f271f1c._comment | 7 + ...ld_for_neurodebian__58___test_failure.mdwn | 36 + ..._ec7aa500a826beb813bc5313af9aa983._comment | 24 + ..._a61ed5b8f438caf0b8c7a53e08e1986a._comment | 8 + ..._09343b67a0c6e82203b76ef591233869._comment | 11 + ..._8be6e27e081d4bc8c0fa178088a10a91._comment | 58 + ..._b08d8859f873fcbdc78f938042fe0fbd._comment | 12 + ..._357f297d1afab22a59b2bafe4b85facd._comment | 36 + ..._2181d91c9b5b374c6102fdcc227349fc._comment | 9 + ...tree_in_v7_in_repo_with_detached_HEAD.mdwn | 59 + ..._a377e26b2eb75956c9de9beed0534cc2._comment | 8 + ..._d1ae8ccbfc3a9dd90cc03e68d5a78071._comment | 65 + ..._cd7cc008c3d37caa76416bd2452da90d._comment | 21 + ...nterrupted___96__annex_add__96___call.mdwn | 102 + ..._25dd2f0ba99913f26cbcbf55352bb1ab._comment | 14 + ..._f5e21a674c54c5dc4c8474ce1b4ffaf1._comment | 21 + ..._028eca36967a89e5f479802499232a90._comment | 33 + ..._6657ceac22df80251b74c6e4b47f8ba0._comment | 7 + ..._96f485e38778448804ae253f9032babc._comment | 8 + ..._0e3ae1862408b6d0c5e0acd9e9fa20b5._comment | 54 + ..._7fcb97b7d7f26fb6964a574ba1c8cd20._comment | 29 + ..._ba2dd3b91147e2979bc90a022f6e0252._comment | 12 + ..._fe629ccb023c2564dbf78402d92bef66._comment | 10 + .../git_annex_test_never_exits__63__.mdwn | 47 + ..._d258114e6e8f8db28b65a39cb13f2a04._comment | 29 + ..._adc040aad7d339e22fef76a2cbc4a312._comment | 8 + ..._e07a5dd0abb2049b4bb0bf26fa2ebab5._comment | 51 + ..._419de3fe25c490b251b8a6a7a9b24ed6._comment | 44 + ..._2bb944b19503dcf90fdf55e5098a2c02._comment | 10 + ..._a8847e219a57f3cf41330745e6a67b10._comment | 8 + ..._4e7be0dd1eb70af4790e2bcba7bb6ea1._comment | 8 + ..._d12ddfb48706454eba1bd552a681e5ba._comment | 19 + ..._d897d97bfe8f13431f8c5d92e61bbd3d._comment | 114 + ..._b3f282a0a0d4c5f174cf6831dbf3014c._comment | 56 + ..._230038504d75704baacd4d3ac750ee95._comment | 8 + ..._--kill__34_____40__gpg_2.0.22__41___.mdwn | 35 + ..._0351276d5eeb5d8af0cf0e72c3a213fd._comment | 13 + ..._a8565fb1657318092a22e8ed18ae6cbc._comment | 17 + ..._d3a478e3f7da91ab14c9b1e24d3e07d6._comment | 58 + ..._9add6c8e1d5b722eaeb2e5a0fe67cd32._comment | 7 + ..._b411b96c73bba30557c2f3aa9d6077e7._comment | 8 + ..._e3a79f9480a7123feb924f3c1e72ce62._comment | 26 + ...al_get_-J_on_exported_S3_bucket_fails.mdwn | 52 + ..._005874771ab14efb94c4a739da31b523._comment | 11 + ..._in_an___63____63____63___transaction.mdwn | 63 + ..._d2a5b1eb72cf0abbd0143339ff81a92a._comment | 7 + ..._5ee016343b74fac9d6235db88744734a._comment | 7 + ..._c640da31be6bcd50dec6eabb2e792e07._comment | 8 + ..._4bb69f0bc73b5d368cc9278b88223a5e._comment | 16 + ..._2d8cf0d8b020941d143abd424729c6bc._comment | 32 + ..._7cc13b150c19a3c08f2b9cdeb880cfe9._comment | 10 + ..._9d1f902cc0e029b483115c3c0de5d113._comment | 25 + ..._0e4efb1686564f4d8e834b1e0843d397._comment | 58 + ..._01371e8b9d56d4470af5277456763d12._comment | 10 + ..._a171911a9bb7a278e673e4b6905c971d._comment | 36 + ..._ffcede72f600ecc98b906f0d9b6d6d0a._comment | 12 + ..._2b76e74756e684a09387396fa2177d57._comment | 34 + ..._8f7fd9bc58d8c2eff32f5fa200b57119._comment | 20 + ..._0827ffb4beb55f6553a40c722bc2ec12._comment | 8 + ..._c9102fdb9d99d2c19585e74b0dc0dff7._comment | 8 + ..._d69e0931e520391551eb4c37eb2f809d._comment | 7 + ..._115c584098501e16292dc6c776141074._comment | 16 + ..._1adec4fa4c8af5409d2f5dc7adcaecf4._comment | 8 + ..._e8b00ab555e94cf8826493ca6ce2d082._comment | 10 + ..._2fb1c54c41b31698909594106cb08cd4._comment | 35 + ..._750dbe3e118b1b6b8d0cca7d26ea1366._comment | 8 + ..._50c0db38a664adbb0c5a2290326195a6._comment | 11 + ..._cd1362901ff08323ca134fc8de914318._comment | 8 + ..._e2cc841198c91709980cc2b2a8297925._comment | 65 + ..._eff60d2ee47af65f18dede31cc283adb._comment | 19 + ..._3338f896a983292bef576dcd369bba5a._comment | 30 + ..._fe7e5c3340282f89c3393d8c5a2bc17c._comment | 13 + ..._296739c184ac8d0cc453aeeeff5b6f74._comment | 12 + ..._75f52900d12931b4c6172e10401f28d3._comment | 37 + ..._eea08486fa9669bd197eb9e957b65ef8._comment | 24 + ..._817a9d27a0b15798671f4dc5cd661164._comment | 72 + ..._c2df4fa0420c0db31b38e65a8d7dbf92._comment | 8 + ..._288741ae44f2dddbe53ab1dc294e2fb7._comment | 58 + ..._44d25c37e26e71b2aff759a0d39c5803._comment | 23 + ..._24ab22004dd25169bb9191a92f1e0ac4._comment | 10 + ..._c8a52578b5d7482683443bd5d95a5265._comment | 12 + ...tect_need_for_pidlock_on_an_NSF_mount.mdwn | 67 + ..._82a71d4e9656c83e2d50143cb8a31602._comment | 16 + ..._9bd5f0acb9761dcf59ecd38092e3e14d._comment | 49 + ..._6d2fceb790e675cb73b193bf67f7a6f4._comment | 29 + ..._bf6487c1740f163745b7dcc41468ec4d._comment | 12 + ...ecting_to_ftp_are_no_longer_supported.mdwn | 71 + ..._5184c1b87e249f203541f610278ed08e._comment | 32 + ..._860458173cb4d745e8c9833b804398d8._comment | 8 + ..._921d2493f51ecb61b711773238c9f7e7._comment | 17 + ..._b15837921956ad166cf53a5dd23cb7dd._comment | 20 + ..._2a66b890e3c60d1102acb7cef0b86308._comment | 20 + ..._c42192a94651f34d32f6d5b91b1c09e8._comment | 8 + ..._11f4424d3b9fb6c54fa510320affac73._comment | 7 + ...rks_url_not_available_in_wrong_remote.mdwn | 83 + ..._2aa17a7067a183f5837b5a41d74fcde9._comment | 14 + ...start_for_annex_64bit_looks_under_x86.mdwn | 12 + ..._b8a4128b08ef8dd25a8141b27531b9ae._comment | 13 + ..._0f23c377b22788d9c540bd480398f47b._comment | 14 + doc/projects/repronim/done.mdwn | 1 + doc/publicrepos.mdwn | 47 + doc/related_software.mdwn | 72 + doc/repomap.png | Bin 0 -> 67316 bytes doc/required_content.mdwn | 22 + ..._b9576aaa31258e9bdf18a4eac8d61bfb._comment | 10 + ..._d475f4afc84a58afe7af6d492de3ebe5._comment | 7 + doc/scalability.mdwn | 41 + ..._a6656ae397277719d67d0953a28fe1d8._comment | 12 + ..._71c7c3aa97284602d0f64c11a98d1782._comment | 8 + doc/security.mdwn | 7 + doc/security/CVE-2014-6274.mdwn | 10 + doc/security/CVE-2017-12976.mdwn | 10 + .../CVE-2018-10857_and_CVE-2018-10859.mdwn | 92 + ...exposure_to_encrypted_special_remotes.mdwn | 12 + ..._285da453a385bd4bd225e26377a47cd5._comment | 10 + ..._261b1904e41f4566490b977010ce8734._comment | 19 + ..._0cc44e032fc94f4d374fb297ca9a8f2d._comment | 12 + ..._3822244fb9becc32385d57233fa036a4._comment | 11 + ..._616b08553430a64beab196571c5b9cdc._comment | 8 + doc/shortcuts.mdwn | 12 + doc/sidebar.mdwn | 12 + doc/sitemap.mdwn | 4 + doc/special_remotes.mdwn | 136 + doc/special_remotes/S3.mdwn | 165 + ..._c366f020c9b97a365e21878a33360079._comment | 10 + ..._c1da387e082d91feec13dde91ccb111a._comment | 12 + ..._59c3ecab7dbc8be53258460473cac21c._comment | 8 + ..._0789a21d980825188bb09f7fc8bba8be._comment | 33 + ..._29574a51d5831c51e2e765eb2c06e567._comment | 12 + ..._ceb9048c743135f6beca57a23505f0a3._comment | 8 + ..._7b79f8b5ef88a2775d61b5ac5774d3e0._comment | 8 + ..._52d3510016c099d083553f9b3fa40db9._comment | 10 + ..._0dcb84048563fc9e45b66ca8f365f320._comment | 7 + ..._9d0d622b6202698f09eb06c097579fbb._comment | 19 + ..._4a1f7a230dad6caa84831685b236fd73._comment | 8 + ..._ce4ce50d51675ee4746a2528d4bea750._comment | 8 + ..._26cbfd805dd45a80121f5e2079afba37._comment | 9 + ..._55a7e513713285b8ced84c8cfd525364._comment | 9 + ..._b503ce70a4f008be580a069420361686._comment | 20 + ..._b209474b90befc79a7139d6c5703e2d8._comment | 9 + ..._29f2760e433a0e6229e46e728c380275._comment | 8 + ..._6b99242a6a681a1848041a8b8875743d._comment | 21 + ..._163d81443ca5a05138e6f570b068ac6e._comment | 14 + ..._c4dafad82a898eafd6d9e3703fad2c48._comment | 12 + ..._37430a66a9f39a635b32f04ff82db194._comment | 9 + ..._5b22d67de946f4d34a4a3c7449d32988._comment | 8 + ..._db7e1e3506cf7a912cf88ffe4caea20b._comment | 10 + ..._e46934941fca2de536f3705185098b6e._comment | 13 + ..._197d0c6d632c201a4ea9680653895c07._comment | 8 + ..._36788d742259b3b078e02d7b2a251ce5._comment | 16 + ..._cf57e8dbd9fdc7c487565b61808b6bb2._comment | 10 + ..._a141196a77d77cc6e130185dbf01e48b._comment | 10 + ..._9c900d777c9add9c277d40bd5b32bdf6._comment | 90 + ..._fef35384191078ed9ac6ee819eea4aa7._comment | 8 + ..._03ba1dcf23e04b8c54b53b10a93e1c45._comment | 9 + ..._bcab2bd0f168954243aa9bcc9671bd94._comment | 8 + ..._38c0b062997fde1ad28facc05d973e83._comment | 12 + ..._409bc2b56382417cf26bb222fb783ba7._comment | 8 + ..._78da9e233882ec0908962882ea8c4056._comment | 10 + ..._6af9781004d982d8e6b20a83ad29eead._comment | 8 + ..._0fa68d584ee7f6b5c9058fba7e911a11._comment | 12 + ..._7ad757b3865b04967c79af0a263bb3b0._comment | 10 + doc/special_remotes/adb.mdwn | 49 + ..._df47283c499cddd1d92a262679514531._comment | 9 + ..._f1f6c0a6f8c34c3d205988d2f69693ea._comment | 16 + ..._1d08d2ded354328461e9a7288287779e._comment | 20 + ..._9f5edeb544f6a26e9278410ef67e99ba._comment | 14 + ..._c9a3427bc8e924cd1f50246b3ec7c081._comment | 19 + ..._73ea2ada02df871b0c9795a5b769f7db._comment | 13 + doc/special_remotes/bittorrent.mdwn | 32 + ..._4ef590d88bacd763abd5ce209e6b9640._comment | 17 + ..._bccc7409111e4df4f4aab3b21fa4d321._comment | 8 + ..._1e2372988e37c07b47a407f2eb979190._comment | 9 + ..._aedac7a8482f710637493464b9e76fa7._comment | 12 + doc/special_remotes/borg.mdwn | 44 + ..._2a650af185a4eee5fd7fc350ed395e2c._comment | 10 + ..._6e6baf5467efcae70729e18975d8eb1a._comment | 10 + doc/special_remotes/bup.mdwn | 40 + ..._f78c1ed97d2e4c6ebffaa7482cfe0c9b._comment | 23 + ..._b53bceb0058acf4d1ab12ea4853ee443._comment | 24 + ..._65d923226cf6120349d807c5c60f640c._comment | 8 + ..._fca579678edde073716f099c767767e1._comment | 10 + ..._ce960bc69b27dfc2a233c9baa5b2cd2b._comment | 10 + ..._940b778f97377e83dc16439c0c7e5b38._comment | 21 + ..._c4665d089f2ceb2ed798cf264d490a8c._comment | 8 + ..._4787e0373eeec3c7d1d562e47217566c._comment | 8 + ..._360caa8972c2daa94044cc95188306e9._comment | 18 + ..._96179a003da4444f6fc08867872cda0a._comment | 43 + ..._612b038c15206f9f3c2e23c7104ca627._comment | 12 + ..._1186def82741ddab1ade256fb2e59e6f._comment | 17 + ..._7d22a805dd2914971e7ca628ceea69be._comment | 10 + ..._5942333cde09fd98e26c4f1d389cb76f._comment | 10 + ..._cb1a0d3076e9d06e7a24204478f6fa98._comment | 10 + ..._4cbc67e5911748d13cee3c483d7ece8a._comment | 12 + ..._ca7096a759961af375e6bd49663b45b3._comment | 10 + ..._e9881290486a1770bd260f8650ada9c6._comment | 8 + ..._e01b5cc5a0d81b071e93e27e7b91fe2a._comment | 8 + ..._13237170ef5b6646e0e25d3421af3fe5._comment | 10 + ..._1a36a0483a9db04d36e0234a192ebad8._comment | 12 + ..._a8419963dc024b1d9eb73807596012dc._comment | 8 + ..._95ccfdd22a2391daa99e0beb04adedd6._comment | 11 + ..._b9d238fb15ad7628e33c90b071e07bb0._comment | 12 + ..._cc21b81a8f809f6efa5f5b6332513fc3._comment | 12 + ..._3fe750118ff1edbe91a110b86fb5b662._comment | 10 + ..._6794eb52bd87c28ef1df3172aa7d5780._comment | 9 + ..._961276c18e9353ca8e25cad53e7ec51f._comment | 8 + ..._6b7242721f2f2c77b634568cb737e3e3._comment | 13 + ..._308afc586b86c66bbb3437d63864d9cb._comment | 16 + ..._0f5440e0e54cf7ac2a68b1ba115b0930._comment | 10 + ..._96ef232e13bc2dc102a667a06c856ee7._comment | 13 + ..._2c9eda62766c9d5000346a092fe5d0d8._comment | 16 + ..._d9f298f284d66fb0aff029eb01f1ce23._comment | 90 + ..._606c1bee71a265f9df3a8cf50fce9a21._comment | 20 + ..._b37c6ed2444bd7e8b4d7937abdfcbd1c._comment | 13 + ..._c7ab32e1e63fc114b3b2f56bab62eafa._comment | 8 + ..._8393a14f084d022986c8245ee01f4198._comment | 8 + ..._97543acfa7434e332ebea5672e446317._comment | 8 + ..._8e5b17431507ee2115b992e5156b749b._comment | 7 + ..._20ac13d009a4f451eb895ca16446ba88._comment | 7 + ..._8dea734fed26e5d9336a2da5bd81eabc._comment | 19 + ..._317c4d5edc9de8159c3b03a3e161e257._comment | 12 + ..._31256dd4b74d344aa49902adec4bcf02._comment | 10 + ..._5801755d10149f0d3971fef0b6e1b62f._comment | 19 + ..._48859c5ea8f63e37b7531ed0e07f4a54._comment | 17 + ..._9fa2adc324ba25428a681158e58a5300._comment | 14 + ..._04366bcb840b7628d13546daf65650dc._comment | 18 + ..._990a0e67fdd30680631a90231d07c611._comment | 17 + ..._9229776623c234204c8b164edff95da0._comment | 8 + ..._2a36f9c874b00fd5de94836e3dcde782._comment | 18 + ..._26a29fe6169eee1c62dd10672040851c._comment | 14 + ..._85e354eb058aea02be7b847bceb02313._comment | 10 + ..._75a7c567db2b5256182b2cf06091dc12._comment | 8 + ..._bc5871052d29f25eddcc0e02bb2e5a25._comment | 9 + ..._7553ddfb96499b52ddc300a457972645._comment | 15 + ..._f3f5348ceeffb458bcd7bfaa5c420751._comment | 8 + ..._780e9ba56a2a83d64583521b8d987e33._comment | 8 + ..._ee5aa6762ca9403c1a2afe1819984fef._comment | 10 + ..._044a3d6c35fa1b522f7aeea2cec4199a._comment | 8 + ..._3bbda479d13f6bf393dcd59ed94ddeaa._comment | 10 + ..._4485e72f90f46beef3f216ffab82386e._comment | 15 + ..._1a8a217dc31b0a36dfa9975f72d40b3a._comment | 18 + ..._02172d2b81de8c5e212e5ed093a01aa1._comment | 9 + ..._f7000975d38077828ab11a99095b39eb._comment | 8 + ..._5d2bd7c1e1493d3c3784708a9b0bc001._comment | 8 + ..._af01ee5ce31b1490af565cb087d65277._comment | 10 + ..._3d4ffec566d68d601eafe8758a616756._comment | 13 + ..._26af468952f0403171370b56e127830a._comment | 8 + doc/special_remotes/ddar.mdwn | 40 + doc/special_remotes/directory.mdwn | 55 + ..._86f8c1b09cbd82bcd76378dfa1b3ca07._comment | 49 + .../directory/comment_12._comment | 16 + ..._311cd013fd8db47856d84161119e059d._comment | 12 + ..._019660abe79fb1a3e6dbeb9a87a4c546._comment | 8 + ..._80d962f856de7510a437437fc0ca75e1._comment | 13 + ..._3d091c87c1e4d1c086fb88ae21137a57._comment | 12 + ..._32f6695042fe1f6e40a64a785fab59b9._comment | 13 + ..._01559b914ed43c4468e0980f3f794ea7._comment | 23 + ..._1b24ac6abc99e2e4bc8c9f4687c81395._comment | 8 + ..._0a6ae6ba0d2835da21fa62b2b376bf3f._comment | 41 + ..._e8a53592adb13f7d7f212a2eb5a18a31._comment | 12 + ..._981eeeaee76f89a59e2dcbb368c14387._comment | 8 + ..._4df82f23228dd2f95353f774d9bd8173._comment | 12 + ..._2be4b4e74a41723b72ef92a28f81a4dd._comment | 7 + ..._d949edad6a330079f9e15f703f9091e3._comment | 10 + ..._49009f4e9e335c9a9d0422aa59c9a432._comment | 8 + ..._f5e9b0b477c4e521f8633fd274757fa3._comment | 8 + ..._e790718423c41f5ea8047ea5225bfacd._comment | 11 + ..._325aac80b86588912c4fd61339ccbd0b._comment | 10 + ..._4206db69d68d9917623ce02500387021._comment | 12 + ..._acd9023511fe43817718bc89430f96c3._comment | 8 + ..._d330eb808a990bb71034613c297a265e._comment | 8 + doc/special_remotes/external.mdwn | 39 + doc/special_remotes/external/example.sh | 309 + .../external/git-annex-remote-ipfs | 127 + .../external/git-annex-remote-torrent | 205 + doc/special_remotes/gcrypt.mdwn | 65 + ..._16a7b4978a58284b5ab3c58f2102e9d0._comment | 8 + ..._08245fd6716ee3ed5ac98fe95e7d5ca1._comment | 10 + ..._2b22c692fb98be1a964430b5b1a329a9._comment | 53 + doc/special_remotes/git-lfs.mdwn | 93 + doc/special_remotes/git.mdwn | 18 + ..._4c76e1f29065cfb2f8bc05c187c1cc31._comment | 9 + ..._12c53dbbdb77f98f337ad60c67171337._comment | 12 + doc/special_remotes/glacier.mdwn | 47 + ..._c0e841c3e305712d960e43a10e674215._comment | 63 + ..._e062b823b4d0b365698a6488d756b85c._comment | 13 + ..._a097d78d15e103c10f67e237c852b222._comment | 59 + ..._6ef8735fbd357a09dafe254c8da3b1a8._comment | 16 + ..._53c965ab49c75fe2220a04f014ba577f._comment | 56 + ..._e9df327e60ad0e69ace7102deef1efd8._comment | 22 + ..._ceb6a0cc74eea65fa60b58d1d000acf0._comment | 10 + ..._fcd856b99dc6b3f9141b65fe639ef76b._comment | 10 + ..._38fcca87074f6ea31a12569a822aa8c9._comment | 12 + ..._cea5bcb162e4288847ba5f25464a0406._comment | 28 + ..._0c92cc82c7ac513130f862391a02d329._comment | 8 + ..._8d1dcb4bf48386314bfb248ea6eeeb68._comment | 8 + ..._adb1db354dc4941e4b004e4ba34660d7._comment | 8 + ..._747e403aac5acaba00e220931e926951._comment | 10 + ..._a04bb5f27c1a7cfffe881903f973dbec._comment | 24 + ..._89c4506e079c299fd098d0fe746d032a._comment | 8 + doc/special_remotes/hook.mdwn | 112 + ..._6a74a25891974a28a8cb42b87cb53c26._comment | 32 + ..._ee7c43b93c5b787216334f019643f6a0._comment | 17 + ..._2593291795e732994862d08bf2ed467b._comment | 17 + ..._35d79b5ffa5a19056efcdc805070bc4b._comment | 18 + ..._6fbf1e963fa3ea4b2eb8ca5a3819762d._comment | 10 + ..._e0ab48d5333e5de85f016b097e6fdac1._comment | 12 + ..._cc2b1243c2c36e63241513bcaddfea67._comment | 10 + ..._bbae315233bda48eb04662dfd48cf1ae._comment | 30 + ..._037523d1994c702239ca96791156fe65._comment | 10 + doc/special_remotes/httpalso.mdwn | 38 + ..._128e53b20a2f01bf55c83d52c4d42e93._comment | 10 + ..._aeeb2122814552f9cf83d950995b16ba._comment | 8 + ..._1c9384afe2779ab6c6ae689deea37b31._comment | 8 + ..._0bf4d78dec7ec997f781c5a46460b27b._comment | 13 + ..._500374b5826e87293dbd4e3aae570185._comment | 13 + ..._ee2c2a34e11bbbac835be7660830e298._comment | 10 + ..._cea7241b64264f3485e6759b9dc0dfaf._comment | 8 + ..._a5198f57b7eb6c458d5e88f8fc9776fa._comment | 9 + doc/special_remotes/ipfs.mdwn | 84 + ..._9fe1bef94c60fb47cad8b80b0cf0d722._comment | 10 + ..._1e38459dccd1ef3e23335e9bebca3241._comment | 8 + ..._5f8f72a832c8439e3769a1199dc46c4e._comment | 9 + ..._551c4dc55b73d6f07c4ddee546b5e938._comment | 12 + ..._8cfb0f54444e78089837e62502ef9f61._comment | 17 + ..._82b398be82a0b4ec7765606352ec0942._comment | 12 + ..._331655ed1b7ebb02444aa693b551e728._comment | 12 + ..._d1b2da148715476015716a2f866558b9._comment | 7 + ..._564271a8660d7bbade6e4ed396fcfb57._comment | 18 + ..._b8c7e402e0ee63d659ae33e3e2504ca2._comment | 8 + ..._06611859079239659ba7d73d655f517e._comment | 23 + ..._ba7d08b2bcb6614102c48b4cb3de5b1a._comment | 30 + ..._8621bbd87982f73cf401cfa09d95d1e4._comment | 10 + ..._062f266f26b5788b418de6955bff442d._comment | 8 + ..._eedf260df630192b49557bfc84c9ce82._comment | 7 + ..._630964c11465751773d1082e35737e70._comment | 8 + doc/special_remotes/rclone.mdwn | 37 + ..._3fa761ad2e7a87e160b6d0e86814801c._comment | 10 + ..._e5babe3bc4535946ee04e8339403fda4._comment | 19 + ..._d946b28311da5e3632c651f52357a2c1._comment | 8 + doc/special_remotes/rsync.mdwn | 61 + ..._43e8fa3517c1f5935f02ad06fbed63dc._comment | 8 + ..._8cafc1a8b37e6fb056185ec058c0c3e8._comment | 8 + ..._fa21b66a1722d226f1819646b9c45308._comment | 9 + ..._368f90773db9522c373168e127a39ae6._comment | 12 + ..._2261b1b7441eff9e28ec8e1f98d77980._comment | 9 + ..._a4a0491a7dcee2e7b7786127518866af._comment | 22 + ..._509514d6e3d790a80a2125068f499a72._comment | 11 + ..._9e180c397486989beab21699b8e8f103._comment | 16 + ..._25545dc0b53f09ae73b29899c8884b02._comment | 8 + ..._960a89b1ae7e3888ffba06baa963dc21._comment | 20 + ..._db84816c31239953dd21f23a8c557b43._comment | 15 + ..._ccaffa4aded9dab88c76a856b96ea5b9._comment | 9 + ..._e687b9482b177e1351c8c65ea617d3fa._comment | 8 + ..._e122979ea811d9ef835ba05bb936190f._comment | 10 + ..._d566113318d0aa7500d76ffe1bd46069._comment | 10 + ..._5dcf10a502b2d4feac46b620d43e9d00._comment | 8 + doc/special_remotes/tahoe.mdwn | 47 + ..._90d6937e95301f83268e0c9190f0f8c5._comment | 19 + ..._d30f5958cca5dbcb93e4ea56a25586da._comment | 20 + ..._84d59f41949987381369ab75efc1b65e._comment | 24 + ..._8a425ab612c3b46efb9658ab79038661._comment | 18 + ..._11513056ee7de3dc8bf54c7e0948538d._comment | 7 + ..._588d129cc2eaf0a8df9fc2fc6de014a9._comment | 14 + ..._9b23112d568a7edfce05e95478c30e4f._comment | 14 + ..._5aa703bb3d3f7de9e78a6d831bd515dc._comment | 9 + ..._75eccd07ea57f44d5a198533a907225a._comment | 12 + ..._f5e45af55cd18af73e2d3d5911039418._comment | 17 + doc/special_remotes/tor.mdwn | 10 + doc/special_remotes/web.mdwn | 42 + ..._0bd570025f6cd551349ea88a4729ac8e._comment | 8 + ..._333141cc9ec6c26ffd19aa95303a91e3._comment | 11 + ..._e6ce9bb92c973350852c9498b7ffb50f._comment | 32 + ..._8a8369e0398a7ec6c65e493e4d836db9._comment | 22 + ..._1ad36ff51dfe69256fb0c8803da4efd6._comment | 9 + doc/special_remotes/webdav.mdwn | 44 + ..._2c087a132c2203ac20636800bf73dfa7._comment | 8 + ..._cde4fccaf551ba1eab8235ebf6654316._comment | 10 + ..._76423262fceeced32ab18fa38ed53bdb._comment | 15 + ..._2390020fa7daac8a6d3e8b713bd3b8e7._comment | 12 + ..._45e3b7094d0611b2e082be352f74151a._comment | 18 + ..._d43673b8c8ed3534f31d026098ab673c._comment | 8 + ..._2a11dfc1fd159a6b9a25cde71ffec80b._comment | 17 + ..._cfd2786a998af5034dc707f23aa81678._comment | 29 + ..._c0aff1c36b500ae67c6cb4b34292a54b._comment | 16 + ..._8bf8d365c0a13f684ed9f9cb013396e7._comment | 10 + ..._6b523eea78eae1d19fe2a9950ee33e3a._comment | 26 + ..._a85a41709bbc0c7c138838ac94ba499f._comment | 9 + ..._e86cfc56014df46412f08b36bc019fb6._comment | 10 + ..._556386f26497f4075ab533e21e2077ce._comment | 13 + ..._b57fdd5322088e9b08dca7512c7e7793._comment | 28 + ..._6c16a7c9abb257be4d046e27e11bacdf._comment | 10 + ..._83fc4e7d9ba7a05c8500da659f561b8f._comment | 10 + ..._239367ad639c61ecdf87a89f7ac53efe._comment | 10 + ..._ffa52f7776cdc8caa28667b5eadae123._comment | 8 + ..._5b8cbdb5e9a1b90d748a5074997e1cd5._comment | 12 + ..._d3be3e588c3a2abb2025ceb82c18b0ef._comment | 10 + ..._6fa7e11331db5a943015bd5367eb3d73._comment | 12 + ..._2627b41f80c7511b27464e2040b128a8._comment | 8 + ..._b8f17efe524bb45a3e16705996df1265._comment | 8 + doc/special_remotes/xmpp.mdwn | 4 + ..._c7c2e2e81cb5b2b9a5272430c835dd39._comment | 10 + ..._05d9a67b9331656b4035399641cedb1b._comment | 22 + ..._568247938929a2934e8198fca80b7184._comment | 11 + ..._9fc3f512020b7eb2591d6b7b2e8de2d7._comment | 10 + ..._48ddbba1402d89acaea07cff747c48e0._comment | 28 + ..._59857879abaae22bde444a215e00bf18._comment | 14 + ..._583ee374bd34fcc9ae26c2fd690e8c47._comment | 73 + ..._8f0b5bba1271d031a67e7f0c175d67d5._comment | 8 + ..._ac7acbded03325b015959d82ae77faf1._comment | 10 + ..._81a9636a1e8a36a58185468a26f8633d._comment | 8 + ..._eda76b826491c96b1ce072aacf9d3adf._comment | 23 + doc/stickers.mdwn | 21 + ..._96f9b35048793c1cc0902cced82b65c5._comment | 13 + ..._39cfee29eae5e69d88d84b2c65eb83fe._comment | 11 + doc/stickers/hex.svg | 1017 ++ doc/stickers/hexdemos.svg | 628 ++ doc/submodules.mdwn | 22 + ..._936e145bbe3b6bd928571c17d3416937._comment | 12 + ..._78fffae9facce1600915bc19429d81e2._comment | 17 + ..._d59882712e0547c748d3b354e8607d62._comment | 19 + ..._15a2633524fc376b6a6c4f76187e435b._comment | 14 + ..._fb006a18240230aefb80ee8aeebdccb7._comment | 12 + ..._92cdc81ccc4831f5ad493736ca87e87d._comment | 8 + ..._9da0d19529dfb8a997ad469169e55895._comment | 8 + ..._9ccb133a957498724188a8749359a422._comment | 21 + ..._d1877da19346bbd6067ff95252974a9b._comment | 15 + ..._899cf2aa74cbb8160b1e249b314e7d60._comment | 8 + ..._8755b0d18c1b013ed0dc121ecfb83360._comment | 12 + ..._5e3a7d5c81fb37efbfe22cbbe8b8a247._comment | 16 + doc/summary.mdwn | 12 + doc/sync.mdwn | 49 + ..._2cd8ab86f498d6f676f859b552f831eb._comment | 8 + ..._7683879f6982c0eb0aa39b66ff5a5ea9._comment | 10 + ..._2fea14fa314ddb7ab645a5cca5a95fd9._comment | 14 + ..._690f66be9cefe28844d8df653b7a0331._comment | 10 + ..._db342785a4dade30b5b75cb95031bed1._comment | 8 + ..._168e0ab10b4084e13df1a3058fa7e8a9._comment | 8 + ..._96096f994fc55f921f2b24b274f998f7._comment | 8 + ..._44a4ae4685c4bf2b4e7c61897eb3ff80._comment | 14 + ..._838fb249cd5be83962770d5cc394389a._comment | 9 + ..._d409ad20c5a6671f0d0b834232368030._comment | 23 + ..._59681be5568f568f5c54eb0445163dd2._comment | 8 + ..._537b27219871a565ae7bb7f357cd3793._comment | 10 + ..._9c0368eb796f1191c22c186cbb06c642._comment | 10 + ..._e83ed5c0034c48baed7943c596f708ae._comment | 17 + ..._e5e7ec9fbafe5e0429161b977e483752._comment | 24 + ..._1d1eb1bddc835644c7f9d6e83e09b752._comment | 19 + ..._7e69a963102ceaa5b691ad9ed15c5a42._comment | 10 + ..._ea6f4e1f5ab31cd74d67fe95e83084cb._comment | 8 + ..._8925805ff8902d7b2d1f47c1395aadc7._comment | 54 + ..._e5c5da7fc0d0d034bfae33481f1ae067._comment | 8 + ..._161c5d3f693de45070e037d27ee7e8aa._comment | 27 + ..._9301ff5e81d37475f594e74fbe32f24e._comment | 11 + ..._f75f5957dbd0f6fd7b2d7291f06e7489._comment | 9 + ..._c85edac65571caff70e87dff2317a4e5._comment | 9 + ..._49560003da47490e4fabd4ab0089f2d7._comment | 8 + ..._cf29326408e62575085d1f980087c923._comment | 8 + ..._18c396c59907147bb2bf713e55392b6b._comment | 8 + ..._012e9d4468d0b88ee3c5dad3911c3606._comment | 10 + ..._6276e100d1341f1a0be368f54de0ae7b._comment | 8 + ..._b89161c82c05634d35f6b65bf8360a96._comment | 14 + ..._849883b7cc05bfcb01914d8737098010._comment | 18 + doc/templates/bare.tmpl | 1 + doc/templates/blogpost.tmpl | 16 + doc/templates/buglist.tmpl | 27 + doc/templates/bugtemplate.mdwn | 22 + doc/templates/note.mdwn | 12 + doc/templates/walkthrough.tmpl | 2 + doc/testimonials.mdwn | 34 + ..._2bf439f7a3bc3d6fab91849017946182._comment | 8 + doc/thanks.mdwn | 448 + doc/thanks/list | 119 + doc/thanks/list.2018 | 108 + doc/thanks/list.2023 | 145 + doc/tips.mdwn | 4 + ...les_in_bare_remotes_without_git-annex.mdwn | 8 + ..._9243af1c87fdaf33e336ec34e99c0f74._comment | 9 + ..._40__re__41__podcast__from_your_annex.mdwn | 15 + ..._37____38____34____35___Haskell__33__.mdwn | 111 + ..._835a3608df3e9d044cabe822d0f3e7e4._comment | 27 + ..._080b30cba72a718e73ea715e259e1cfb._comment | 8 + doc/tips/Bup_repositories_in_git-annex.mdwn | 51 + ..._738959a699755704baab6df778ecd120._comment | 7 + doc/tips/Crude_Windows_Sync.mdwn | 35 + ...tralized_repository_behind_a_Firewall.mdwn | 59 + ..._78b9035234a690ca5a7c9f3cc78fa092._comment | 8 + ..._in_special_remotes_without_git-annex.mdwn | 123 + ..._9288805fae0710b19da6c82f9dc32f2a._comment | 8 + .../Delay_Assistant_Startup_on_Login.mdwn | 13 + ..._c63917150527efab4b1106183b3aa7ef._comment | 8 + ...h_autocompletion_with_big_annex_repos.mdwn | 50 + ..._a41fb1037186319bbb44f7a67df6120f._comment | 7 + doc/tips/Git_annex_and_Calibre.mdwn | 108 + ..._b0ef346eaab9ff616aa1ba6b5f4530bc._comment | 7 + ..._9e8122ea81bbd0a86bd6c5173db801f8._comment | 7 + ..._ee1372977919229d17d216cfc3fb0f61._comment | 11 + ...ly_annex_a_file_already_in_a_git_repo.mdwn | 19 + ..._7eaf73fb3355bd706ab18a43790b3c10._comment | 8 + ..._dac1a171204f30d7c906e878eb6bd461._comment | 45 + ..._b62ec0b848d2487d68d7032682622193._comment | 36 + ..._2423904e41a86cd1c6bc155d7b733642._comment | 9 + ..._3062c0794ecd7c6237efae66f4d9b62f._comment | 13 + ..._1eceb980814f95b28caac9d4d9894f01._comment | 17 + ..._603db6818d33663b70b917c04fd8485b._comment | 30 + ..._834410421ccede5194bd8fbaccea8d1a._comment | 82 + doc/tips/Internet_Archive_via_S3.mdwn | 80 + ..._d53a3848c20dce61867283fc03c2adaa._comment | 34 + ..._91c1472da27b00e5d682d22bc1ef04e0._comment | 10 + ..._e23cf781c532f80d47d52265f2b2c87e._comment | 8 + ...positories_with_large_number_of_files.mdwn | 55 + ..._3fac08b817ca3dbfcac3a03ce521464e._comment | 8 + ..._49585db4fbf9f22bf806ee08d73b7db1._comment | 10 + ..._e1f3b19d1dd62b1c9314e1e826fec54f._comment | 8 + ..._6b4cd0667d700c0c5ec6e0054b43f2e7._comment | 12 + ..._f8af84e301d271e9822556f23395dde7._comment | 22 + ..._71def7a311980e89a3b877175ea5bbe2._comment | 20 + ..._fac49a6d3f6a18c9925c34521221307d._comment | 7 + ..._f8417d9ebcfdcba34dfbbf76070ad95c._comment | 8 + ..._992f2a85ce0cdcef2f97ff978560fdb8._comment | 19 + ..._8ff3aa032fb778ff69276984152578b0._comment | 11 + ..._8540bf807eaf1b4e927eafc03deef304._comment | 21 + ..._9169a33c06cf8aea231cdd8f51ce17b6._comment | 8 + ..._f56f1ffeb5e1f382d3227b4ace7f84a1._comment | 9 + ..._25a26f5210986655808992533aa48d3d._comment | 14 + ..._c2b44076201d8152f16e12cb23c50397._comment | 10 + .../Shamir_secret_sharing_and_git-annex.mdwn | 21 + doc/tips/Synology_NAS_and_git_annex.mdwn | 59 + ..._ee03a12ac5ba760b038ac5b93eea4be3._comment | 10 + ..._ab2487da061a23e14198875a00ae801e._comment | 10 + ..._44b28cff77db57a83d9448f768695d2b._comment | 42 + ..._ef7e19f1fd2005eb7cc74509ffb92766._comment | 9 + ..._5e723ccf026fe970ad31207f9f036b69._comment | 30 + ..._8beb2b4b79c7787a92689aaad3bfc452._comment | 10 + ..._b04a1245378d3580432e85dff8eefdec._comment | 26 + ..._7e4ec2b22fb15e653d3b2274493e460c._comment | 11 + ..._954fc1b423208928fafdeb8cdac47c50._comment | 8 + ..._b862cb6ad0f912cc2ffede21df10c2fe._comment | 7 + ..._38775efe367033a9a96cf98a49f8cdde._comment | 8 + ..._52e1684fc40d1ab487a06cf13530871b._comment | 7 + doc/tips/Systemd_unit.mdwn | 103 + ..._06399a293f08401032bef1b94f05547c._comment | 25 + ..._389a2b36c3115eb3342429b0b68ddef2._comment | 9 + ...content_settings_for_my_android_phone.mdwn | 36 + ..._393d1636bb313530be383a075bd3440a._comment | 14 + ..._51a013213118660bdc06ff4d6c8110ba._comment | 12 + ...Git-annex_as_a_web_browsing_assistant.mdwn | 40 + .../Using_git-annex_on_NTFS_with_WSL1.mdwn | 250 + ..._426bcb5c31f6ddf078b5f7c9bba00672._comment | 10 + ..._df6e152f1291c3dc1ba2b1b03b18083e._comment | 15 + doc/tips/Using_git-worktree_with_annex.mdwn | 18 + ..._8e1493eae66a483ece338649c763115a._comment | 12 + doc/tips/ZSH_completion.mdwn | 13 + ..._a810be47633dc83d737a9ef6e8870431._comment | 12 + ..._0e6f7035350ec0c9c61eeafb02ab7af7._comment | 8 + ..._2bdaf6a00723b975808a52863e417321._comment | 8 + ..._182c13292016baf46d8f53a306cb4b05._comment | 15 + doc/tips/a_gui_for_metadata_operations.mdwn | 13 + ..._1ce311d8328ea370a6a3494adea0f5db._comment | 8 + doc/tips/android_sync_with_adb.mdwn | 116 + ..._18e0b24a2907ba8df033454315e50212._comment | 37 + ..._ae0ae08f76cce010999ec8d366f52400._comment | 19 + ..._68affd1a753abdeca0f161698cc63413._comment | 10 + ..._d3e6d777a26c6719df4fd2b4cf89763b._comment | 24 + ..._1ac315bee17c7f4cdc5de1427852d609._comment | 19 + ..._4aefa716b1d37b89c3dc002f85ab6607._comment | 18 + ..._44a985a0cbd0adfe3a2ca4ef20443083._comment | 28 + ..._036ff21f5eee0c165a41e472ffdfa341._comment | 43 + ..._af84d2eaeba2d5a8df087e097095eba5._comment | 10 + doc/tips/antipatterns.mdwn | 150 + doc/tips/assume-unstaged.mdwn | 31 + ..._44abd811ef79a85e557418e17a3927be._comment | 10 + ..._5b589f37cfc03bf7be33a51826cc4dba._comment | 13 + doc/tips/automatically_adding_metadata.mdwn | 49 + ..._cf770ba8eed7963f08517877bd460d3f._comment | 20 + ..._6eeb21b66aa3541491ddc0dd3058ddc7._comment | 12 + ..._92c28dee004562d7085191f3b9e29fec._comment | 15 + ..._065b018dc290549b5ef00b50c3b09fcc._comment | 15 + ..._ffc308cc6aedabbc55820db4f401e0fb._comment | 8 + ..._bd64a53914107bc000c887b4d4bdf6af._comment | 12 + ..._02e5314f827d17d482343e8f22c42fd9._comment | 10 + ..._cd3c8e2f45db93576d1b82cfbfbe601b._comment | 12 + ..._888f0a77405d616a0d51a6176b44f605._comment | 11 + ..._34f0c55d09ddee3de642f6b25a9f6269._comment | 9 + ..._94877b21bf80374c2874b971f26f0e55._comment | 16 + ..._3880fb7f13e74d33d9c4e86772cc6b0e._comment | 10 + ..._db9c2fa8545188520d4bdda5ba545624._comment | 12 + .../pre-commit-annex | 118 + ...tomatically_getting_files_on_checkout.mdwn | 15 + ...n_doing_fsck_on_large_special_remotes.mdwn | 2 + ..._e7c5c46112a2406b873d08bbf53c40d8._comment | 8 + ..._daf45ce29fed986fa9aa8b173760d0b7._comment | 14 + ..._72d222020af4a9c6c753eb1ee7e1f1cf._comment | 8 + ...epository__58___starting_from_nothing.mdwn | 71 + ..._b0d22822017646775869ce1292e676f4._comment | 8 + .../centralized_git_repository_tutorial.mdwn | 18 + ..._9072ebc0c61446d7b151fcfab616fea9._comment | 33 + ..._528e92b21f0551fde4adb956654953ae._comment | 8 + ..._8894229043935e70089caf67f0cc4ddb._comment | 10 + ..._b496622537d2491854b02884acf1672c._comment | 11 + ..._c6e3468c95bc875e17724ee4a3a283a3._comment | 11 + .../on_GitHub.mdwn | 129 + ..._98a1986ff2047de981d77755c462b690._comment | 14 + .../on_GitLab.mdwn | 78 + ..._9d0694204984ec96379a62f0f70ba696._comment | 15 + ..._1c33d3f62ec7119c116ad02b75c91f8a._comment | 8 + ..._7d3ea328a42c3a1df01f87e5233eca62._comment | 8 + ..._3c40b855e9914d8987b2f89d9abc29ae._comment | 14 + .../on_your_own_server.mdwn | 94 + ..._ae5af47faf95f008f1b07dbed5181286._comment | 28 + ..._b6a70e698eb4c46e753a620716c5956c._comment | 14 + ..._371f22ec58cf953c2b8abe3af71d3f91._comment | 10 + ..._6610f58b031d587f07f05b31754e4d97._comment | 17 + ..._b18e841b77cbec354d7641f37d030f49._comment | 15 + ..._a75d657dc322e1ccb02871492bef6f12._comment | 13 + ..._e818be55d40623167ce2d0381e7168e3._comment | 28 + ..._0778c23a67f7474753fb143ced6227a5._comment | 9 + ..._915965b46b03186eec466c51131c734c._comment | 50 + doc/tips/cloning_a_repository_privately.mdwn | 57 + ..._f5490d034074ca80a712bdd41c307139._comment | 39 + ..._0fb78b2183932da08809d60dfc5a7374._comment | 37 + doc/tips/deleting_unwanted_files.mdwn | 38 + ..._2d3cf347c754047875a26d7f73c6fbb2._comment | 15 + ..._8471758f2e02ebcfd9c015691ba9f15f._comment | 8 + doc/tips/disabling_a_special_remote.mdwn | 35 + ..._8762ffef0024a9396979fc2586965c5d._comment | 28 + ..._325dc29b8e82595806741b0ff8dd6215._comment | 8 + ..._6c7c92a9c5ce9cee1450117f0bab1354._comment | 18 + doc/tips/downloading_podcasts.mdwn | 94 + ..._4d4f6c22070b58918ee8d34c5e7290ad._comment | 8 + ..._d8d77048c7e2524968c188e1ad517873._comment | 24 + ..._0859317471b43c88744dd3df95c879f7._comment | 10 + ..._e8c3c97282d17e2a1d47fb9d5e2b2f7b._comment | 18 + ..._05a3694052de36848fbbad6eeeada895._comment | 8 + ..._21028bed8858c2dae1ac9c2d014fd2a1._comment | 8 + ..._4869fb5c9f896acc477c44de06c36ca7._comment | 8 + ..._2e278ff200c1c15efd27c46a3e0aed40._comment | 9 + ..._382f2b970738d9b1af577955c3083e90._comment | 15 + ..._f76fc6835e5787b0156380bf09fd81ca._comment | 8 + ..._f04bc32a34baeeffcd691e9f7cce0230._comment | 13 + ..._65ebf3a3bbf0a2aebd2b69640b757e16._comment | 10 + ..._98a1dacc8d264ff31801e6c5c5f2612d._comment | 8 + ..._00cc7a2fb936d7ea3d5d3764a1637663._comment | 10 + ..._62603cda8e581a2eb2cc799dffe8a740._comment | 15 + ..._e75af243654d15bc7b917fcd888bcf2f._comment | 13 + ..._2ee88c3375eca23fe34cab65df1e7aeb._comment | 17 + ..._a69b4c033d85406675bb70e6996590ce._comment | 18 + ..._e343aeda7c16c834599fb3caab2a51a2._comment | 14 + ..._f57a89a32a55dfae0dfa237a8981a667._comment | 8 + ..._a9a98cad7358d16792853a2ee413fe6c._comment | 8 + ..._5a8068a5cb0fd864581157a3aa5d1113._comment | 10 + ..._e7072a9da30b4c4b4c526013144238d4._comment | 10 + ..._79b3f8d678ac9f67df4c0cd649657283._comment | 8 + ..._35106fee5458bdd5c21868fbc49d3616._comment | 10 + ..._ceb16498b7aadbf04a27acd5d6561d46._comment | 8 + ..._147397603f0b3fdb42ca387d1da7c5ef._comment | 8 + ..._6a26a6cc7683d38fae0f23c5a52d1e23._comment | 24 + doc/tips/dropboxannex.mdwn | 12 + .../dumb_metadata_extraction_from_xbmc.mdwn | 29 + .../git-annex-xbmc-playcount.pl | 227 + doc/tips/emacs_integration.mdwn | 25 + doc/tips/enable_tor_on_nixos.mdwn | 55 + doc/tips/file_manager_integration.mdwn | 123 + ..._0f82520f415b4715946358658e1799a8._comment | 8 + ..._9cb6b7fcb8e33a75efd2f92d7e40a9c5._comment | 8 + ..._e7096737268cf66fce2709e9e4937f51._comment | 8 + doc/tips/finding_duplicate_files.mdwn | 21 + ..._5efc6b6ee1dfec88512183e9679ca616._comment | 24 + ..._630b065f41019716a5f6848e0adcd0f0._comment | 29 + ..._21f6ff2f7c51ca148fb8836a5e325e23._comment | 11 + ..._cd191275a277aee5de80507d5b5da69b._comment | 17 + ..._05827cf95647c56c344d150564cdf01d._comment | 8 + ..._9ea2c23d6099281f55122e39655d7353._comment | 49 + ..._ddb477ca242ffeb21e0df394d8fdf5d2._comment | 8 + ..._900eafe0a781018ff44b35ac232e3ad3._comment | 8 + .../comment_3._comment | 39 + ..._1494143a74cc1e9fbe4720c14b73d42b._comment | 8 + ..._1a35ca360468bcb84a67ad8d62a2ef7d._comment | 8 + ..._a6e88c93b31f67c933523725ff61b287._comment | 16 + ..._347b0186755a809594bd42feda6363e2._comment | 10 + ..._3af51722da0980b724facb184f0f66e9._comment | 10 + ..._7b4b78a5cd253abfe4f6001049bf64f3._comment | 10 + .../finding_which_file_matches_a_key.mdwn | 18 + ..._0379aaad5d1dc13e90c13ddd82719ce5._comment | 9 + ..._8feecf0ed92b958c902ea2032b5d9576._comment | 13 + ..._1775ca681b8471938a0173b21019f743._comment | 8 + doc/tips/flickrannex.mdwn | 50 + ..._50707f259abe5829ce075dfbecd5a4ba._comment | 13 + ..._ab5bcb025381b3da4d7c6dfd0c7310dd._comment | 46 + ..._90a331275d888221bc695003c8acbe46._comment | 58 + ..._1596e70dca71c853fd1d6fc9bde02b18._comment | 12 + ..._c728f10074d194efa8b2c60e97d275e7._comment | 12 + ..._2dd75800e4db58761fcbbd1954a36f1f._comment | 11 + ..._2f65093ec9f6d67d2cfe5b5fae201123._comment | 10 + ..._5bfe0988260b7825eeec204cd8f79b98._comment | 31 + ..._ef71e2f8c48b0399d9fbc419e850dc5d._comment | 12 + ..._d74c4fc7edf8e47f7482564ce0ef4d12._comment | 10 + ..._f53d0d5520e2835e9705bea4e75556f0._comment | 30 + ..._9ebba4d61140f6c2071e988c9328cf7e._comment | 14 + ..._4470dae270613dd8712623474bc80ab0._comment | 24 + ..._d395cdcf815cb430e374ff05c1a63ff4._comment | 17 + ..._8cf730097001ffe106f2c743edce9d0a._comment | 12 + ..._a80c8087c4e1562a4c98a24edc182e5a._comment | 12 + ..._94f84254c32cf0f7dd1441b7da5d2bc6._comment | 8 + ..._5299b4cab4a4cb8e8fd4d2b39f0ea59c._comment | 9 + ...ncrypted_git_repositories_with_gcrypt.mdwn | 156 + ..._4440a80d64c60c7312d5c405d54e607a._comment | 15 + ..._28eb9d4ebf28ca310f9b357b1dad244a._comment | 30 + ..._b697b2ab10705b090a78e7717ec59b18._comment | 10 + ..._4e37146a870576f09f56d2e5ee784ed7._comment | 23 + ..._2044e821d841fcd37a51ae768fa88df2._comment | 12 + ..._de4838d82987685896d4c76dac7cdb6c._comment | 9 + ..._c1194234e9f4fd469fa4b9fea72219e1._comment | 32 + ..._098998132fb0bcf130b5bf8a16ac8b8a._comment | 54 + ..._bdcb4bace530ac8b2018916893ae7e93._comment | 87 + ..._5c54690586f2a781905ea4b25aa1147f._comment | 18 + ..._07feedb4348f8c31176cc744c19368a1._comment | 21 + ..._c2f873dffa015f1d72ad0c3921909316._comment | 8 + ..._f8a6e4415f4fe6da14f6a3b7334bc952._comment | 18 + ..._11b8e82d2a234f65b58b823e71c6d6a2._comment | 10 + ..._3e41948e1beffcf279bb05ef8e61cc07._comment | 16 + ..._4ce0b26b25b336f07b2e27246cdfba3e._comment | 16 + ..._49aa34d75d24a2066baa8a585bc9c2e9._comment | 14 + ..._3784e0c828cd60b6a9075c2d32d070cc._comment | 14 + doc/tips/get_git-annex-shell_into_PATH.mdwn | 55 + ...ons_for_ranger__44___the_file_manager.mdwn | 28 + ..._358d4041c0158c247340cd4588286df4._comment | 20 + doc/tips/git-annex_on_NFS.mdwn | 75 + ..._e2e99f2c484597c0d314ae597be078c3._comment | 9 + ..._06f2ee5095cd35063a434560375e172e._comment | 26 + doc/tips/hashdeep_integration.mdwn | 114 + doc/tips/hiding_missing_files.mdwn | 146 + ..._eba2b140f9d5a9f7ee23cb3ba7da7612._comment | 16 + ..._9bff461eb281f67d169d4be30129bc13._comment | 10 + doc/tips/imapannex.mdwn | 25 + doc/tips/install_on_Android_in_Termux.mdwn | 1 + ..._dc277facdcfba4e175831467b0e450d5._comment | 8 + .../old_comments.mdwn | 1 + ..._8c24553afc5352c8a4c9cd0555423325._comment | 18 + ..._8f5f8f47305b45dca53222ac0e3bde29._comment | 9 + ..._a7bbf9e61e2e993eca9a9222de899920._comment | 15 + ..._b46679eac8d4d86b2abe9baff1f0a609._comment | 15 + ..._20a995c941f9a3582a8913d412e3d090._comment | 35 + ..._387e69f3ed94a00c01b0a097132f989c._comment | 12 + ..._2d7181f765cdbf545f161825c4cfeca9._comment | 11 + ..._37ba50a8378b2ac3d920fc8155eea42a._comment | 9 + ..._c1b5fefdc9a654579d0ada3db7a40ad8._comment | 8 + ..._5e0aa7c4341867374a67f5fe0a242e00._comment | 8 + ..._320b1fa3328cf8b8e584e72a9cd7735a._comment | 13 + ..._9651ab0e1e43d193cca16963f5fde858._comment | 9 + ..._3d1c6a1dc4ff8f04dffa4a02ad56fef2._comment | 18 + ..._39e2f2100a49f986760db389cf10240b._comment | 9 + ..._3a8c8facaa8b2989c88ebaabb984c7de._comment | 8 + ..._663de2e553ea050dd5a00fc88aeb6412._comment | 26 + ..._338e7f1b0fdf273d5fa453fe8ed2578b._comment | 8 + ..._82c4de6ad0ff016e72133d2552b5158d._comment | 9 + ..._66bfd7ca3dd81bb7632cb91fd8637dae._comment | 13 + ..._b475d3c36cf6d52d6b4720d00a5ae245._comment | 10 + ..._35329178895fc03395f08a37044e7c94._comment | 8 + ..._7ae18460ca6201cc313215a8a03e0d57._comment | 44 + doc/tips/largefiles.mdwn | 123 + ..._18f17926c44ea4b0c17a61a91c6bb5b5._comment | 9 + ..._e7c83e38c92b8fc91bae140c1d7c007d._comment | 9 + ..._16176199c4c98c66dd40b5eae95122ed._comment | 13 + ..._b541d011d4c7f23227426c783a4bdc20._comment | 11 + ..._2f8d8e73e4218b1e36e358770016cabe._comment | 9 + ..._cd71d1c6e69a9fc7feadf9aa6a39c406._comment | 14 + ..._d1f24df21ac577b89a8ae385532de6f2._comment | 8 + ..._4c6f52958246757dfbedd0b410d43ffe._comment | 11 + ..._066fdebc2655dd11077fda1ef6e102e4._comment | 9 + ..._b84e5cb8316c30fc7b355234384a5899._comment | 10 + ..._825b72391117f88062a585684cf62eeb._comment | 13 + ..._f4df42fe943011cc8feb2921a59616e9._comment | 8 + ..._b6380286f60c1cd46a82a2e90c7aa05f._comment | 14 + ..._20c6702f83dbade1ac4d6eee30c40b4b._comment | 32 + ..._639b1492271643566846b48fe13f7b8d._comment | 22 + ..._35a634c5e6d780972b9e938065837988._comment | 9 + ..._f036356b23a4690705a2b4df604e82ba._comment | 21 + doc/tips/local_caching_of_annexed_files.mdwn | 105 + ..._c93895a509ab4e458043450bccf930dc._comment | 23 + ..._5bf79eae24dd6b69daa1cd10e0b4d296._comment | 14 + ..._cbc8fbd8a98574683008ca363d3ac6b7._comment | 8 + ..._18514bbfab0ff0d8a70ce5b08436cd44._comment | 11 + ..._7afa02db922ef1ad9d4031a87e4b688c._comment | 8 + ..._a1ce74ef47a0512bc56ff323c2c03c75._comment | 12 + ..._3f4950f7dc51472b5f0405baeac187a0._comment | 10 + ..._d1f0d7ac76f704ea71c4971ee7ed0cde._comment | 11 + ..._6b21f1ed5a2cbbba7c7042dcfec080a8._comment | 10 + ..._490c15d7673c535e83c7f1df3082e7ed._comment | 10 + ..._ad1ab9d78cc0c45fcda54bf9f03b4f8f._comment | 30 + ..._af084d315d82c1bae85122939042305b._comment | 76 + ..._3776a0371faccc673c868323278f3b0d._comment | 8 + ..._b047ea1c6b9247a42b560a111d4fdeae._comment | 17 + ..._994f408b01fa09e80599538a4ff28485._comment | 32 + ..._d3ac760cfee0decfbcb4f81ddbc39a3f._comment | 11 + ..._2a80533f259cde64662db7e6a1c1742c._comment | 28 + ..._42906e52528907a0960ab8b08c2eedd4._comment | 20 + ..._dc1e5e3d256a2618f6c2a7864b01c08e._comment | 51 + ..._c0d79b07a4c83c9d081d7c8f702fa4dc._comment | 10 + ..._ffdf07bac38a6c29b799281441fd32c9._comment | 9 + ..._0e4571cc81ade6510b7a1ddfff9cb055._comment | 12 + ..._7db7787a306c70ba3c1687c1d103608d._comment | 9 + ..._update_when_changes_are_pushed_to_it.mdwn | 25 + doc/tips/mc_menu_integration.mdwn | 18 + doc/tips/megaannex.mdwn | 14 + ..._eec701662debd2a78c48243dbcebf59a._comment | 8 + ..._c1158b7ec15646d64cae8215ce845642._comment | 10 + doc/tips/metadata_driven_views.mdwn | 152 + ..._1d6793701fd8a1a66bae04662cf853ce._comment | 12 + ..._13ae4e3668b693c0eefaca23b88515cf._comment | 9 + ..._196f55e52a5d8a8f061603ab87ad04ad._comment | 18 + doc/tips/migrating_data_to_a_new_backend.mdwn | 31 + ...disconnected_directories_to_git_annex.mdwn | 77 + ..._d94ae69945416e57faa6e6dd5536f66e._comment | 59 + ..._c6c11a9d5f9f136fa541404cdc49f45c._comment | 8 + ...remotes_accessing_the_same_data_store.mdwn | 61 + doc/tips/offline_archive_drives.mdwn | 69 + ..._3d4fdf42191a9d81434d00f51c3609ff._comment | 12 + ..._864c752aa8d064791a4b14dbbe2e6882._comment | 15 + ..._7be2ccaf70c9ecfc9a34384e0e31f490._comment | 10 + ..._f9f2f8c59818d3d48475fa3cbf339ba3._comment | 19 + ..._25c92a3602a1365d68e6bab080e4a41d._comment | 28 + ..._f64f48f2bb5325bf9e14e2aa96a94429._comment | 17 + ..._c8b506c4b2da98be430016e219680e34._comment | 7 + doc/tips/owncloudannex.mdwn | 14 + ..._129652308c3c499462828dcaf8e747a4._comment | 40 + ..._38604990368666f654d41891ba99ac61._comment | 15 + ..._1bfd290d00d6536da7d31818db46f8ec._comment | 87 + ..._492b6922a7c5bb5464fedb46b0c5303b._comment | 17 + ..._1d48ac08714fadcb06d874570d745bd8._comment | 16 + ..._65959f49a2f56bffd6fe48670c0c8d5a._comment | 8 + ..._7482002991672ef67836bae43b8d0be8._comment | 8 + ..._6579203d726f4a39db02fcdda156e12c._comment | 8 + ..._e52582d76e9b57cc11791f2730389605._comment | 8 + doc/tips/peer_to_peer_network_with_tor.mdwn | 232 + ..._72d4ea5ffa23f5048c453c2e7510e2f0._comment | 12 + ..._8180e202fc493ad07999a3367ccd9425._comment | 15 + ..._9fc514cf5273dd4a29dfb3ab81346425._comment | 12 + ..._917eee70600e13470f70555abe06597d._comment | 16 + ..._6db70bb9266a92e249587bc4d095c472._comment | 9 + doc/tips/playlist_fetch.mdwn | 29 + ..._5310fd53406d35f36deff68e8c2cb599._comment | 14 + doc/tips/powerful_file_matching.mdwn | 36 + doc/tips/public_Amazon_S3_remote.mdwn | 61 + ..._a2684b49dbc2de45b644523f47b3c891._comment | 48 + ..._f155c3aa054a23df1ab057baaa300a62._comment | 15 + .../publishing_your_files_to_the_public.mdwn | 78 + ..._40f690c59de96159da96855c61bb5963._comment | 14 + ..._0287fd56eea34fcd5831768252335a7b._comment | 23 + ..._4ae6d6c5137e5f9b667417c2c77fca85._comment | 18 + ..._33b50a2de3f1268c875fc388a85c0296._comment | 11 + ..._3216edeefa99f484194d6de061283170._comment | 8 + ..._06cba66922cc382c112fdac52b98bb4d._comment | 9 + ..._caf9ad71e3805347df98f4d6df352cec._comment | 19 + .../old_method.mdwn | 88 + ..._48f545ce26dbec944f96796ed3b9204d._comment | 21 + ..._27a40806d009d617b3ad56873197bf87._comment | 7 + ..._2f5045629e40e8d881725876190c7846._comment | 9 + ..._37405f20da790141187e9f780c999448._comment | 11 + ..._29c3ee4aed6a5b53b6767a96a7b85ad9._comment | 7 + doc/tips/recover_data_from_lost+found.mdwn | 18 + ..._f0901527a4f0faf0b1fd916d5b809314._comment | 9 + ..._ac405575058beeac992d07c55f7c53a8._comment | 8 + ..._02cb9efd54d8447d0bd11e5981e7dca7._comment | 13 + ..._960fcfe8c5c7bcb7350f61ecfb84f36c._comment | 27 + ..._e887b2d2ecbce3de22c517afd500e783._comment | 13 + ...overing_from_a_corrupt_git_repository.mdwn | 17 + ..._f5827be97f78dbae113a5ba0c9ced896._comment | 8 + ..._e98df7275bb032308bb87e3607bdde32._comment | 8 + ..._11bece6dfac090edbcd783b266c482a3._comment | 8 + ..._86e99017f7585ac2f76753051214637e._comment | 8 + ..._c8953732ce353cdf0c4fb81ddc98c04a._comment | 8 + ..._d0da84df0241dc6ccf0aa0c7598917df._comment | 8 + ..._addf49556e4c33d55a41c393f519d0a4._comment | 10 + ..._505a2fc2b841fe8eb419801f923ef35f._comment | 8 + ...ry_by_converting_git_files_to_annexed.mdwn | 53 + ..._aece062800c6ed78988161d40e36bba4._comment | 11 + ..._6b682415956756b969767f7de267f1f0._comment | 13 + ..._7e92db3d8a392e43b305fa8ecc0e39d3._comment | 39 + doc/tips/remote_webapp_setup.mdwn | 49 + ...e_or_dvcs-autosync_with_the_assistant.mdwn | 41 + ..._d1bd5d6b33951f6d11185bb4a8228269._comment | 8 + ..._54692ebf854ecbcc5314bb29c33ecc66._comment | 8 + ..._907e4032ca4a39adb846cf16dbf447dc._comment | 8 + ..._902d001ba86657ef0f8cca5b175f99ca._comment | 8 + ..._a1cf93f9b29658f0f26e9e0ae6057ee3._comment | 60 + ..._e10671908b58c554375787d0f76e2366._comment | 13 + ..._4114380f66b6376c851e93f6876d590b._comment | 8 + ..._6a5d6af107b297afd008b021f73d787b._comment | 8 + ..._74d57cf503a86d8f7ace2d769dbb58be._comment | 10 + ..._85765c0cfeb5b326c06cf60c98147cbf._comment | 21 + ..._082b5d90ffc836e7c86e40b63a75780d._comment | 8 + doc/tips/semi-synchronized_remotes.mdwn | 138 + ..._d0459d72b7e0441fe833a5c8e1588a4f._comment | 19 + ...tup_a_public_repository_on_a_web_site.mdwn | 31 + ..._5554d52c568fdd5235c498ba999545cb._comment | 11 + ..._5fc7b153f1822c8ae2d415963fcb9ce2._comment | 7 + ..._eb732e9c1c44942bc313aa1ab3ff56fc._comment | 8 + ..._4332e21dcbe4fdcbab58f01aca295fc9._comment | 9 + ..._1d0fa6da33e401df1d7ff31979247fec._comment | 10 + ..._b98b761dee9d923153e3c288c1d987ee._comment | 11 + ..._a6698218f15c598c9b32e0af850133bf._comment | 12 + ..._e20ea0dc04d4d62b699271483f81a136._comment | 9 + ..._0bb7c62b71d2c9da6fbfe8f889baff38._comment | 48 + ..._89eac454cfbdffabb916355b355e1b94._comment | 8 + ..._6015b7ad6a19f412d0b50bfb3a661fe2._comment | 8 + ..._ceb528ff60b9c7544eae28292ef74ddb._comment | 25 + ..._2dfb5b225ed62c0310ddadb0d83ceb79._comment | 55 + ...nnex_directory_between_multiple_users.mdwn | 39 + ..._01db8cf9dff016bd8e0498d36f325418._comment | 8 + ..._07ad0b2f6fd2644241a605a10d8fb8d0._comment | 7 + ..._3bfb9e0e028f71c8a47e5363dcfdbd36._comment | 12 + doc/tips/skydriveannex.mdwn | 32 + ..._c3465b5587548dea56b80b32cd66d653._comment | 16 + ..._13692d8cb9ccf10ced26d90739385a6a._comment | 47 + ..._bf383481b2bbb962fbfe783b9f2f213a._comment | 8 + ..._1f747018b35ab8accd2bf0905e6ad926._comment | 8 + ..._8b9444006734262693f71e50a40eae1d._comment | 19 + ..._8b01dc6ca1082a8c24ff65fec9d759d8._comment | 8 + ..._1d220d96945d497f3a93b5d848eb3995._comment | 8 + ..._a7a3afdc7eed9a0eda48dcb57f1e87c6._comment | 12 + ..._7fcd9c6b5e2a3fc7b753eeac06164036._comment | 18 + ..._856eaa1b167033aede91a937099c7833._comment | 18 + ..._cfcf767a1bf07957b76d7f44ef8a9500._comment | 14 + doc/tips/splitting_a_repository.mdwn | 126 + ..._654527ef2350fe871e2d7ff6addc6713._comment | 25 + ..._2437e95397e1b06ade5360405e399591._comment | 8 + ..._c0ccbf6758eabf645075d3b84188825e._comment | 12 + ..._fbf9d86fd3aee4542a7cabacce9578cd._comment | 31 + ..._baf4871cb78b337c627a352333c4e39d._comment | 25 + ..._ce243a141a286e5e1a55af8321238b5c._comment | 94 + ..._0d11c72712da0cf36b8cc91ba7501d52._comment | 15 + ..._72ebd848d406190e12e3291cff824f7e._comment | 137 + doc/tips/storing_data_in_git-lfs.mdwn | 69 + ..._e4eb406a4bf146c1f442047a4c1b1e1a._comment | 24 + doc/tips/transmission_integration.mdwn | 11 + .../transmission_integration.sh | 38 + doc/tips/unlocked_files.mdwn | 160 + ..._add35d419c7735571208aa5e47437f99._comment | 8 + ..._08102655fbb13e4977e82f3f097f28db._comment | 8 + ..._8cd7855dc6419297174a32e847e5f49a._comment | 8 + ..._99f82c84aa9d886062aa3e3956e1acf8._comment | 8 + ..._e3425d219001fc34470f0cd55fc7241e._comment | 8 + ..._4be14df022612d6301442b3210a17d0a._comment | 11 + ..._61121c6b95e1310df8132aca13924b88._comment | 8 + ..._15c6f8db289812e76859b21d158b1b2e._comment | 21 + ..._29cef6b8e48e722fafed3fe9b7cefe08._comment | 14 + ..._54a1811ef2f57f0843e48572ab6713b8._comment | 15 + ..._f5f29661bd04a6bba6158307465981d9._comment | 10 + ..._a8139747da8cbb2510b3647ba448d72d._comment | 20 + ..._8225cb96640697d4955badfee5b75e39._comment | 22 + ..._666d88b862a7f6f5cd719e454a8a6469._comment | 11 + ..._46ff6b142c4cc9ad07b0c8dc07ba9c09._comment | 16 + ..._9e5d1a9523239cb601612951af5eb9f1._comment | 9 + ..._1cfd5f680f2d19ea1039ff0e7324083f._comment | 8 + doc/tips/untrusted_repositories.mdwn | 28 + doc/tips/using_Amazon_Glacier.mdwn | 74 + ..._ccee7f4f5a483a3650270b6e09ab7293._comment | 36 + ..._d34e05f9244d3a4fcec87b3c360adb4e._comment | 10 + ..._4c504fd22775afe36296cf54d3e04a8e._comment | 8 + ..._e6ac76b0c20285f4f96b3d0975e8ac66._comment | 21 + ..._7788890f58f714b0cdf1462c718ea536._comment | 8 + ..._0fbe528a57552622e8128196ad80c863._comment | 8 + ..._a83cfe55f4c70bd8801e0c05c5be8323._comment | 22 + ..._ddef6cc5d1a5fd3d69cfe8cccfa58a53._comment | 8 + doc/tips/using_Amazon_S3.mdwn | 43 + ..._43f3f12a83e3ace1674eae395b865409._comment | 9 + ..._70b4e62aabb93d078811cbdcd3cced20._comment | 24 + ..._d00472bf4ac5f7b2212073c081ba04c2._comment | 12 + ..._30bdbd217fd2b603984cf7d3a3dce266._comment | 37 + ..._5bb12e6fa51da00ecf48f2dee1bfb050._comment | 14 + ..._d8cc20706debc17f4f738d2019577dea._comment | 25 + ..._bb2cb128d9c6a8e9176604cef1f6fc91._comment | 9 + ..._666a26f95024760c99c627eed37b1966._comment | 8 + ..._f5a0883be7dbb421b584c6dc0165f1ef._comment | 8 + ..._32acba030c2ad252e2f7027075e4303e._comment | 8 + ..._92df5a9f923beafba55a1c455728112e._comment | 13 + ..._6b288e06010bedbb71e0afed6b427704._comment | 8 + ..._3b6c74b40ea666389ac04b52ab0819a0._comment | 10 + ..._cf6755d88463878f2ea6e4c300899027._comment | 33 + ..._4f9c2f6627f8ed3423bcc8b7bf2f76cb._comment | 10 + ..._47e4ea77d0262d332d86a06d7aaeddd8._comment | 11 + doc/tips/using_Backblaze_B2.mdwn | 25 + ..._b8b045d5f3d2bed1905c05b4fa00c5ca._comment | 9 + ..._d7fd727cb38a0290de10f06539a23d27._comment | 12 + doc/tips/using_Google_Cloud_Storage.mdwn | 19 + ..._c576182f39563ae68767391c4227a177._comment | 18 + ..._0843bfb776b8b6d5de4de7fda4489f34._comment | 15 + ..._9738f145014d8eae1f1aae7c39e71d31._comment | 12 + ..._63f29692ef270cd4a196ec94ff97185a._comment | 8 + ..._865f27a393f24fd5723c895d4d70dde3._comment | 17 + ..._d1462d9d1d425e609bf8ad8fb8f0a9d5._comment | 14 + ..._6896ea720bb29db35db4c5e2463fa818._comment | 13 + ..._1b4eb7e0f44865cd5ff0f8ef507d99c1._comment | 9 + doc/tips/using_Google_Drive.mdwn | 9 + doc/tips/using_Hubic.mdwn | 9 + ...fficient_storage_of_old_annexed_files.mdwn | 60 + .../using_box.com_as_a_special_remote.mdwn | 81 + ..._be39f063e8a6155cc2eb71829e884a63._comment | 8 + .../using_git-annex_from_your_program.mdwn | 100 + ..._no_fixed_hostname_and_optimising_ssh.mdwn | 59 + ..._c0b7682a2b6f3078457b85683c825baf._comment | 10 + doc/tips/using_gitolite_with_git-annex.mdwn | 149 + ..._8767bc8014b459a3cd76f275fd4fa8d6._comment | 8 + ..._00715e0b47f09130e0e536e29f7b9258._comment | 31 + ..._7027ce60265b8f24c8ab54553e544068._comment | 8 + ..._75218b7409c0e281cb01c9b2791e8cdf._comment | 20 + ..._7d4d4515218d1259d32be3baeb5ee56e._comment | 13 + ..._dc6f21b5a3d5931c8d949a9753411b9e._comment | 29 + ..._8e5039e6655fc80dc863b6cdf44ef02a._comment | 15 + ..._9c40e1da8bb44f7207e802377f5cf923._comment | 11 + ..._f1a180d5cf65b7a870a13ddb4f76d00d._comment | 21 + ..._33c19097b6f2b48dfe09ec4c8d952d06._comment | 11 + ..._9a2a2a8eac9af97e0c984ad105763a73._comment | 15 + ..._c82af00db3dd74ee9bfe12668e76e57b._comment | 13 + ..._d2feaaf22d41413048dabf706d1b267e._comment | 8 + ..._90ead0e1fe8615fe11f6f1bd7dcd7e84._comment | 13 + ..._70dcb7e7ffdd14351adaf4c40ee7fdd0._comment | 29 + ..._a62f59295b3912dc38def5e493bdb55a._comment | 23 + ..._08b3b257b3dbd32cb807e29f512ea9c9._comment | 8 + ..._d8efea4ab9576555fadbb47666ecefa9._comment | 8 + ..._807035f38509ccb9f93f1929ecd37417._comment | 8 + ..._eb81f824aadc97f098379c5f7e4fba4c._comment | 33 + ..._f688309532d2993630e9e72e87fb9c46._comment | 20 + ..._3e203e010a4df5bf03899f867718adc5._comment | 25 + ..._f8fd08b6ab47378ad88c87348057220d._comment | 10 + ..._8249772c142117f88e37975d058aa936._comment | 29 + ..._28418635a6ed7231b89e02211cd3c236._comment | 8 + doc/tips/using_nested_git_repositories.mdwn | 7 + ..._cd7f673de1c39d2f37d9958357d5e72d._comment | 11 + ..._63f30b652c0cbdb0acf6745891f9f09e._comment | 19 + ..._029571d8331ba2dcf0b149d071fef75c._comment | 13 + ..._3c701a4c6789fc6c73f71217e7ed8c65._comment | 14 + doc/tips/using_signed_git_commits.mdwn | 79 + ..._82241dc5666e1b573a24b3e84f3991ae._comment | 10 + ..._5fb568fcd3aa376d2ee36c660a4a02a2._comment | 9 + ..._3edce6f128e96e1156601c6136118427._comment | 8 + ..._5ad0596373cc363ec9bc0b69efbac03c._comment | 21 + .../using_the_web_as_a_special_remote.mdwn | 150 + ..._9889828caa47aad88267d0ec35f2240d._comment | 7 + ..._1704dcd7fc94432af5aa18459495c9ab._comment | 7 + ..._2ce018f181e039b5dd52e2b712f63eea._comment | 7 + ..._39122e2587f84633fda262bfc9d076eb._comment | 11 + ..._3a923511cf20d816b468044c03eb171f._comment | 13 + ..._8981dfd222cbf349bac3d74f53675fde._comment | 8 + ..._321a41d611c6fe45e047af9c96c5176c._comment | 26 + ..._dfe9c8c49aadff80d2020288584e0390._comment | 10 + ..._ed8dd3bbd9b9ae7f2309b72b94f61eb1._comment | 18 + ..._c1133a524989a940f1b5db588707157a._comment | 10 + ..._5ee9717e74ca2afed98e81fc0ea98a95._comment | 18 + ..._dceb15bd656e69eefa3ca975d9d642de._comment | 8 + ..._0bde977c62a53c90cb20491936bc399d._comment | 8 + ..._3f32d536f51d5e9908953caf5736b0a0._comment | 16 + ..._b420b1f320d620a9909cce5086c549bf._comment | 8 + .../visualizing_repositories_with_gource.mdwn | 22 + ..._01c5cd21375990c612b8f291904ddb3e._comment | 10 + .../screenshot.jpg | Bin 0 -> 78509 bytes ..._to_do_when_a_repository_is_corrupted.mdwn | 27 + ..._c3543190eae2af594f3e050057e80db6._comment | 8 + ..._025178c2b11affe2d42a87544b897dc8._comment | 8 + ..._9a6bae9c0326ecc7610f5415db20f49e._comment | 8 + ..._d4178d99179e8761162c74673042e28a._comment | 9 + ..._9b3738aa678015a58f30a22baa2012df._comment | 9 + ..._0e3224af10362a10aa1c8786423960a9._comment | 7 + ...what_to_do_when_you_lose_a_repository.mdwn | 19 + ..._cf19b8dc304dc37c26717174c4a98aa4._comment | 11 + ..._fa9ca81668f5faebf2f61b10f82c97d2._comment | 8 + ..._fdcfca8707e310ca7bb94d359adf8607._comment | 8 + ..._679eb9be0bfb9d48a2b96383c4816f62._comment | 10 + ..._4fb04b70d88ec93ff9ed4f884747d5d4._comment | 12 + ..._05db504cbff2ec2a6346bf43e57a3c25._comment | 8 + ..._4e6baa41bfee6edf2b17d4ade2909c7b._comment | 16 + ..._596bcfa25a4fa6e81bb6a0940c55a2f2._comment | 7 + ..._525e58e5941220b23b0ed73fa7611db1._comment | 14 + ...nother_simple_disk_usage_like_utility.mdwn | 9 + ..._41b212bde8bc88d2a5dea93bd0dc75f1._comment | 9 + ..._73698913837bfd5a58cf15721211e43e._comment | 8 + doc/todo.mdwn | 8 + doc/todo/--batch_for_add.mdwn | 8 + ..._b1362c86e162a49717d7e3b0816025ba._comment | 12 + doc/todo/--batch_for_find.mdwn | 6 + ..._d164ad661617d29cb1ceb3d6fc3bb37f._comment | 12 + ..._9873396186f4d24088fd746f42373678._comment | 27 + ..._598a0500a3a4573c50a559d1931f1918._comment | 8 + ..._830cf616968e25cee8e7d35f9709f79b._comment | 7 + doc/todo/--batch_for_info.mdwn | 6 + ...more_debug_information_from_git-annex.mdwn | 7 + ..._58e729e2fa58b28d247eeda579bb9329._comment | 20 + ..._66a32cef4ff6bc93ad04346612f543ec._comment | 22 + ..._ea60112be683188e43b27942667ddd77._comment | 39 + ..._03cd162638a9b4f2b7981cee141693f6._comment | 23 + ..._f27efaef3d9cb8db3de9dd42df252059._comment | 14 + ..._d9014e7e964f47a4fdc680ffc53e17b8._comment | 13 + ..._5ae9913b8b9a9fe443c211976adce002._comment | 29 + doc/todo/--get_option_for_diffdriver.mdwn | 5 + ..._6b2501b2dc0318242e444e8d4b8b314f._comment | 17 + ..._cb4eb05f447a214353a5bd5c29d207d0._comment | 8 + doc/todo/--json_for_registerurl.mdwn | 14 + ..._68fd330b6f20ef2d56234a639a5323c4._comment | 22 + ...annex__and_ideally_any_other_command_.mdwn | 118 + ..._9cc7829b4742f21077a27caad7ae638e._comment | 17 + ...me__62____61__VALUE_string_comparison.mdwn | 95 + ..._e2da4d1fceb5f7c37e3c19d42256c8d5._comment | 10 + ..._38c46dee95ef2f246cd403717faaaa09._comment | 37 + ..._9c298fbda8d395fe9b8395105708c3bd._comment | 10 + ..._b8f2602e633dae4c85f89c97c8f03d81._comment | 24 + ..._afba02fb24eddc6569dce63ffe606dcf._comment | 16 + ...nfig_for___39__ephemeral_clones__39__.mdwn | 8 + ..._7815551c0ec6d933ae5537e28fb183ad._comment | 78 + ..._2debe0cb11763f0673255cfd7f764815._comment | 14 + ..._b559ac06e7fc622b8bbb5e73d4cc0930._comment | 11 + ..._8cb8cdef0cc563714d7bc7d91743762b._comment | 7 + ...or___39__recently_touched_files__39__.mdwn | 46 + ..._bcb54e40904b04006dd7f8962add6994._comment | 15 + .../Adding_unmatched_files_to_a_view.mdwn | 15 + ..._dee34c34b2df1d430a4f6c2792d35e28._comment | 52 + ..._271f37d6c3e0f61324f9f50cb9cf24c7._comment | 8 + ..._2e2a15ffc429db4b09215e7a7118e502._comment | 8 + ...Adressing_.gitattributes_inefficiency.mdwn | 22 + ..._335b8d3c5a903c1e83a7f84b7bfc2998._comment | 28 + ..._where_key_could_now_be_obtained_from.mdwn | 14 + ..._9f4245bd016f9283464a25698563786c._comment | 18 + ..._34d1eab194b7913dd453131d9187287a._comment | 24 + ..._f667aa26dadadede318d31176292102d._comment | 31 + ..._16d30e86132d6a3cefaa8e2fecbda7ca._comment | 21 + ...ization_WITHIN___40__web__41___remote.mdwn | 34 + ..._ff4c23b4ccaf649a9914f4aa4435968d._comment | 22 + ..._a7087acb84b3139418c597496e18f4a1._comment | 9 + ..._69e39ee8140ef0cafd1b0f21be6a8d37._comment | 9 + ..._afb7fb3750e3b16bf144c52ffc68c153._comment | 9 + ..._f2172080e8e3e324a739d8769dca2ed0._comment | 8 + ..._1ab2634c8a7058c5aa09f1ba72be3471._comment | 10 + ..._6970e60b7d826beb025fda452cc1bc13._comment | 50 + ..._8fe7f4c03784f519fd184e6d59fb0b2a._comment | 49 + ..._4d8e8abe8b31174ccc536387a96b0228._comment | 10 + ..._b6261ff8e442ee6df79834844f6b3565._comment | 8 + ..._50516fc4b3c315a9e5d771777fb27e9f._comment | 11 + ..._87ad54a694bde70713e71acd4e074894._comment | 10 + ..._4029b264ea2b0d47e6949f832af69282._comment | 16 + ...low_globally_limiting_filename_length.mdwn | 11 + ..._and_ignore__42___in_git_annex_config.mdwn | 12 + ..._7a55c03691a6b6738d1a0e2555cb4cea._comment | 15 + ...4___shortcut___34__Add_to_Annex__34__.mdwn | 1 + ..._286279b96fc7940c9e7eeb0eb57cc279._comment | 13 + ...Scanning_for_unlocked_files_...__34__.mdwn | 9 + ..._41cf16d6d14d1551c43736f854da3d05._comment | 10 + ..._2ad0467b36d7e7be3b346dd54ba4f46b._comment | 12 + ..._70c4c9f6c35acd7ca1134ac74356e5be._comment | 16 + ..._440624874dd3697dd538655765f2b6a2._comment | 18 + ..._cf70ca1f6dac58c44ee3ece2199d25a9._comment | 9 + ..._06641815750038a0ed908d929868c1c3._comment | 7 + ..._adf57675c5fa1047ee48b16dd356f4fe._comment | 11 + ..._c41b669837be95b731bd68f1b3269fef._comment | 11 + ..._4e1e8fd89ea9be43d89e72562236c979._comment | 14 + ..._b34a9cf4114ed943fe4ba2de78eb0bbc._comment | 19 + ..._94395a48d99e4737dd0ee28a597bfe70._comment | 29 + ..._e9a36e9600561201969c4d21499833af._comment | 28 + ..._8f5dd9ba761e636ce5413da4e596296d._comment | 8 + ..._bd7c278922a52004540db79099e35763._comment | 8 + ..._c3f029b865bcd489d03bcf722dfa4e44._comment | 26 + ..._2cb31617bb7003c5bf0e5def358da0e4._comment | 20 + ..._2aab5c685ad934486e60065b3c8da1bf._comment | 46 + ..._a5089531b5d9bdcc90a07cb9d3f1da7d._comment | 12 + ..._e2718b6492d5da64a8bd6b13ad1cfa45._comment | 10 + ..._71d3936dc37349392e6f7b0bd8292b7b._comment | 16 + ..._7ada8d7e9438f2740b700e2e54b045da._comment | 8 + doc/todo/Bidirectional_metadata.mdwn | 23 + ..._9974d17e407fab14b12399016d3d66c2._comment | 8 + ..._c791aca6da2bb1be70991bc1a76982a4._comment | 20 + doc/todo/Bittorrent-like_features.mdwn | 66 + ..._f4c110ef35ebf4fd89f06edf2c4f0c48._comment | 13 + ..._83148bd5c5c5e6c2eff3ad6e1d4fb82c._comment | 8 + ..._84f149b30de1562593623aa23dc0396c._comment | 10 + ..._7c54c83e582c0d4848aaf3d70e312707._comment | 10 + ..._194dd0e8404ea72af9fb6ff34b994998._comment | 20 + ..._489505da4143fb1c2bf21e7af695cdef._comment | 9 + doc/todo/CHECKPRESENT-MULTI.mdwn | 5 + ..._181a908a9f77a4c51d1d09f1aff526b7._comment | 8 + ..._87857aeaf45927846cde8cea70f9e6f4._comment | 27 + ..._5228016c35ca0b13545b82bbd3b9455e._comment | 20 + ...rive__39___repo_even_if_set_as_client.mdwn | 22 + ..._e33dddf4d1f104107c86800a0a9a89b2._comment | 7 + ..._25eb2d7d0a9cdd1c55df0cec68472723._comment | 10 + ..._9e9b96e5113a50533251e946c2560d81._comment | 17 + ..._6b091198ddd6ed709b076df1296aeb77._comment | 11 + ..._118b588685b535cca4c02eb6ef297c67._comment | 21 + ..._5cead277493e1c020e16be6f9245fe33._comment | 12 + ..._0f135f97c2808dce094628dc6608e617._comment | 8 + ..._1d6f47f9e6cf935f19d68af6d5aa92fa._comment | 10 + ..._c5758fdb32348b9cd804ff17d27864e1._comment | 16 + ..._3f0bfc5a79aa59ac76a6968aacda6655._comment | 10 + .../Configuring_metadata_view_filenames.mdwn | 1 + ..._08f8f27e5a8dbd80a91ffd9fd6f64e6c._comment | 23 + ..._34efe1424a9b02dca706565517900bd6._comment | 9 + ..._dd7aa7560412d4589d2fc28eb978a71e._comment | 10 + ..._1873c7cdd142dffc210ec0172bf29997._comment | 14 + ..._b222634d9f97e2ef604b476df357d54b._comment | 26 + ..._1eb8c2d70ff9e3e5b3dbebf88270eb93._comment | 9 + ..._ae259f68ab5b366b6fd29e5df1a05469._comment | 10 + ..._2bcfc677da72637f34904b84fdd95c10._comment | 9 + ...flink__47__clonefile_support_on_macOS.mdwn | 11 + ..._81bf4ac2fe810cc4e7a21c8bb4d0f15a._comment | 8 + ...7__reflink_support_for_unlocked_files.mdwn | 3 + ..._52db92711e28abb0eb7a346646b91573._comment | 13 + ...be_a_file_in_function_of_another_file.mdwn | 17 + ..._b0132288c67054485e9681f3f5138768._comment | 8 + ..._4efe2044282c8ccd6d570e84bb2ab68a._comment | 8 + ..._a9e02d7a27fd4448c1afd19e3f171a5c._comment | 12 + ...__34__create_encrypted_new_repo__34__.mdwn | 14 + ...s_already_in_.git__47__annex__47__tmp.mdwn | 1 + ..._0650918c86fca0554755aede19a12fd3._comment | 53 + ..._aa6bf987de3dfc9f78eba30b4b2c8c16._comment | 11 + ..._3419d2603af199fd311f6898adef5ed3._comment | 28 + ..._conflict_resolution_to_git_conflicts.mdwn | 13 + ..._c08e7f51503f103c447064a01b085783._comment | 19 + ...71__git_annex_watch__187___is_running.mdwn | 5 + ..._e5f2630591ffa7758ca4250a061a8589._comment | 12 + ..._f8a5cc905d5b06bdbb1a778ab866a28c._comment | 44 + ..._626c629654508d0d948ece849d43ed86._comment | 8 + doc/todo/File_deletion_workflow.mdwn | 24 + ..._7b80d9a202ede51730cbd443731e1fa7._comment | 39 + ..._60b54e6bbb37464697b4f5c4ebe561da._comment | 23 + doc/todo/Filter_a_tree_with_pattern.mdwn | 55 + ..._17dac31227b8f95c5ca50f4a4cf5a425._comment | 14 + ..._e2b0b3eafdfdab1e315066ac57c8b838._comment | 9 + ..._ca3058fe82eff771f3664ab2f8aa78ae._comment | 9 + doc/todo/Fsck_remote_files_in-flight.mdwn | 7 + ..._1a70ae7c9821d664ddf72fd4c431be29._comment | 28 + ..._3baff888fbc3068571cdc9fee73fbe36._comment | 29 + ...eys_with_same_hash_but_differrent_ext.mdwn | 13 + ..._5af33851bdac4f34d83e8ef2e1d45355._comment | 8 + ..._ad76bcde941d6f1719260179a7bd27ba._comment | 33 + ..._51945c553d70ae76297ed4aaf3c8b624._comment | 30 + ..._2f496cb303c90eaefef955082e2bfb00._comment | 18 + ..._272be474bd9ee8d087821bd8a6e88175._comment | 32 + ..._be9a58f2028fb3c155ff2020dee2b46b._comment | 8 + ..._fed82ecac17e6ed86eb18232d4b5ae6a._comment | 15 + ..._82c04709fe3b69d6a75e44d71b500681._comment | 12 + ...__git_annex_sync__39___optionally_add.mdwn | 38 + ..._6d9ef10f9534c7b95ca58913cfe3b5fd._comment | 31 + ..._25be855ca688e37644fa86357b96b3d2._comment | 14 + ..._8327e0a3f3d4bf35c52b1f2f4089dcbc._comment | 15 + ..._8b150a2a4b9b0de8039ee8995c01bf8c._comment | 9 + ..._0156a70246f19beeee6ce5cfb510de86._comment | 8 + ..._b0f6d52ef7a94badd572c6cfa759efb3._comment | 18 + ..._6c4c1541a146c66c11ebe6abaf7f1810._comment | 24 + ..._2160800299fff5dc920847bec1ab0220._comment | 8 + ..._eeb1bb0b1a02a74291daa41e9a8eb725._comment | 17 + ..._a49dcb3963a986c530571f69fa9326b4._comment | 18 + ..._cf4ed68e05fd7d553a314746b444b7c0._comment | 37 + ..._3a2fe8d0c0dd6f5066370086c0f03300._comment | 32 + ..._2e0ad0cdb9d813d0fbc514c1642669ca._comment | 21 + ..._bb6b5503ec5f699749fa8e3ffce59aab._comment | 23 + ..._e6e6b344d533de57ce7661b5f1ada027._comment | 12 + ..._e128886c09b9ca2127ff540c2af0beda._comment | 8 + ...FO_message_for_custom_special_remotes.mdwn | 6 + ..._ea99a5099f78767859c05aeb5217a12d._comment | 11 + ..._69535d7d9b7266eaac6f9bb70d2660dc._comment | 10 + ...for_emulating_a_versioned_tree_export.mdwn | 72 + ..._d944fd707130be6ebe35302794a0b73f._comment | 24 + ..._e0f6d78620a89f60010607b37328f754._comment | 14 + ..._19e77a51911d3c2d39a558162223e78e._comment | 8 + doc/todo/Improving_diffdriver_--text.mdwn | 32 + ..._a38b0f30f9b4011d703e70c093f139ab._comment | 26 + ..._2a59862281c1be5ee92912912c2045e9._comment | 8 + ...mental_git_annex_sync_--content_--all.mdwn | 21 + ..._9d812c6dd2fd7b4c255ea88580da4396._comment | 10 + ..._9fff9eb8a7a897c5aabe9878f4d0b23b._comment | 10 + ..._638f40462d4bb2a447350ce0a5dc7a92._comment | 35 + ..._c232e1e1cfcc47f70079f2d32c2b4633._comment | 11 + ..._e81719f23565579674249db5d0a883da._comment | 27 + doc/todo/Invert_remote_selection.mdwn | 32 + ..._5aa12a96f54a40adbfe18267a6bde87b._comment | 9 + ..._9ad4c9b2217f739e67198d16d14d32e7._comment | 12 + ..._2aec5f535c84c37d59802e4759a1c242._comment | 7 + ..._f5ab9eec7ed0f080c57dbb594deafd13._comment | 8 + ..._a_repo__39__s_description_up_to_date.mdwn | 14 + ..._2fcce6a8fcfec28a6edeab40291deaba._comment | 22 + ..._1c73d94cc84bbfdeb65a71995265491f._comment | 17 + ..._394c87782dd3318a6fa3705322fea4fb._comment | 16 + .../LIst_of_Available_Remotes_in_Webapp.mdwn | 1 + ..._23fe2f3cd44c4357a385452dcd5eedef._comment | 10 + doc/todo/Long_Running_Filter_Process.mdwn | 24 + ..._f155ffc7dbd074964dd53165274ec8a0._comment | 8 + ..._24d89d0e8eb2da6e43d107caa71e042b._comment | 16 + ..._96c20518a6bd2806fed3646331b3ca1c._comment | 21 + ...ase_extension_for_SHA256E_and_similar.mdwn | 19 + ..._71a32962c081e42be0bfc468f74230e8._comment | 13 + ..._db432973421d3974e027cef13caa3033._comment | 9 + ..._15ec3c411b0a92b073eb8c65e192c8b8._comment | 9 + ..._2ef3cc0ff00cc735e3400120ae49d14a._comment | 41 + ...unlocked_configurable_like_largefiles.mdwn | 45 + ..._823bddc3b3824419f1123748f163e0ff._comment | 19 + ..._89ea6c764e18ed4335733f979fb31140._comment | 22 + ..._8f32ef554635d852383eeaf3f0629d45._comment | 10 + ..._17d12c5d9f5aa40aa8c20ae478b324b2._comment | 7 + ...ex_sync_--content_trust_location_logs.mdwn | 4 + ..._006e3e3ab0c08852239c0f8fec851201._comment | 18 + doc/todo/Make_webapp_port_configurable.mdwn | 42 + doc/todo/Mbps.mdwn | 17 + ...a_changes_are_not_reflected_in_a_view.mdwn | 33 + ..._5c3a0d8ec7b1da69b0d81aa4acc0c75b._comment | 18 + ..._74597dc57b426adccfa5aab456e499d2._comment | 10 + ..._39d7b5588595067332909c53b232c413._comment | 27 + ..._6ab0e38d8be8a70d501108f207d41d82._comment | 29 + ..._b1b381c560fd81f372fc393ec5d63d8d._comment | 8 + ..._9d3d9877e8581f986257dd3d495a8eab._comment | 12 + ..._f97d171fdd715d984e43c1a8139bb8ae._comment | 8 + ..._e10e8e6daf155fc493454f1d0d8595a8._comment | 9 + ...ts___40__blob__44___trees__41____63__.mdwn | 1 + ..._30c513b68101442dbcdec0eb109203fe._comment | 35 + doc/todo/More_precise_jobs_count_config.mdwn | 7 + ..._8b7dbf6025c99172925f037e9096ead1._comment | 20 + .../More_space_savings_for_annex.thin.mdwn | 11 + ..._cd571b1b3b6e73041ee629d031481d09._comment | 8 + ..._95d195f2bad7e6a912e5d201928a94b9._comment | 9 + ..._15cc8f9e428df04199d139e2677afd8a._comment | 14 + ..._a87baf5ad6b7688bb40a6c463cb1b8db._comment | 47 + ...___47__ssh__47__git-annex__47__config.mdwn | 9 + ..._284c806e83a32af81b02aea7c7bc285a._comment | 10 + ..._1f55ad6b39906458779b2d604b003ffe._comment | 10 + ..._b00dce2374aac6968317d05d23bcfaf7._comment | 8 + ..._743d0b077110c5cac1e2f47187b75333._comment | 10 + ..._for_addurl__44___get__44___etc__41__.mdwn | 29 + ..._ed3a47b10ce2303041d9b9271bb9a2c8._comment | 8 + ..._2afa6133bfa8932ea1fb02b2052e2939._comment | 8 + ..._6c9336be070b04d5736b943889370c13._comment | 23 + ..._20184de38c2adeed7e20fa323d9a3ba4._comment | 8 + ..._58965ac55e2e9aebdd0e38f8eef097a3._comment | 12 + ..._312f32bd35f06837463e541773986b4f._comment | 9 + ..._7ea1c35ce23a57fea52a593c41a8fb69._comment | 26 + ..._337217fc0ae8cfd432c7df45942b86ef._comment | 10 + ..._8778b93dbc123c484727bb55e39608c9._comment | 8 + ..._9c7bdcb483b371f421bcdca3d8c2073c._comment | 18 + ..._c94fdab4db1d5f94929ae068c546b533._comment | 10 + ..._e3c50b7ab1c5cd49a3e5376e20b7d4c0._comment | 8 + ..._72eb9bc8d12bc8719f49f6528a086234._comment | 17 + ..._6d1a630fbf036144c9559c9c01fca845._comment | 8 + ..._checksum__41___in_a_single_operation.mdwn | 16 + ..._695d1269ab20c66630ddfa2d8cbabbef._comment | 10 + ..._f85f81450c5d59e6722b46299f2ae29c._comment | 17 + ..._a19823409648828b8b9f7a0f2fa7d935._comment | 10 + ..._14f46277adb38d5cb802cd23eb2cde04._comment | 19 + ..._85e2368381e15cd86b5340fcec1a083b._comment | 30 + ..._fbbcf1d8b35078274cfe322cea6de21c._comment | 14 + ..._39db598e93d0d858984052e3894cd96e._comment | 11 + ..._29e601ea3ea4f22301c6cf6eed403ba4._comment | 11 + ..._fa9e2c0a83bad2e0c2da3016b9bf2100._comment | 12 + ..._529c38fc63540b32c51ae75529e9005e._comment | 8 + ..._82707d36ed580d62c73e441f959ccd9e._comment | 41 + ..._aad1896b58e58cbc870c4526ebb824ec._comment | 8 + ..._3d2f62f0946528c9986135f8db86a237._comment | 9 + ..._48842fb1e006a05573ab34048db45c8b._comment | 47 + ..._593b8710c25bec1182409b36d6c44b4a._comment | 11 + ..._4f4f4a42adafe52207ed32a5d20e94be._comment | 25 + ..._b92774b0feec3049bf6aef89614543df._comment | 12 + ...58___drop_url_parameters_from_extension.hs | 56 + doc/todo/Package_for_Lacie_NasOS__63__.mdwn | 3 + ..._1b1b23b95b1fa29a8d71848a5cec9008._comment | 12 + ..._81b181781da615c56aa30eab131cec53._comment | 14 + ..._fd7eeee6a86101867f0ab17f883f0c6a._comment | 8 + ..._all_annexes_watched_by_the_assistant.mdwn | 11 + ...ultaneous_pushing_to_idential_remotes.mdwn | 22 + ...rks___40__not_just_specific_IPs__41__.mdwn | 5 + ..._26d81cbc8732b65c2f0a86a33ef0f8fd._comment | 25 + ..._64ffa9a560bf11ba22c715da0b4b1cfe._comment | 10 + ..._da5363a268008a88014972987de10323._comment | 7 + ..._620fd718bd2c97a6fa4ce775e311a2d6._comment | 17 + doc/todo/RawFilePath_conversion.mdwn | 75 + ...uest__58___Date_limit_with_importfeed.mdwn | 3 + ..._5d3d762eaf755410f5ee70a22fc95ab6._comment | 10 + ...export_redirecting_to_key-value_store.mdwn | 5 + .../S3_multipart_interruption_cleanup.mdwn | 14 + ...tal_storage_limit_for_special_remotes.mdwn | 3 + ..._8945025ad54e28f48474f8931746a775._comment | 9 + ..._86aa368db46dfedb065a18edfa7c9ad4._comment | 11 + ...default_preferred_content_expressions.mdwn | 26 + ..._45d57933a45ddc1e31ba46519b944239._comment | 7 + ..._575320e07f005d46d26cc6db9ad3ebd3._comment | 12 + ..._971b3efe8a6ebdeede0184f13774e86b._comment | 8 + ...nex_diffdriver_fetch_non-present_file.mdwn | 9 + doc/todo/Show_repo_type_in_repo_list.mdwn | 1 + ..._ac6eb1072ef902a094b79dd8e0917c4d._comment | 10 + ..._6979c487f707a724a048d20e2e5744e6._comment | 14 + ..._529254a6cc20de7259d60a3cbc5ccaf7._comment | 8 + ...ription_in___96__git_annex_info__96__.mdwn | 5 + ...remotes__58___support_for_MULTIREMOVE.mdwn | 3 + ..._cc95104ae0803db35fee504152db046a._comment | 38 + ..._f58cc7b04948a8c758f97778631b0f02._comment | 41 + ..._4f18712f974f85c3cef810714d304d85._comment | 16 + ..._2dbf3558c7c969281f1cc5e1738d2c0b._comment | 21 + ..._4a9f2e1e3f30b472d4c5aa9c07684cc0._comment | 96 + ..._f756a8ea12af1a01406f1bf05d9dba11._comment | 58 + ..._993ed66935c0d95488751a0e0e2c57b8._comment | 23 + ...ecify_maximum_usable_space_per_remote.mdwn | 9 + ..._fdc0c518b6cbc5dc7e5b64748c2d7b01._comment | 17 + ..._b81af6dac4042c0d4dab58c91a46b09d._comment | 15 + ..._afc7f278c02d7bf9f92a90e51cb5a2a9._comment | 19 + ..._a760351ed7a6d3d232af7c22b2063871._comment | 7 + ..._c5069ffed5e8c4e1d001aedb971aca75._comment | 13 + ..._bef44c8f571f2be177d6ee949c721a6a._comment | 13 + ...__39__import_--clean-duplicates__39__.mdwn | 7 + ..._9268c639d3d21cce4ca7b60d08e9cb65._comment | 10 + ..._9c6688901ef20badd834419202627d5c._comment | 21 + ..._b53f2e881af1426adb0f45e2b11e4be6._comment | 19 + doc/todo/Split_autocommit_option.mdwn | 20 + ..._fc127bc73c650404df4f21c9a04b3dd4._comment | 14 + ...ore_git_pack_files_on_special_remotes.mdwn | 5 + ...ffing_with___39__git_annex_diff__39__.mdwn | 29 + ..._2f5ea091b7f6defa397d15055d04a67d._comment | 28 + ..._cae9e0be287bd42498caf1f61c518f0e._comment | 8 + .../Usability_improvements_for_new_users.mdwn | 21 + ..._70ecef547308f9b049bd67f3d2f14117._comment | 37 + ..._ea77f0894802a17854aeedeceababf8a._comment | 29 + ...Use_MediaScannerConnection_on_Android.mdwn | 7 + ...g_site_for_files_with_obfuscated_URLs.mdwn | 7 + ..._1a1f34f4f389267d67e79409c0ca8b1d._comment | 9 + ..._735afa6f87a93cdf333c17da32010620._comment | 8 + ...Use_editorconfig_for_formatting_rules.mdwn | 3 + ..._20e6d6467dcc9e4814c657355a7f2e74._comment | 11 + doc/todo/View_for_old_versions_of_a_file.mdwn | 24 + ..._8e233fd006bd8f16533df63579f02fb1._comment | 12 + ..._9b1c6f41f77ec6ba9c90a5e9ec088647._comment | 8 + ...tant_on_boot_delay_the_execution_2min.mdwn | 36 + ..._49990eaf4a3d6ee89f668dfc159f5eae._comment | 17 + ...hlist__58___Parity_files_on_all_files.mdwn | 67 + ..._3900fa7c3ed1455fe07d097c3dc0c9f2._comment | 21 + ..._60dc7823a1814af18861b459a9b3cd0e._comment | 16 + ..._d69eba0afc48c49bdcd7f1f6a7716bbb._comment | 10 + ..._01c382342237e4713ab32a3e95497926._comment | 15 + ...ional_environment_variables_for_hooks.mdwn | 19 + ..._d82cbbb478a81a651fbe6cb8b71c1192._comment | 8 + ...disable_auto-repair_for_the_assistant.mdwn | 3 + ..._3274820a0d1f10c505f15cd29a37b95a._comment | 12 + ..._2cf5aef3f1d340c4ed6249ef94c1b607._comment | 8 + ..._6c53d82e62b2d269a941ba967d05adf5._comment | 8 + ..._fix_wrong_UUID__47__duplicate_remote.mdwn | 9 + ..._a9e54e4bc540cbab7cdbbfdeaa973f4a._comment | 16 + doc/todo/Workflow_guide.mdwn | 15 + ..._f4242a3bdeffb90336f562f9ec182e5d._comment | 9 + ..._ee6da4cc639bca0b17156d51ebfc05c2._comment | 29 + ..._8cf0f9913dc307cd18001656ba390159._comment | 12 + ..._b6f5ce361529356a77b0e6141a62c06d._comment | 8 + ..._6ec6fb45021ba82ed6a4bb9a6f3cfceb._comment | 19 + ..._640e5c6cdea8a6fae63c3fab6970f1f2._comment | 10 + ..._805e877b23adcf562feeb7d927fca08d._comment | 15 + ...ion_either_content_is_locally_present.mdwn | 7 + ...nsistency_check_while_on_battery-only.mdwn | 14 + ..._b557db02c3719152d392fa454c9c5ce5._comment | 15 + ..._374567f37635613a5d671c877d601367._comment | 7 + ...copies__39___meta_parameter_to_NUMBER.mdwn | 31 + ...ix_annex.adviceNoSshCaching_no_effect.mdwn | 30 + ...freeze__47__thaw_hooks_on_crippled_fs.mdwn | 76 + ..._b943081483e4f1f9897b214004d48493._comment | 7 + ...o_figure_out_the_origin_of_largefiles.mdwn | 10 + ..._9b0826c1d5b063a3e63d4d2cc030a55b._comment | 8 + ..._6bfe8e1b6b2c3334803d8a6676862e8a._comment | 20 + ..._def75a3ad8907cb62eb5d96c85aabd5e._comment | 12 + doc/todo/absolute_symlinks.mdwn | 7 + ...0__or_alike__41___to_find_and_findref.mdwn | 10 + ..._8407146882e97ee8510f28df2ba5129c._comment | 26 + doc/todo/add_--dry-run.mdwn | 25 + ..._4daf51eec7db67a89bec8f81b742a094._comment | 31 + ..._312127fc2780fd894332d7d8b7f7a209._comment | 25 + .../add_--jobs_for_dropunused_command.mdwn | 3 + ..._bcd06faab6b5f6394333e74a17249d08._comment | 8 + ...son-progress_support_in_push_and_pull.mdwn | 1 + ..._403acf073a2a8d53eaa880cc2564347d._comment | 29 + ..._ff0b1ca16b03d2e6c8331645adad84a6._comment | 22 + ..._a11ee71f4ee907b011aebcfe270b7ee3._comment | 24 + ..._0f3c22853b50550237f9659ed2120ab2._comment | 24 + ...progress_to___96__git_annex_add__96__.mdwn | 8 + ..._9acc343305dd5a2aaf569a6396d09896._comment | 11 + .../add_--json-progress_to_fsck_--json.mdwn | 17 + ..._170acd9fc5b5a40ae22de0bf418b424c._comment | 11 + ..._2ce9c3c35ea5c4033bfa42e2f3365a64._comment | 19 + ..._5c0c3bdf1e5cf68f2dcebdd85a8253ac._comment | 20 + doc/todo/add_ancient_armel_build.mdwn | 3 + ..._704f1a854e5ef62edbca60ab209d2123._comment | 14 + ..._0b02f96699e9ec9447e336b74b255801._comment | 9 + ..._eaeb9aec42fde6b8a25199b1e1e6a78c._comment | 8 + ..._da51390e7b67cd1dc075c793e99d4367._comment | 12 + doc/todo/add_import_--to_command.mdwn | 8 + ..._b70d10190722c0d21c2343fe51e38414._comment | 9 + ..._c7a95793a46ed948301b01a1f29bfac1._comment | 9 + ..._f393450ae2daa14e1e7008db2b3c7dc8._comment | 14 + ..._4a30627ac78b32911604c3377b958cd0._comment | 40 + ..._549edb19b222bf4bd1b87aceba007005._comment | 14 + ...e_to_external_special_remote_protocol.mdwn | 28 + doc/todo/add_limit_to_matching_options.mdwn | 16 + ..._2358e0503ca6c65644ca68c0ebd89723._comment | 10 + ..._187a47171265eeaf2aa144beed53bfc3._comment | 16 + ..._cfff69317903879bba2a9a9de1e73a8e._comment | 28 + ...axextensionlength_to_git-annex-config.mdwn | 1 + ..._df1113eb2b0b9cf6c13b1e8ea0995f1d._comment | 14 + ..._580ed143221abbcced40f020b849cc27._comment | 14 + ..._6bcf92e8cc78b47ed42f58a610e27d76._comment | 21 + ..._f0894e2797e1188bdf4bdc09bd10553e._comment | 17 + ..._9499ecd6136102803f1d6691c03e6b20._comment | 26 + ..._9ff852c12549985f6e88bd2316a69def._comment | 8 + ..._2b02c97fc9cfdb30d89676ec82760538._comment | 8 + ..._6302aa8c3ff1f1096bc9978dd6407744._comment | 8 + ..._5027255cc1b0dec41e315df8472fe60e._comment | 29 + ..._disable_fsck_upgradable_key_warnings.mdwn | 3 + ..._f91174aef6f7a5a41fb9b9b54249be1c._comment | 19 + ..._eb2a5ee55df954b243bf0ea87801fbce._comment | 39 + ..._3b9f1387cc5de5d0bce5fee5fff91002._comment | 26 + ...whereis_to_avoid_network_interactions.mdwn | 22 + doc/todo/add_sftp_special_remote.mdwn | 25 + ..._28c98e879c16f56da2a89ed9d50e4398._comment | 12 + ..._1fcefc50041b363a86f596f8d4121611._comment | 8 + doc/todo/add_testremote_cleanup.mdwn | 1 + ..._9dc28d46dfcd693def4cbb3837de55e0._comment | 19 + ..._a87de50ab7c39d955d5c1f6a1c51f761._comment | 11 + ..._976fd7b1db867bf5fe785e0d32acddcb._comment | 16 + ..._ef144de6384eb89a2d4caa13e6895872._comment | 11 + ..._0a3c3cc6c9b4efd7a6c4cf7333f2b120._comment | 10 + doc/todo/add_tests_under_concurrency.mdwn | 3 + ..._9879c63f9de342b6831d5794d8f6212e._comment | 24 + ..._3713c706c8a0689f527c4558176a7b48._comment | 12 + doc/todo/add_xxHash_backend.mdwn | 1 + ..._8993f493a8b43ffda9f8e0b6d5e186ac._comment | 8 + ..._945217badfaeba8672329d4f6ac4b8e2._comment | 8 + ..._93892ef71d40f0b10e5fdcb703faf3ad._comment | 18 + ...ional_git-annex-config_settings__63__.mdwn | 5 + ..._74d61d6a4412223092f468628d3f2f45._comment | 11 + ..._2973d438e8f3fda50cfb151534a8ec73._comment | 11 + ..._3abeddccdf5c742962b25b7dbe8fb69e._comment | 8 + ..._1d777383fda7c50d630e19ec1d1ade52._comment | 14 + ..._ba2cbf8dcf14a1d0b20621b48b8e8600._comment | 16 + ..._4ec0261f3b8bc6d2492fa3dabb0121e5._comment | 35 + ..._c1768ab8568c8e58525ed40e76cc13f2._comment | 8 + ..._845a504ea9f038a19a21d8a985585b2b._comment | 11 + .../addurl_--raw-except_REMOTEs__63__.mdwn | 7 + ..._d9b88a0f157ce8143d52a35256beaaab._comment | 17 + ..._2cd05802f25c9868b1b975dd359b66b4._comment | 8 + .../addurl___8211__force-torrent_option.mdwn | 1 + ..._15be1914c8d05cd1ad8220bcfea9d0bf._comment | 8 + ..._52c04c388b807993cecacc7f98b73cd3._comment | 8 + ...justed_branch_with_hashdirlower_links.mdwn | 18 + doc/todo/aeson_2.0.mdwn | 7 + ...iguring_assistant_to_add_files_locked.mdwn | 12 + ..._quota_independent_of_free_disk_space.mdwn | 7 + .../allow_for_annonymous_AWS_S3_access.mdwn | 20 + ..._0723643146ba36131218be090e6d5c73._comment | 18 + ..._2626e1d0b2aa5a2af19d7fef1d13beaa._comment | 10 + ..._6f79f3ecab275d594182fff5e2fd81f9._comment | 50 + ..._9cf7360f849964689133af60b8e1175b._comment | 7 + ..._b680494cd2fb1cf117b110e08e0ff476._comment | 49 + ..._b1e14d6baef8d03aaa6ace717aebc0f9._comment | 14 + ..._d44dea0d8c0d46dd8c75ae40f66072e1._comment | 11 + ..._b0d9dbe81f01e80809381a9e5f6a883d._comment | 27 + ..._7fa3b2aafcad92c20f8a3467aa3ae6b9._comment | 10 + doc/todo/alternate_keys_for_same_content.mdwn | 12 + ..._22ff867952875856b20339a8829c5944._comment | 22 + ..._3323eff3d94d366595bf2b7e78c01dce._comment | 7 + ..._7a7f287bcde5353072100294dd8edce6._comment | 14 + ..._0f464f4970e499371fcb65e0d06202cf._comment | 8 + ..._c99b23e878e37e205a3182d3b6d3f2b2._comment | 15 + ..._a5fb6045595da0c490098e46f76db9b8._comment | 8 + ..._230d35bd623189818002901455964ca4._comment | 12 + ..._ae8355ec917e7a7a240cdb88714c55d0._comment | 19 + ..._1c0a975893c63c14b3f6e17712b5191c._comment | 10 + ..._4b16c48a2d9f4926d63f6ab54fe801d3._comment | 19 + ..._42d240bbfc6ab858219ffa0f873c3eb4._comment | 50 + .../annex.addunlocked_in_gitattributes.mdwn | 13 + ..._1d21cde3d21a9b5bb129b17b9e0fc95d._comment | 8 + ..._38f248f7596646dfc11248f0149c0beb._comment | 8 + ..._270c5156c8adce0aff86eda5f2746703._comment | 9 + ..._d87e08ccdec98867dd52b629e6fad330._comment | 12 + ..._be25f3b3c2279eb3fd3ef69c4d1cb52d._comment | 12 + ..._f672dee4c1712e0d20dd820999598d87._comment | 10 + ..._d06e3412f07d98c784b420d82d2d8d49._comment | 34 + ..._73a402df13f30b279dfd2914adec5f35._comment | 12 + ..._02866c504617c2914eff01d3529d5cc7._comment | 13 + ...dd___40__-u__124__--update__41___mode.mdwn | 6 + ..._bde2b1e2c45e110d56ce98b43dd77743._comment | 7 + doc/todo/annex_merge_--remotes.mdwn | 8 + ..._d4d1c3dae7cff4119b7c111ac6e6f947._comment | 29 + ..._be8596676823e916a56d774e0a161945._comment | 68 + ..._35614da544e315529b236a36e1b28e2d._comment | 17 + ..._8cb7787fbfae63c45a155ee6ef270922._comment | 12 + ...n_nonexistant_or_non_git_files_passed.mdwn | 29 + ..._32ebb1ea1278b891b58dd3c4a8546453._comment | 8 + ..._672457817d5dca898f5aefbe97da9b23._comment | 12 + ..._b6a76bfc063dcba439b2ead004caabc9._comment | 14 + ..._3f0872f13160a77a82bd5a95fc3f397d._comment | 38 + ..._0217c8acd2a9eb3bba1fc497856cd96a._comment | 27 + ..._7501eed2e6cb732966277ef2f1ff28e9._comment | 10 + ..._7a5b3d2694a48e4e44436f6bf7ed6642._comment | 37 + ..._2550e1760dcfb90c9c2ca1ee145adcf1._comment | 19 + ..._f34293aa30b8b9abc71fac4e713aded3._comment | 34 + ..._d7e879ae1e7ae5e27e15dab9d5b99f16._comment | 8 + .../arm64_autobuild_broken_since_2022.mdwn | 10 + ..._0642002d8ad1eb318de5fdb63956a2fc._comment | 10 + ..._48e40f76e0480adc965505543a4f25e5._comment | 8 + ..._better_repo-wide___40__regexes__41__.mdwn | 62 + ..._55652562111e83129eb19a61da14ee4a._comment | 25 + ..._0d1e17e92d6022552406fef144e8c104._comment | 20 + ...epo_via_an_ssh_alias_or_an_ip_address.mdwn | 50 + ..._6b71a390fd16f593216793aec590d9a8._comment | 8 + doc/todo/assistant_importtree.mdwn | 2 + .../assistant_parallel_file_transfers.mdwn | 15 + ...assistant_should_detect_added_remotes.mdwn | 7 + ..._1cadcd0d5c61a04bd1118d94e3fc7f45._comment | 13 + ..._2a282fcacad94b9590f5bc440ff6ea64._comment | 10 + ..._35435a0b4d98483fa5c67759ae5baa35._comment | 10 + doc/todo/assistant_support_hide-missing.mdwn | 13 + ...web_switch_repo_Internal_Server_Error.mdwn | 55 + ..._b4add1998a9a81fb2c95539408bbeb64._comment | 9 + ...__41___for_special_remotes_parameters.mdwn | 18 + ..._63d48db769863cdfe411404e8c26a399._comment | 30 + ..._afa8c10bd3b1df649c1f643430b300e9._comment | 37 + ..._f19ff768a3903f80dbaa378b74d2a7e3._comment | 11 + ..._b031ee12622b1ed28b6ffc8c037f7d30._comment | 13 + doc/todo/auto-lock_files_after_one_edit.mdwn | 5 + ..._afc78ecd06f0ee9a70ea6c89a8b63e46._comment | 10 + ..._4a6274dd1da7746a5be673ffb0c5d520._comment | 11 + ...toring_contentidentifier_log_for_borg.mdwn | 20 + doc/todo/batch_async.mdwn | 75 + ..._b68dcc98856f7b757e539c499db7ebd1._comment | 7 + doc/todo/batch_operations_for_remotes.mdwn | 3 + ..._9a2f21febec8f49c782e464973dbc4fc._comment | 16 + ...t_message_for_git-annex_branch_commit.mdwn | 6 + ..._c8836a164c8c1efedd5467233237bfd0._comment | 24 + ..._41a25215d9a1f635573d5e5f5c30fd62._comment | 25 + ..._5241eace21e873678a0fbb353f4ece69._comment | 16 + ..._caf913b53a54ac010dba253fca1ef76e._comment | 9 + ...etter_error_messages_for_local_remote.mdwn | 13 + ..._094e6a7b62c8b81185cda06a62104f1f._comment | 11 + ..._4c8115fa0a41bd1cbecdcf7a4d9608ed._comment | 8 + ..._2dd5e994a8ce6352eac78cfd69934316._comment | 11 + ...ing_of_filenames_in_views_via_unicode.mdwn | 28 + ..._85eb622f3e651ad3cd42def62e2a83fd._comment | 8 + ..._b6d583625aa8821bde31464e8f19a34f._comment | 20 + ...rnal_special_remote_protocol_mismatch.mdwn | 27 + doc/todo/better_way_to_get_missing_files.mdwn | 26 + ...rt_offline_operation_and_verification.mdwn | 77 + ..._ab16dfb6c3fe2a70ddfb0cee287c6127._comment | 35 + ..._262f9d68a865300d894c4077e0e8a70c._comment | 11 + doc/todo/build_a_user_guide.mdwn | 45 + doc/todo/cache_key_info.mdwn | 42 + ..._578df1b3b2cbfdc4aa1805378f35dc48._comment | 11 + ...__given_a_checksum_and_filename__63__.mdwn | 12 + ..._c81e5d438b06e28392e4ae789a84a2e8._comment | 27 + ..._2cdaffbc72d5ef197a3ef7ffb306312e._comment | 21 + ..._4520660c0f66bd73158887f22586886e._comment | 7 + ..._ee750e205acefe400d13c3a5e967ca3b._comment | 7 + ..._ec644589ec44a442dc2f3bd2244c9800._comment | 43 + ..._aa8c191593789900e966a37f9117dd97._comment | 7 + ...ey_cannot_be_used_outside_of_git_repo.mdwn | 11 + ..._c54b53c5f81132bedf75eb6b439a202d._comment | 21 + ...t_to_delete_original_files_by_default.mdwn | 7 + ..._4eb794daaeef843b104bd480e11f7b42._comment | 22 + ..._f2d436822490e74544bf58a4f1c9ee79._comment | 10 + ..._6a7c2cbd85b5ac8e90933aaa9147e004._comment | 7 + ...eckpresentkey_without_explicit_remote.mdwn | 6 + doc/todo/cleaner_hack_for_man_pages.mdwn | 119 + ..._d51be0df42cba6f3eba2b5157dc9d427._comment | 10 + ..._3dd91f4c788c81a4f7368f673778c106._comment | 7 + ..._34__migrate__34___from_adjusted_mode.mdwn | 9 + ..._551012fe6261269363719d83113d4e3c._comment | 45 + ..._8e9ecd2a3f9fc5cb80785b100aeb6e36._comment | 13 + ..._845206fa688ed4786262fe6d82464d97._comment | 8 + ..._4375a63a864306c39323fa4b159425d6._comment | 22 + ..._a0d4ffdf3edadb5381f242f65fa38932._comment | 15 + ..._55b5beaeba0de7bb1efcc2626570d3b5._comment | 38 + ..._a383c7303f1e942a830d9f730f1c0f00._comment | 8 + ..._e8ab74bb4951fe7f0c71630bb278ad6f._comment | 26 + ..._0ccaf798086a8c9511d3733b12b24c8b._comment | 13 + ..._e2d45ac485456ed9cb86f8e6bd23617c._comment | 8 + ...o_list_keys_for_old_versions_of_files.mdwn | 46 + ..._43c11d9467b4d4460aa97bfb88b4896f._comment | 18 + ..._5062a0f8b57fdebf74fef8a65ac0a0b2._comment | 8 + ..._3c605fbd4c20522e265ef080675c3669._comment | 16 + ..._98d09316dc39619203e507f862716bab._comment | 14 + ..._annex.skipunknown_transition_in_2022.mdwn | 6 + doc/todo/compute_special_remote.mdwn | 62 + ..._9f4835cd08d9d02009b685f4a366a245._comment | 15 + ..._bdb9c77b3ac97cef8d1b8eeaaf300d8b._comment | 18 + ...progress_reporting_for_some_git_calls.mdwn | 10 + ..._06d6dd17b7bd45b96276770b09bedca9._comment | 9 + ..._d9135802f29b78749833b7fd9967cc0b._comment | 17 + ..._8a6027fb58c4b7aaa3f82b5fd1c2812a._comment | 11 + ..._ceb543ebac42bf7a5f1571ff3f4ef977._comment | 17 + ..._ec99ba117fac299fc361a32de4ff29a5._comment | 12 + ...__mode__34___on_crippled_file_systems.mdwn | 7 + ..._e3cd8d86869d8a63337f7eff0b91ddbc._comment | 7 + ..._3580025d828b27072530eb8ccda9bdf4._comment | 9 + ..._d300407d70f799958734df1722fe923b._comment | 18 + ..._9367cfc5e12e43db6b53f43dc468757f._comment | 12 + doc/todo/confirmed.mdwn | 8 + ..._to_copy__47__merge_availability_info.mdwn | 18 + ..._68c86b06b3b0c8cc9c3faac97e3f6c3f._comment | 27 + ..._8993cf9badc8348604c662e35ba6f199._comment | 10 + ..._53a7a0d5ba6be411bdae10a6f8ba16fc._comment | 46 + ..._d82ee205451cf55eb283952c4774d32a._comment | 17 + ..._3565680846a8d547d0912d1ef31430b2._comment | 39 + ..._e479e9b65a512727f2816d4abd72b900._comment | 7 + ..._d64e8d82f139146338ce2fd4af1b7ad7._comment | 8 + ...__47__move_support_for_pushinsteadOf_.mdwn | 58 + ..._c5eec865ac5493f8bedf4fcba6759d6e._comment | 15 + ..._b6d694d34e6d5a684249b11f53a8532f._comment | 24 + ..._e53e69ae3adc42bb2bf36af1f07a4c83._comment | 25 + .../copy_instead_of_rename_on_reinject.mdwn | 36 + ..._8e1fefa8231cc93f0f1958e44d869c47._comment | 22 + doc/todo/copy_with_both_--to_and_--from_.mdwn | 18 + ..._81fb304a2cdd50aa58f839a89d25f2ae._comment | 8 + ..._0c42c2269e2fe2888254cc14a4967535._comment | 8 + ..._7db9f62f5aa3640d1f4aeeb599e02e7c._comment | 16 + ..._05a8fbcf2b069c561b6e24286565af5f._comment | 8 + ..._b4d6b876c8f36a61268e2144d3bcf082._comment | 9 + ..._8fbf7e5ef86892f05b63e73373a97f0f._comment | 53 + ..._4397649b4a2115891cb0f597999cca66._comment | 8 + ..._959f6081cb3cb777ea4fad70bad07da3._comment | 35 + ..._a230b52cd5985437827bb432a85349ce._comment | 13 + ..._3152d196f56561d31a00514c343669ad._comment | 8 + ...git-annex_binaries_be_prelinked__63__.mdwn | 8 + ..._debug_logs_but_erase_them_on_success.mdwn | 5 + ..._72b1e3b25a221f42ea7919aaecd6012d._comment | 21 + ..._8809f216aac308962917053ea24b9022._comment | 36 + ...ntent_changed_while_it_was_being_sent.mdwn | 29 + ..._bce631c26907d03314cfc2e94933cce9._comment | 10 + ..._8093d410c2b359967ee7ee8886d7e4c4._comment | 10 + ..._78551b601b04b8336a858adfcff29507._comment | 8 + ..._d9faaaf2dd44e609fcf361189b247bed._comment | 8 + doc/todo/deferred_update_mode.mdwn | 42 + .../deleting_a_repository_from_history.mdwn | 11 + ..._bcaa591f37f3496c2f7a2e1f06450002._comment | 12 + ..._69de586c7c030f75fd540d05a6ca4ddb._comment | 16 + ...e_submodules_after_path_changed_by_mv.mdwn | 75 + ..._9f9da126a031d2a4c98555b381dbcbdc._comment | 11 + doc/todo/distributed_migration.mdwn | 71 + ..._8734d30aa0c1cb27dce81a0277d24948._comment | 10 + ..._fdaef5d870221d44c57fc3bd1501e7ee._comment | 17 + ...ributed_migration_for_special_remotes.mdwn | 41 + doc/todo/ditch_yesod.mdwn | 36 + ..._976dcb99ebe30c02c9b223f19a67c875._comment | 7 + ...o_not_bug_me_about_intermediate_files.mdwn | 7 + ..._count_trusted_repos_toward_mincopies.mdwn | 56 + ..._66a71fdd9bdc2387870f4216841b9900._comment | 12 + ..._058f521451ff38d2072af6c944143ab1._comment | 20 + .../dockerized_external_special_remotes.mdwn | 3 + ..._82d0eba3b5658990aa1e909758d75291._comment | 15 + ..._d1a0106951c070b56bc30a67c8804374._comment | 8 + ..._61a23adb5b871b178d3fb5a51602cf46._comment | 9 + ..._a044848ea54aebc2196376f9a59ccc70._comment | 24 + ..._3ace886382ff165db6f36df8743ca7c1._comment | 9 + ..._4e09e2a08f07924ef791d63da56df066._comment | 8 + ..._c43d5137b595edc3db130158293431ff._comment | 13 + ..._dc3e46508758b1df241ba0af78fbc692._comment | 11 + ..._a32b4ec09da1bee3c960fa8fcfa0d797._comment | 23 + ..._f5c0b77e06b7a65f2582c56011217d5c._comment | 14 + doc/todo/document_git-annex_dependencies.mdwn | 3 + ..._bb9cbd703e57adb9ca45e2cea94308a0._comment | 12 + ..._bcd0fa1ace9a22b0cc09cea2e7cad84c._comment | 10 + ..._ac0b1db3d447240b49686920a71ff91b._comment | 8 + ...ard_groups_more_extensively_in_the_UI.mdwn | 14 + ...tion__58___improve_on_special_remotes.mdwn | 12 + ..._edd0a4e9894d07e7bae9fef1fe4acf6d._comment | 14 + .../documenting_sqlite_database_schemas.mdwn | 5 + ..._cc94cb2467c2b261c0b79c64853103a5._comment | 11 + ..._06bc5d625d9a3e7522c7f6df53a7ac3d._comment | 26 + doc/todo/does_not_preserve_timestamps.mdwn | 18 + ..._8cce043ff86fefc3dcd97cf5c4428786._comment | 14 + ..._eea115becce4ac79932d8cfa2903f20c._comment | 21 + ..._a8b69299c9278c16c6c5061d88bc7eca._comment | 8 + ..._e37ea5188bd48817ccac82141906ee83._comment | 8 + ..._9a3f50f1b8cfd1cc0da83937a36e1369._comment | 18 + ..._caf5e5cb17f4d05fff8c2fab661cd93f._comment | 8 + ..._c337fca1474b5b78f61ad6f421138ae4._comment | 12 + ..._9a3eeddc46e5a420575f00cb47caf703._comment | 8 + ..._99b064259fc2e3c6eb83c3da3b2d3bac._comment | 10 + ..._c95c8b9bd617830604500213c962fc7a._comment | 9 + ..._b99e00d0bc4258c4cb28b544b19ea3b8._comment | 12 + ..._eefa6afce824f1069bb5216b392405b7._comment | 7 + ..._f2a32e39356f7b772ab9cf3136436700._comment | 10 + ..._62736ee2f299d62f685800353fc36ccf._comment | 8 + doc/todo/done.mdwn | 4 + doc/todo/drop_--batch.mdwn | 7 + doc/todo/drop_from_export_remote.mdwn | 32 + doc/todo/dynamic_stall_detection.mdwn | 24 + ..._a_discussion_forum_or_support_system.mdwn | 134 + ..._578c0ab40d53dd56bb3f2d98491c5e85._comment | 13 + ..._b1129b4cdfe39e740c4f7cf0d6ff2b91._comment | 12 + ..._52598af3d7b050981e32ad1569f69db9._comment | 8 + doc/todo/encrypt_only_the_credentials.mdwn | 3 + ..._7c3911e8fbc981c7e1f32b1464ce4122._comment | 30 + ..._76fdfa927562d33dfea9630b3b729220._comment | 8 + ..._6f0ba120ef655d5250fdf3db53464fe6._comment | 8 + .../encrypted_keys_in_git_repository.mdwn | 61 + ..._4d17c427756127f22dc472984259f8d7._comment | 23 + ..._6679caba100bee0a0fe32c8eef50758e._comment | 21 + ..._a79ea55e2f8a1095f0110f2f0853dee1._comment | 21 + ..._e88664a0939b7bca730a61efb47d34ab._comment | 14 + ..._05b0e2e88b233691b403d4c908b50c52._comment | 14 + ..._9e25b4d05d61fc3a3cca4f7111681a5f._comment | 8 + doc/todo/encrypting_URLs.mdwn | 10 + ..._9d0dda82d1f3907e6478a95608388836._comment | 12 + ...data_needed_for_view_inclusion_or_not.mdwn | 116 + ..._17f8adc8555ea0a2716308e3f5188a25._comment | 16 + ...--json-progress_--json-error-messages.mdwn | 6 + .../export_paired_rename_innefficenctcy.mdwn | 12 + .../expose_fsck_last_run_information.mdwn | 5 + ..._44f5eb2e601ba1a6cb22f5de7a6d3ff6._comment | 22 + ..._9a1729dfbec291159000d3412dd147d7._comment | 8 + doc/todo/external_backends.mdwn | 9 + ..._4c0f8a338a58cef8e239613292d5aa38._comment | 11 + ..._56224638fde7b46ee6f52211474cd047._comment | 15 + ..._268cd038b7beb9d42cf0bd8803efce94._comment | 28 + ..._6e8452f06da80458bb2cccde05cc9813._comment | 10 + ..._6edc4008ce8eec17e283dd7db8dbcbf0._comment | 26 + ..._7880557cb94706d82a6d2bfc785288ea._comment | 8 + ..._9d73d6dbfabe3d58a41b661825bf3dcb._comment | 61 + ..._a2528865e48f85feab5569951f13caa9._comment | 14 + ..._9451d002f6768dd5975d5816c12b1350._comment | 15 + ..._2983bbf5e1cc485da3e8e9628a4bea89._comment | 13 + ..._37fd824cf9f2dcc59616b9d49e38c262._comment | 10 + ..._d871bdf09932035acc6260c839f45757._comment | 8 + ..._090e62b5d37beb5d62d56cfb3b1e2134._comment | 8 + ..._e3c66820da36fe255d07059226690ca4._comment | 16 + ..._bf2de8fdc134684f0af2b53bc9b78f08._comment | 20 + .../external_remote_querying_transition.mdwn | 53 + ..._838311ffa7f00d65c9ab23717dd117aa._comment | 9 + ...orMsg_to_-FAILURE_messages_lacking_it.mdwn | 32 + ..._a096df37d5bc5543b574b32554311af9._comment | 19 + ...es_not_using_git-annex-remote_in_name.mdwn | 48 + ..._8bb17f1a8297b500dcc5bdf9412a5d6c._comment | 8 + ..._to_realize_the_need_in_pidlock__63__.mdwn | 219 + ..._9c77d8cf628025308c2561a8a46d2365._comment | 20 + ..._0d7eb254ec9ff7ba8b1831898008747f._comment | 16 + ..._26f82b5ef0ce9dc0a5a8fc64f4a3b335._comment | 7 + ..._3e2b49710772340238358041ba91bc25._comment | 39 + ..._009ffc560a14061feb8d748e1d2d9b71._comment | 10 + ...date_of_view_branch_by_git-annex_sync.mdwn | 27 + doc/todo/filter-branch_for_objects.mdwn | 14 + ..._prefer_keys_by_file_extension_in_key.mdwn | 1 + ..._fcf6f2c6ecf49930f4ddbf9b35301bf3._comment | 55 + ..._751137f0fd1815adfef69bec6a2cbe22._comment | 15 + doc/todo/findkeys.mdwn | 20 + ..._da758b20bca40e0580526e52ea3e9a61._comment | 8 + doc/todo/finish_sync_content_transition.mdwn | 14 + .../force_star_topology_on_a_repository.mdwn | 27 + ..._cffe5ae2b85022ac9f58ce668ec9bf97._comment | 21 + ..._6e735205024588497a116ce9e7e621a9._comment | 12 + ..._154614345d2b8f4260c88e9061bf4255._comment | 8 + ..._a722bce9ea8c94864657415395eadb43._comment | 37 + ..._60d832d97923d3aac047dd525dc8df12._comment | 17 + ..._8bb1f37233055c53d98c73fed4224b50._comment | 40 + ..._6b08f09f690f7791f59cb90db01c4cf0._comment | 26 + ..._f840a405028df2630a7c8eac5091833f._comment | 18 + doc/todo/forget_dead_keys.mdwn | 25 + ..._e4c7db734087dc4c2f6b86bb774136fd._comment | 27 + ...ce_checking_for_local_special_remotes.mdwn | 4 + ..._47c254cec58cbbb3ea84c93ef8282f01._comment | 8 + doc/todo/fsck_scrub.mdwn | 18 + doc/todo/fsverify.mdwn | 53 + ..._5fcd23950ed5409e52d7954abf71afa9._comment | 9 + ..._c81b458a8ee0f15950adbd32dd168972._comment | 48 + ..._6d95fc858ca780f087c48e4a6a4ab25b._comment | 14 + ..._551bbaf8f22add6ad1e2774e76a1d078._comment | 13 + ..._bfbec043d803ff1aa649f2661f6918f4._comment | 27 + doc/todo/get_--batch.mdwn | 8 + doc/todo/git-annex-addunused-historical.mdwn | 7 + doc/todo/git-annex-cat.mdwn | 7 + ..._a5da8264c2d662e96802535820cb2249._comment | 15 + ..._a43a3568e48e6b5e93998bc473178d5c._comment | 10 + ..._347a33a4a77fd385ab8f3551138b75e1._comment | 8 + ..._8708bf0aef0025e2ed1a8b9d2a7f0112._comment | 15 + ..._f78a6a136610f3fca7a02a3af9c19e25._comment | 11 + doc/todo/git-annex-export_--from_option.mdwn | 10 + ..._10f107aa0094d5ee4886878f5b1aaf06._comment | 13 + ..._72e7dc2a6b3cec21c941a5f7a2914050._comment | 11 + .../git-annex-migrate_using_git-replace.mdwn | 7 + ..._6a317be851dfb72c4aaaf5786dd1a1ff._comment | 16 + ..._e760213fc51f6a2cfc68dec711622f25._comment | 14 + ...nex-sync_handling_of_linked_worktrees.mdwn | 3 + ..._3e542583247177f9cdf44122ec483a0c._comment | 18 + ...tests_if_external_utils_have_problems.mdwn | 3 + ..._240c9c45a629124dc35f4ed0dddd7355._comment | 15 + doc/todo/git-annex-unused_--history.mdwn | 15 + ..._9b9518a88e5f90d68b4131c430e66881._comment | 14 + ..._d0aa8cc29e38510b2bb1c4ce356aa2ac._comment | 12 + ..._21797e55d27356411430b3ec07af5264._comment | 10 + ..._sanity-check_git-annex_branch_pushes.mdwn | 57 + .../git-lfs_special_remote_simpler_setup.mdwn | 27 + ..._4e9f8b60dd1b705d4755200dada8801c._comment | 8 + doc/todo/git-remote-annex.mdwn | 24 + ...ist_all_the_parameters_for_the_remote.mdwn | 34 + ..._875fdf1aacff3cc2c3732450f052d711._comment | 17 + ..._information_about_repo_version__63__.mdwn | 6 + ..._783c53fd99747bc65bd832f918c50a59._comment | 10 + ..._60d3b088de83c86243b19c3d0d050080._comment | 7 + ..._d6e84551319439ba50bc10edbd25335c._comment | 11 + ..._5b3e45c746e6cfa7f511790bbd9f6c9f._comment | 10 + ...smal__44___huge_improvements_possible.mdwn | 30 + ..._4828098be3e7cd6109bd1934bf029f1f._comment | 90 + ...to_not_care_about_submod_status__63__.mdwn | 21 + ..._607ec43498187636312693932f66cc6d._comment | 13 + ...etch_and_push_to_import_export_remote.mdwn | 17 + ...repo_tracking___40__not_storage__41__.mdwn | 10 + ..._e47bc088880a9e839f5c437117c58b68._comment | 26 + ..._4af24f7207f63eb4cc127a64c1fc5fc3._comment | 10 + ...it_smudge_clean_interface_suboptiomal.mdwn | 123 + ..._2247cea7e7ca09389073fb32e98394e7._comment | 18 + ..._39e671908522b79b8054ed9ddcaf918c._comment | 16 + ..._bb2bf0e82985bf2045741205c4682813._comment | 9 + ..._b41830b59c47ce5041c6005d41baf550._comment | 12 + ..._8ad0fa4f67af60313d3195bc8c0acfb8._comment | 20 + ..._778d21703afc5c08bfbc387b442cc193._comment | 8 + ..._ef42e80aac54e02000c1a61b1f42aed0._comment | 8 + ..._8da190f9f0cece7215df28b0bc47b151._comment | 15 + ..._69b4455c0e54834503794f6f65de1fc8._comment | 9 + ..._d52b1ab7d6a186919b3edfd51347e161._comment | 10 + ..._e99ecb0ac561dd670f3ea7b2915de872._comment | 16 + ..._ccea12d55706ab2fc1b0ba46818354a3._comment | 8 + ...tus_smudges_unncessarily_after_unlock.mdwn | 39 + ...mote_as_a___34__transport__34___layer.mdwn | 6 + ..._f2c68afc949f54939fc760bd0d916b89._comment | 21 + ..._89be9eea4304897c639fa80db92cfe2c._comment | 7 + ..._43107f1bec1ad141af2e97f715a70fe9._comment | 12 + ..._9c557a788841bd34e5fa902e171d2b52._comment | 11 + ..._3bea0473d4805b1ef56b955ba30166e8._comment | 11 + ..._28aabb525a1a487eaecdfe591cc7108b._comment | 14 + ..._51b2078904c6a7c0fff2dd7d38791e6b._comment | 10 + doc/todo/hidden_files.mdwn | 38 + doc/todo/hiding_a_repository.mdwn | 240 + ..._68636f0a35a1cd62e0390d1a752eba47._comment | 10 + ..._5d8224fdb6c77834b3bf55b2148d9f97._comment | 12 + ..._64ba3f1d5099e066d554566ca818bdd6._comment | 8 + ...4__async__34___protocol_for_transfers.mdwn | 12 + ..._64397d2700c9ab13885024b65d4d5adc._comment | 57 + ..._f2f2986f643c654c3d87be832687fc68._comment | 20 + ..._7e07ab418734d22ab032bb655b4b3645._comment | 42 + ..._0c4110101bf810816d4568b37018211e._comment | 22 + ..._ab2c969b5b561b75fec1d95c52598cb4._comment | 19 + ..._877ae38938a279fa100e58c03990e81a._comment | 17 + ..._59aa5bd5ac6cfe5976666853b5ce9fdc._comment | 7 + ..._c0f5b5098252df0f86528078f3c96ec7._comment | 9 + doc/todo/immediate_stream-to-sync.mdwn | 9 + ..._457523845c5e63bae90ea5a84d57bf96._comment | 7 + ...tory_does_not_use_cp_--reflink__63___.mdwn | 21 + ..._7a297f170720daf25f7ecf133aafc6a4._comment | 17 + ..._04b63e4e2092ed455d23657e2b396d3b._comment | 9 + ..._20e31ffc7c490215db7a3f1a0a3b813c._comment | 10 + ..._50ae4126d701dbd3a0c9ed8770404228._comment | 13 + ..._fca845bb9869e8ce9a279952813ce481._comment | 7 + ..._f1475420fd16e664b907c4f24910a8d1._comment | 10 + ..._b57afb61d622d9f5b2555e7d80d0ff4e._comment | 12 + ...motes_need_a_way_to_resolve_conflicts.mdwn | 9 + ...ymlinks_when_importing_from_directory.mdwn | 15 + ..._60b1a3ab291bc7eec2ba2ad6ee044bfe._comment | 14 + ...import_tree_from_rsync_special_remote.mdwn | 40 + ..._b1f97f8d62c4e2f9bbe02955c7a4dec4._comment | 15 + ..._7e62dbfc5540a8737d77f25ad2acc4af._comment | 8 + ..._1d3acf47e3eff3680c1639de12823940._comment | 10 + ...ort_tree_preferred_content_expansions.mdwn | 17 + ..._df8ca8665e1dfc530a832b6d24d60ea4._comment | 29 + ...s_more_memory_the_more_urls_there_are.mdwn | 19 + doc/todo/importfeed_parallell.mdwn | 5 + doc/todo/importtree_only_remotes.mdwn | 79 + doc/todo/improve_memory_usage_of_--all.mdwn | 23 + .../improve_unused_for_special_remotes.mdwn | 29 + ...._add__41___failed_into_--json_output.mdwn | 21 + ..._f02e43b68c219b2d7d65ea868fac125f._comment | 23 + ..._3a7043652c692796b1a438a2c4c26828._comment | 9 + ..._2d41d67dcb6e700b1ecda3106e444a5e._comment | 15 + ..._c2e5041a07787ae84f85b898b1aae6b7._comment | 20 + ..._429e42b9c1989dade01300f08fc3c13c._comment | 12 + ..._3d5a33476a3fa773fda1e5f7a2d8c453._comment | 10 + ..._246e35f32f77af3b2924577b1bf45001._comment | 14 + ..._2e0ec2bb51a2a06184b94710616f211c._comment | 8 + doc/todo/incremental_hashing_for_add.mdwn | 40 + ..._d00827f5edd7b270aa6dfc011e7c9f22._comment | 449 + ..._30b4c0f3b1c13e9a1a2ddba5f88eb6ee._comment | 9 + doc/todo/info_--size-history.mdwn | 62 + ...ow_file_matching_options_for_all_keys.mdwn | 13 + ..._3b96becda1db6ae23adb5077b6332718._comment | 19 + ..._2d0a6abd5be8afce677eeea575aae548._comment | 25 + ..._aae866dc71811074d69b91c2390ccb01._comment | 17 + ..._371d53b4539bee6e3d595154033a2471._comment | 13 + ...how_total_annex_sizes_of_repositories.mdwn | 10 + ...other_scanning_if_in_git-annex_branch.mdwn | 34 + ..._2ff094dd4ff1fb05db90782d381441d3._comment | 22 + ..._2cbfb22e8f1d89d4f78ade565554cb1c._comment | 9 + ..._fe771be800a6b26157c3075e632ee1b7._comment | 9 + ...4__progress__34___of_annex_operations.mdwn | 20 + ...ep_git-annex_branch_checked_out__63__.mdwn | 3 + ..._cd967b89dbebd431a14b0dcd08ebc67c._comment | 25 + ..._620cfbb2e2507d340dfb25d1fcd2cdfa._comment | 8 + .../key_checksum_from_chunk_checksums.mdwn | 4 + ..._946e2679cafd2c74a3b0b408e39f2d8d._comment | 10 + ..._aaff896ff99366d3b96c523284c1248e._comment | 8 + ..._352bc3eb419184a4ec70ddaffd78968e._comment | 9 + ..._e766f725e22ea0a38ac2277e08fd3839._comment | 18 + ..._561b9bb28c5d375334ce915da75d5ce6._comment | 11 + ...emotes_that_are_currently_unavailable.mdwn | 30 + ...motes_declare_support_for_named_pipes.mdwn | 5 + ...-matching-options_query_gitattributes.mdwn | 3 + ..._3e7c731037b8ce7148a6a597783d2ba3._comment | 16 + doc/todo/lockContent_for_special_remotes.mdwn | 76 + ..._835d075d22fd1544fc27b912ad3326d8._comment | 11 + ..._948993c967f7908adaea068e352e0607._comment | 8 + ..._432fc28c4e09fd514fd780ec16b9423e._comment | 8 + ..._13f4b8e180c727b775807e8e2aa5a11f._comment | 11 + ..._b006d6bca93a50e1f23a2b6d20584c91._comment | 12 + ..._01cc0fba0368fcda594d2835247dd884._comment | 61 + ..._463e336fd7f2cb21eff2d87d25851c39._comment | 13 + doc/todo/lockdown_hooks.mdwn | 59 + ..._649dbc3c951bbabc550e12e87e45b319._comment | 10 + ..._575c33970014662c664d71e573e718e7._comment | 28 + ..._f57299385578914f5bca05f06b76cd46._comment | 8 + ..._614d2c8c758f9920cd84748f8f0d384e._comment | 21 + ...out_reason_of_failure_in_enableremote.mdwn | 8 + ..._dbe339cb1860d27ebc7116ab4d6e50fb._comment | 37 + ..._06e98b0e0704dce8ced214600d0d6347._comment | 9 + ..._1c1aaecf15ee220ed5c39def48ccd734._comment | 12 + ...e_add_--batch_add_directories_content.mdwn | 54 + ..._e5707f72bb086c342c89fc3b5ccf00e5._comment | 8 + ..._5083e5a729f56dab76bdc97fb247b902._comment | 16 + ..._e320d2c3b625f24e2b93c5dab21a1e0f._comment | 10 + ..._98c678aefbc62aed7ceec8c7519d343a._comment | 15 + ..._4cfd430f9e9196ec293fb118e5118160._comment | 10 + ..._93cb877bf71acddcf15a6c1ed48d2768._comment | 14 + ..._2155ce0ab07a84a4f36bcf92c29ec792._comment | 11 + ..._5d63312c2efe3f1a25f9254ed230c66b._comment | 18 + ..._0bbdcf13e0ea7869c1633a34457d9a86._comment | 8 + ...ddurl_respect_annex.largefiles_option.mdwn | 7 + ...it__47__hooks__47__prepare-commit-msg.mdwn | 138 + ..._e7f759dccbfa134a772f15bc5f9c4b29._comment | 14 + ..._acd656bf30f7e0b5def7ad7a564cf914._comment | 39 + ..._0f49414f9b4a68a16a8d47a336242f13._comment | 16 + ..._203a356c1edfaf8c0c9cf01bedc2ec5d._comment | 13 + ..._c7a888605dd063fe7df7c569f1193f8c._comment | 36 + ..._b8bb9e5c7156e4defd7a2e8b7777e1ba._comment | 36 + doc/todo/make_annex_info_more_efficient.mdwn | 6 + ..._afd5c806f7285442401b027f82a8c629._comment | 8 + ..._0770ef5c4c261949a565723073480dcb._comment | 10 + ..._c022caab61061b1f77b78485089a9052._comment | 18 + ..._923dd7c22920b389488ca2625225164c._comment | 7 + ..._c6c8850aefe3ab81f1f113daa734695b._comment | 17 + ..._804dbb72757b09e3abad3e249f704da0._comment | 11 + ..._44efc2bfcdde576aaca002595476a2a2._comment | 10 + ..._90a22c51b19707ee0cecbe652c6ffa98._comment | 15 + ..._3bec13ce0c9f0932715d73106d576e86._comment | 10 + doc/todo/make_copy_--fast__faster.mdwn | 8 + ..._1af4ac0d37c876912678522895c1656b._comment | 61 + ..._1ca8d9765e6e3a18ae09df74bc390a00._comment | 49 + ..._14856a2886cf73d1bee57ef9fad01661._comment | 8 + ..._0f8e2127cea96c4f9609fa7599b1eec9._comment | 10 + ..._24a9ca652007a18f18b368232cf549da._comment | 7 + ..._0c67f467d730a0966b43171de0382c42._comment | 49 + ..._5cd9e6b5d6d015120b5852bd212314aa._comment | 22 + ..._3ac10a07c74e5debafc9ae574d26c955._comment | 11 + ..._eb7008151a59e35c7850df3a86cf3587._comment | 11 + ..._3a08de49e9661f9df5bab272e170461a._comment | 28 + ..._3f52b6e19035d3c891356c6d98035987._comment | 58 + ..._c1f99493f5e5c362d5c39f048280b11b._comment | 45 + ..._f4d802a28b79905da0cb24af6cb65b0a._comment | 42 + ...___while_addurl_--batch_--fast___63__.mdwn | 33 + ..._f8ea668cd8a405226113ef2edeb9e678._comment | 14 + ..._50d04e85c0504f920ed7d2ccb9cdb6dd._comment | 8 + ..._2ebd0de2fe55230f4e589bd295c828a2._comment | 8 + ..._7d1154d80feca270f6226374a51a0609._comment | 39 + ..._8e931e54738640cecf0bbaf80a3e8660._comment | 8 + ..._3874f5da5a300b7d443e1ad6373b4099._comment | 11 + ...how_avoid_all_the_failing_opens__63__.mdwn | 65 + ..._20db4ecf9debcc2662ec69a6ad9b37c6._comment | 21 + ..._b3c5851c3603976d59927b591ba1d126._comment | 20 + ..._2363dac7701b9c36eb1896a09e68c17d._comment | 35 + ..._5d65192366f7690c22d1a209fb1e8f78._comment | 20 + ..._16aae09d0e1d80240fc3ae81e5b06972._comment | 45 + ..._013afa9d45970397bfcd60e57a519d67._comment | 17 + ..._c43788c8730619c3590d1a0a2bb87148._comment | 14 + ..._77a2f7d18cbcf780d8e2bb4a3e40b4fa._comment | 12 + ..._7650d349ba50972b64cd6d81673bf1c9._comment | 8 + ..._13b21a0523b8837f4e27bb78e35ad5e0._comment | 23 + ..._c67d403cb5bb67c3486ff9ade9607b2f._comment | 13 + ..._c67fe4be932b8e7e365ed336e612b526._comment | 72 + ..._6ae9e999b6af6b6bfe078dd187f7ff22._comment | 72 + ..._bfb9b94048fc239f29351a9d38c8d4e3._comment | 38 + ..._7a57b6713788778f6a6e8144cf3931b2._comment | 38 + ..._3a849428b335964f80a8503d44d51c5a._comment | 39 + ..._5f5d9af7ed807b8ef203426f717822b2._comment | 39 + ..._b45863d81e3790ea44714a18c1721abd._comment | 72 + ..._ce5fb75f944816b134fd2dc7a389b913._comment | 180 + doc/todo/metadata_--batch.mdwn | 4 + doc/todo/migration_to_VURL_by_default.mdwn | 29 + ...em_efficient__34___journalling__63___.mdwn | 39 + ..._5bbc2d651e4ce0ea5b20f199be5cb717._comment | 38 + ..._5a29f3bc596b463b6710a6654b2e271e._comment | 12 + ..._6486a0cf500f6ba3a9306cdc137f7b4d._comment | 8 + ..._3d1a1ede9d1b5048723a542996121dd4._comment | 59 + ...esolution_of_trivial_export_conflicts.mdwn | 20 + ..._5a2d7ea060f5e1be11c39521c0a5631d._comment | 19 + ..._70c3cfa9b95f3aa6c2e2e2f6dbbc50d0._comment | 66 + ..._d0549f8a07032ce61e88b4ccb2c6ef3b._comment | 31 + ...4____63____41___credentials_mechanism.mdwn | 15 + ..._7078d380be9e78fea9fd5bec4ef9594b._comment | 36 + ..._9e2c1d58f0d91dc55524d2e164b89b97._comment | 14 + doc/todo/moreinfo.mdwn | 5 + .../move_readonly_values_to_AnnexRead.mdwn | 8 + doc/todo/multiple_-m.mdwn | 4 + ..._for_adding_git-annex-config_settings.mdwn | 108 + ..._bcc5d69426fc6af6affdaf251dd9dd5d._comment | 8 + doc/todo/needsthought.mdwn | 3 + doc/todo/network_test_suite.mdwn | 34 + .../new_command_for_syncing_content_only.mdwn | 23 + ..._7f983de645430d970c75f25fee27b2ed._comment | 11 + ..._311cd71d61bea5782c71ee33282d152e._comment | 8 + ..._19398beb81c56b3b7cc3aff7081a2886._comment | 10 + ..._c72cbc566af9585b4701f833883f878e._comment | 14 + ..._857157a775711330df39b57828cf9bd4._comment | 9 + ..._3ca0ef151b73781d2fe168c56d54faad._comment | 8 + ..._084e139c8325bb8607f6c0a9f3873afe._comment | 26 + ..._c666e3ef20e823230392a70d6b588e7d._comment | 10 + ..._one_column_per_UUID_in_git_annex_lis.mdwn | 13 + ..._e6d9efa01ddeb129469b3b8a4205cb3f._comment | 16 + ..._049625685f6147f38392e2df1dadac33._comment | 8 + ...redentials_for_password_per_each_file.mdwn | 35 + ..._ae15355f54b5137e696aaf5d2111806b._comment | 16 + ..._0c60c791513acff3910a29513f7f2f78._comment | 8 + ..._2d8902e343e65a39b5a23278793ec921._comment | 13 + ..._39ccd0fe773200166d0727dc903c34e3._comment | 30 + ..._4dca41df7506fa7aedf88d7618bbcf39._comment | 19 + ...yingroup_preferred_content_expression.mdwn | 24 + ..._eddf28997789400398fbdd58ec64861d._comment | 8 + ..._b1a22e4fbc594c3085e7fbc6fbaab69a._comment | 34 + ..._8f205160e62aa1312b8e2ef4cafe8c50._comment | 22 + doc/todo/openwrt_package.mdwn | 6 + ..._100d76109e04bc43979775d71b4152ac._comment | 12 + ..._2cb7dd4c0cc4413a4588b13cf7700de2._comment | 9 + ..._5ba8a325a683ff543d81a366c873070d._comment | 8 + ..._132e67b34f9c616217e037e4ecac70a4._comment | 8 + ...optimise_by_converting_Map_to_HashMap.mdwn | 12 + ...timise_use_of_keys_db_on_local_remote.mdwn | 7 + ...optimization_needed__58___slow_uninit.mdwn | 24 + ..._3d01d125ffea8dd247e68f716a9c636a._comment | 12 + ...al_remotes_like___34__directory__34__.mdwn | 9 + ..._8620167702725aa8fb0e42dfe3820520._comment | 8 + ..._f964bb1a14f099e69f1e780ee7c7ef68._comment | 18 + ..._d4672f72a00509186cfc5dd85e1da140._comment | 15 + ..._4560eff896578ac2779b03ec3484d0b2._comment | 12 + ..._a154a025d441db4e0140fee821d1791c._comment | 39 + ...___to_not_drop___34__all_copies__34__.mdwn | 10 + ..._8f40b2663c9f48ddb07969af1b6632a8._comment | 27 + ..._32383ff5db43f0f4dc9e7470613f04fd._comment | 10 + ..._2665f3fc268dff1de24d6ee9648c5d8c._comment | 8 + ..._5fb82eb18c6d935ac07ec9220d9037c0._comment | 10 + ..._c7b9cbdbc4be36ea4d56a1eec13c6f34._comment | 23 + ..._aa58624e8d0de174a06c6c2c0e33dc14._comment | 25 + ..._150a87dea1bd24e3d4e18cf3bcfb937f._comment | 7 + ..._1e87a33fe71ec2d5f4df887b94dae7c6._comment | 13 + ..._references_to_not-yet-saved_contents.mdwn | 5 + ..._4e813660a7743ecc3378b87adb0cd0f8._comment | 8 + ..._8aec191966e5633ae6b1b008f8990d3e._comment | 15 + ..._7337c487d7118e0bfdf931a741f3d5a4._comment | 8 + doc/todo/option_to_explain.mdwn | 42 + ..._81644886e14851a276dc3c89965df62e._comment | 10 + ..._71616074104ab70eb76ad5edb9207b5c._comment | 12 + ..._2179a7fec079045d82a58993d3f09995._comment | 8 + ..._28919c6f816f11811b1e8c73b07403f7._comment | 32 + .../option_to_individually_hash_chunks.mdwn | 5 + ..._c6d5133efb3ddc9ac632530600257bdf._comment | 13 + ..._29821c673e5e8ce88c62086a67346357._comment | 8 + ..._3cd814797e837fae3dba8d6d99f41ec1._comment | 17 + ..._b2a78d90e7e2ee8a98f12663c9e1041a._comment | 11 + ...files_that_are_expected_to_be_present.mdwn | 7 + ...ption_to_put_temp_files_on_a_RAM_disk.mdwn | 5 + ..._28a5627604d2d4b25c51779a7216931d._comment | 15 + ..._1df752ac3b9cb2cc0e4a7dd4af71897f._comment | 8 + ..._12a1b6f9fd616f5c498d5aff1cf1bcb6._comment | 15 + ..._8c6aa3f5aee359f2f161b6664cdb5c32._comment | 22 + ...th___34__informational__34___messages.mdwn | 14 + ..._bfbf428da46eaea52cc54878f119512a._comment | 8 + ..._c43e838b750448fe4d1519e72c43242f._comment | 8 + ..._e006b8efab713d4965316c9846ec437c._comment | 18 + doc/todo/parallel_get.mdwn | 86 + .../patch_generation_with_annexed_files.mdwn | 121 + ..._file_extensions_in_WORM_and_URL_keys.mdwn | 3 + ..._3cf91bca8e01f98644b0d25a45ecf092._comment | 16 + ..._to_download_remote___47__config_file.mdwn | 42 + ...files_using_all_disk_space_by_default.mdwn | 18 + ..._in_--json-progress_record_for_addurl.mdwn | 20 + ...41___version_of_initremote_--whatelse.mdwn | 61 + ..._5ed9864ef616d9e9b77a3d62561363fd._comment | 24 + ..._e9647b34aa79c414faf0f57ba17e6af4._comment | 14 + .../provide_windows_build_with_MagicMime.mdwn | 9 + ..._11adb1623314e8a43c50704c5e6e62d4._comment | 17 + ..._8f2d350c853f8827e1d5f95897dc2bd8._comment | 14 + ..._15509110c5900aee2cc977372da16f0b._comment | 9 + ..._4727291eefa07a40da13dace75a2e255._comment | 8 + ..._4633d2a40bca1ba8fa93f7038569715f._comment | 8 + ..._5542a421c6c7c878394d7dd7a3bce9c1._comment | 12 + ..._d16e4fb3d0be2acd23d158272171b842._comment | 12 + .../proving_preferred_content_behavior.mdwn | 75 + ...licurl_config_for_all_special_remotes.mdwn | 8 + ..._58b2ec259bd3d9e368240e459330a738._comment | 9 + ..._d9933855e8521ebed00406a6350837b7._comment | 8 + ..._42ac954b120205650a2a5f03872085c2._comment | 13 + ..._3c144c0323d49f7ca2d6b9971ad3160a._comment | 28 + ..._1d9186506f8f44415706f3b4394c9008._comment | 21 + ..._7f027aa4b5b495a93aee3cd3417862a8._comment | 22 + ..._c35df3621c7b6a1b518787fdc8967ee7._comment | 8 + doc/todo/read-only_removable_drives.mdwn | 17 + ..._979455e3694ae2403134ed6fa2add2fa._comment | 21 + ..._08fced29b86b21f63bb0868747227e08._comment | 12 + ..._2675e211c7bd248b7f7c1bbc6fd46679._comment | 10 + ..._9e9bc6dd5fa8c4cf7f2511b771bd1bc7._comment | 8 + ..._a693c5744bfc6c33f5605aa9d9c0bfe0._comment | 8 + ..._737e3d315f29a4fc61597ce4f9ec6206._comment | 20 + ..._16c8652d38ae57db4ed1860a4733a18b._comment | 8 + ..._a802e0617c9ef72eb8d3842de99e44ae._comment | 11 + .../record_ETag_when_using_addurl_--fast.mdwn | 3 + ..._cf15e943ba9405240aecc3dc83b4ef08._comment | 14 + doc/todo/registerurl_--remote_REMOTE.mdwn | 7 + ..._9d99569edd7ee8331626ec9fffeaa1b7._comment | 13 + ..._59f6ff108c40b4597a7a870fafdaabc2._comment | 39 + ..._70244d4f7f81b6799cd541ad14b38ee0._comment | 14 + ..._334ce2eb815d6d8489f9cb00c09b0bd7._comment | 8 + ...in_journal___34__in_place__34____63__.mdwn | 33 + ..._0de07ff7054e7d71a6cf1d08051664f9._comment | 39 + ..._b41f6266e341ec05586e6ec32b6cf68a._comment | 73 + ..._3994a27f274ef2025300291ff1bce8bb._comment | 10 + ..._0154b05e0b0edccd8e69657501938d92._comment | 31 + ..._aafc89e24d5640dad3b8f6134c1ac26b._comment | 11 + ..._41ba5600367f6893e8ed0bf01be3d539._comment | 33 + ..._b120af2367cc3667934c088b496331f6._comment | 8 + ..._fe41f306edfb0ae608dfb3a8f153bcbf._comment | 13 + ..._6b4df9d81c523e090b83c56bfdce373a._comment | 16 + ..._b23a39f88879b3c770e112f9e82c4607._comment | 35 + ..._98cd9e5dd449cbd834f53d97fd5dfc13._comment | 19 + ..._532690bc7b9707aa053814c3e84b1dca._comment | 8 + ..._fc54794546e8e14b31aa063d93c328de._comment | 24 + ..._953eaa6ca651597897a6c6ad7a259d1d._comment | 20 + ..._4b576c9c33ff2a322cd832027484606b._comment | 15 + ..._fb760c2566b6f37ed7378bbcca5875c5._comment | 12 + ..._148392f465864f19593de0b1aa56f7f8._comment | 7 + ..._a4fce84f5777ed582fa599778835455f._comment | 56 + ..._56c313fdcb88e95abaa10647678bc108._comment | 10 + ..._13c0eecd57ea56bb1e21e130d7343778._comment | 8 + ..._52a1fe104856968488b386b701c4a4bd._comment | 27 + ..._29a487203bf620e44c3e9db2d22f5ee3._comment | 14 + ..._6bf718a1c6185b6aed0b6d0d5c4c9cf8._comment | 14 + ..._e041fcd11c50d47eada124368a5bb7b5._comment | 17 + ..._dd5a1bdc1cc3ecd6ac68cc83fb2195ed._comment | 19 + doc/todo/reinit_current_repo_to_new_uuid.mdwn | 3 + ..._2274082a0d130127eb2fcc12e3404d08._comment | 12 + ..._d7f2a6de08a3559a1d76ae8aba5a6702._comment | 10 + ..._94434f7e76df4a25d922eed28ca6b559._comment | 16 + ..._9d2b98c15d78781f943f0f2ddf775706._comment | 8 + doc/todo/remote-ready-command.mdwn | 21 + ..._55cbea73adb94e85fc2e2252d6f2f03c._comment | 20 + ..._0e79b93a9c614a259b9a7d7c1f6cb6dc._comment | 19 + ...ove_legacy_import_directory_interface.mdwn | 148 + ..._335ab41b3539f605ace1830577794913._comment | 11 + ...34__process_done__34___debug_messages.mdwn | 50 + ..._3b069234f20378fc231802c594eb213d._comment | 12 + ...ries_that_count_as_more_than_one_copy.mdwn | 9 + ..._cc1ea7d1c6aac3749b4ecd789594e3f9._comment | 7 + doc/todo/required_content.mdwn | 25 + ..._42620a3c958666be2a0d5f5b8eadf7b4._comment | 23 + ..._132ec6378db63af6281569cf5748b9d3._comment | 14 + ..._b16a8e8b45ceee887c8c0167b7859654._comment | 8 + ...motes_from_standalone_git-annex__63__.mdwn | 3 + ..._8a59da3012b9d177b4baa72610b72fc9._comment | 36 + ..._96f1138462fecac628751d872e2ceb9e._comment | 8 + ...rl___40__and_future_add__41___--batch.mdwn | 6 + doc/todo/reuse_desktop_notifications.mdwn | 30 + ..._6193ed5a4ad0a908af82da33d14bd654._comment | 8 + ..._3fb10a432a57ce14cb7bc2946467ab22._comment | 15 + ..._ac0e5f437b5d2677e916224d6dfaf666._comment | 13 + ...entkey_option_to_record_chunked_state.mdwn | 3 + ..._99bf00b8f78d75888dc7bc69d36cd112._comment | 12 + ..._42e9309fff6a71c1a0a625dd2bc6aae2._comment | 12 + ..._97ed902a268ebad53f534dd48a6f5fc9._comment | 14 + ...itory_mode_not_supported_by_git-annex.mdwn | 9 + ..._b219d62cd7d21002ae73d0dbd4b792be._comment | 8 + ..._7140ad0abbb54f5a4e20b165a08793e2._comment | 14 + ..._c3dff87829e3f055881829eb4598f903._comment | 10 + doc/todo/shorten_git-annex_manpage.mdwn | 38 + ..._4b82eb4af9b923b23c6ecd8d355c0651._comment | 24 + ..._859444d7e2826ac4448b0ba0f716328f._comment | 17 + ..._3543a2edda668c3f0a90c46aeee94812._comment | 8 + ..._fa6c2870f4a83d0f5680b76b05009e4b._comment | 14 + .../shorter_keys_through_better_encoding.mdwn | 7 + ..._4bd588a3cdca5cb94132549b7d78e6af._comment | 10 + ..._454cb3b2b1102ce4da18f245bc583e7c._comment | 8 + ..._9f5f16a7ab5d3e28cdddc333d97b87ea._comment | 19 + ..._720012572e1d748bc628fdb17a55a3bd._comment | 8 + ..._41857b7f25f8a922640378a41574b84d._comment | 11 + ..._de3f0be0f6b560ca7bb66f7b5c8f0592._comment | 8 + ..._d499c66c9a1981bb14d0ce63f4983ea5._comment | 17 + ..._5592ac9d1887183daf3173a0c27b672f._comment | 15 + ..._75f611c63bf1e9c8b4885fea8e9d467f._comment | 10 + ..._info___40__behind_option__63____41__.mdwn | 3 + ..._74c3bbb7819368a894ff1189988e4cd3._comment | 44 + ..._0cc7a3c53ffbabcb13807956541d83ec._comment | 10 + ...here_unused_file_was__44___i_can_wait.mdwn | 9 + ..._732f726f72f2540372d434974fda60f2._comment | 11 + ...adonly_removable_drives_in_the_webapp.mdwn | 15 + ..._c41140289f9b062e96cfd5d9d5382155._comment | 15 + ..._b9236ea884a2934dd0c8e511a80f4fda._comment | 8 + ..._time_of_last_interaction_with_a_repo.mdwn | 1 + ..._4ec9597df62dc4a2f7320f13f6a0ee8e._comment | 8 + ..._997d9968782f7fd96d9edd9c380a3ee9._comment | 32 + .../simpler__44___trusted_export_remotes.mdwn | 5 + ..._cc6a862519677ea18f78d24f40a48be1._comment | 29 + ..._5528a5dd5f8d7746b175552a077ba313._comment | 8 + ..._3e7be2ba92559a767ea09b764daef2db._comment | 22 + ..._be525962211e8c4da681279aba132c71._comment | 14 + ..._aeefb4803340ff993a1d6673c8e5e97b._comment | 11 + ..._0d27b08792112cbee7a368bc94044bb4._comment | 7 + ..._for_a_special_remote_of_a_given_type.mdwn | 17 + ..._8ea993d1acc92f3aa9594ed8e2d3ec7d._comment | 30 + ..._96fae68472f7f9ef720c27149556f7a0._comment | 10 + ..._b75ffc63f0e9a85c3d1f01bdce21c97c._comment | 18 + .../specify_gitconfig_for_test_suite.mdwn | 8 + ...__58___extension_of_speculate-present.mdwn | 6 + ..._264538d1cbf07254a2857ca4cf40e9ac._comment | 39 + ..._93450de83c4843f6828e971a948d12e3._comment | 12 + ..._272d66c3549892687879ef20e0cd9cf1._comment | 8 + ..._8627a8073fe0b4c144f26d32626e0c1b._comment | 8 + ...up_VURL_by_avoiding_redundant_hashing.mdwn | 10 + ...ndalone_build__34___and__47__or_tests.mdwn | 41 + ..._0e070bc39eb0b8d9cf307af8a06504dc._comment | 8 + ..._41749c4c9b317a58e02df99f748844a1._comment | 23 + ..._f462ee4719b4c459c12e36ce29ab82b5._comment | 13 + ..._dfd20b6c6a49c99243945a267e041d58._comment | 38 + ..._650e5dd2471cdfd0223d712771067d55._comment | 24 + ..._0ee51fffee1f591173418212919bcd30._comment | 12 + ..._b4aecfd9f1b7f0e16d5f1dcb3c16af3e._comment | 16 + ..._e11ae8ba6dd6e6c53891db954d28bfff._comment | 45 + ..._b06360071e05df18b895322382357b61._comment | 17 + ..._2253c6916a1c6e4f1393b8656617aa10._comment | 17 + .../speed_up_annex.adjustedbranchrefresh.mdwn | 105 + ...eed_up_drop_on___34__heavy__34___repo.mdwn | 38 + ..._5c92b3e7c2fc0e8a8e943690c1806322._comment | 15 + ..._a5587ebc2a406d52855868cdeb39b83e._comment | 15 + doc/todo/speed_up_import_tree.mdwn | 50 + ..._import_tree_with_many_excluded_files.mdwn | 89 + doc/todo/ssh_special_remote.mdwn | 44 + .../stalldetection_for_import_and_export.mdwn | 13 + ..._growing_number_of_libpcre.so_lookups.mdwn | 55 + ..._ef6645a9b6d69a652cd042185c864677._comment | 33 + ..._181175a281f3a4298341d109064eeff8._comment | 8 + ..._0358f9e216271ba0be8684eea4a3e1d1._comment | 10 + ..._5e3c73faeaefee8f0ec1227c672f2be5._comment | 18 + ..._91ab4b860a074c90e5cbeb03e3515ad4._comment | 13 + ..._2e435cc8fe61c7ca7c59f2a63fbbee20._comment | 8 + doc/todo/stop_after_these_files.mdwn | 27 + ..._specs_as_was_done_when_wget_was_used.mdwn | 29 + ..._0f2f5b58020879252d716930f2396b81._comment | 14 + doc/todo/support_for_storing_xattrs.mdwn | 17 + ..._55c839d1b8af5150a5df29f0314e4b79._comment | 12 + ..._c10f87259aef110510014ba16d0792ad._comment | 26 + ...c___40__cp_--reflink_equivalent__41__.mdwn | 3 + ..._d94d813bdd6bea17347c87597788aec7._comment | 10 + ..._e5b9898f69fa9143519e58378ac668f8._comment | 8 + ..._9fd59c3ec54d54790050eb8860964783._comment | 10 + ..._1b23963d04c5bd53d3de09970816fad8._comment | 8 + ..._e506d7b173bd04ad7f32db52dcc1ea03._comment | 25 + ..._d812c6dbd672e3dcdeb5c87806dcef91._comment | 16 + ..._8fbd3cdc5a077cbd51d41db30c19a005._comment | 8 + ..._4580926755ee2802c80baa9f9bcc0661._comment | 10 + ..._bd610770eff9ef1eb68085e28c1175fa._comment | 7 + ..._f09b99a17d52a55e609bb3ca02db781a._comment | 32 + ..._f1c3cf11cddb9e5c7747e5824cd4b608._comment | 12 + ..._5097e4ac096d1b0b9c06c544b9217e22._comment | 19 + ..._via___34__built-in__34___ssh_support.mdwn | 40 + ..._7932fd28b14898a0b4846856a27405b8._comment | 9 + ..._048a8f7b52a0baf4c0abbae37de00257._comment | 10 + ..._04be2f010aeb792e070f1ff93435fabc._comment | 14 + ...sing_Stateless_OpenPGP_instead_of_gpg.mdwn | 52 + .../symlinks_to_symlinks_to_the_annex.mdwn | 5 + ..._54bae401b8de13c9973ef5e6d2cf7e88._comment | 9 + ..._f5c08ecd3b0b4099186d78c85b7f1e6f._comment | 24 + ..._409de39da33b7ecfe5b8c7b2e866225e._comment | 28 + ..._818c85d1a199d40daca7371fefb18bc3._comment | 9 + ..._94b84cd27c36d14dc16837484d232d72._comment | 9 + ...d_branches___40__e.g._git-annex__41__.mdwn | 6 + ..._06fd59c8bdd451b5608e1e0191f4d5cb._comment | 8 + ..._436fd00970867a8bb0806a753ac24963._comment | 14 + ..._2e768899c332cacffcb1fa6edb195325._comment | 19 + ..._741720c1b65fff2f8ecb87abbcf16223._comment | 10 + ..._73bd5d343286f61c9ac753ed3b00c149._comment | 10 + ..._bab52f2fd4f66cac6a178cdd9ef71c6d._comment | 14 + ..._a765e998ffaecc2af681947263cd80d7._comment | 27 + ..._8f19d38c815dd3051004301a15657cf6._comment | 22 + ..._15e336ea35f0233e22f7c5b656b616d2._comment | 56 + ..._757f97ac10035ec6b28720c0570b19f0._comment | 10 + ..._6c683fcba5d69a4c0051eb42b8c558a0._comment | 48 + ..._5bef9faa4df40b84c991b9ea5e1ab7a3._comment | 36 + doc/todo/syncthing_special_remote.mdwn | 110 + doc/todo/tahoe_lfs_for_reals.mdwn | 23 + ..._0a4793ce6a867638f6e510e71dd4bb44._comment | 10 + ..._80b9e848edfdc7be21baab7d0cef0e3a._comment | 13 + doc/todo/terminal_escapes_in_filenames.mdwn | 70 + doc/todo/test_suite_unsafe_use_of_setEnv.mdwn | 22 + ...ooked_up_3_times_for_libpcre__42__.so.mdwn | 41 + ..._35e85e3088c4453751ebffb7357a9f9b._comment | 8 + ..._61d70f4a06edaa593a17d47019be53de._comment | 27 + ..._89701d7011c3c9085afaab33aa16c39f._comment | 12 + doc/todo/timeout_support_for_importfeed.mdwn | 7 + doc/todo/to_and_from_multiple_remotes.mdwn | 69 + ..._2c055c3f55e0796b6842df8c2733726b._comment | 8 + ...____40__and_probably_copy__41___to_S3.mdwn | 8 + ..._42256576a4b5e8312b12e785fbc8fb1f._comment | 38 + ..._6b655d30bf07518f33ec42cdeabef4ef._comment | 8 + ..._fb3e0585f6700050db7a06e27d8e1099._comment | 7 + doc/todo/tor.mdwn | 28 + ...e_space_in_repos_via_git-annex_branch.mdwn | 88 + doc/todo/tracking_changes_to_metadata.mdwn | 14 + ..._825c15ba36324aad58faf643057b256a._comment | 28 + ..._03a631beaa20a479f5016def7585d363._comment | 12 + ..._a05652472c37c463eca22f11cf6596a4._comment | 14 + doc/todo/transitive_transfers.mdwn | 29 + ..._d244295696be5a8164db45f7fad1701a._comment | 47 + ..._7255f5083283b0ae7e7fc41e127bd829._comment | 26 + ..._e5c2ede203e7bdb5af8432df6c09268f._comment | 81 + ..._cb92e81c1ea00ca72f9a5ee729d627f4._comment | 11 + ..._50670cb52b29dc9c0c6c981e6f6d198b._comment | 15 + ..._ddef2f127a49c2eb8a15b5848756d888._comment | 9 + ..._6417ec94a5723776b6688ccbb0453ffc._comment | 10 + ..._7ffe073c582fc9392213ce52ba6ba398._comment | 8 + ..._6d5c2697bc985627199e425962f23189._comment | 13 + .../trust_based_on_time_since_last_fsck.mdwn | 5 + ..._3805e8dd9e6dd986c097c6f1b78ab244._comment | 32 + ..._ec1b87b389dc06440df04c9a719e0cbc._comment | 13 + ..._23f37b9d8b877b829e34e6c8ea6b40c4._comment | 22 + ..._29729772f7600dfb459e3be9cf2c43ea._comment | 26 + ...r_specific_remotes_for_specified_time.mdwn | 5 + ..._96e12b8ecba4bacfbfa5c58025bedaab._comment | 12 + doc/todo/unify_adjust_with_view.mdwn | 73 + doc/todo/union_mounting.mdwn | 10 + ..._cb08435812dd7766de26199c73f38e8b._comment | 8 + ..._240b1736f6bd4fbf87c372d3a46e661b._comment | 9 + ..._cf0a0d4fbd929f24f7056115b2acb7de._comment | 8 + ..._2f02fe00a84bf94b7c8e437d8b80293f._comment | 67 + ..._58c38383a7ac2df843772960fa10204f._comment | 9 + ..._65055977d7c8db3c9c29d90e033e5bb4._comment | 17 + doc/todo/universal_batch_mode.mdwn | 4 + ..._83264867c7f58d92148d1585e4361ee5._comment | 8 + ..._c662c1e2410285e9bf6d01135851fdc8._comment | 28 + ..._c8232195fa3db718dc2b246d528e6c00._comment | 46 + doc/todo/unlikely.mdwn | 6 + doc/todo/unlock_--json.mdwn | 10 + ..._4cd41dca533de8147027eeb9a8ad89db._comment | 16 + ..._f00fda45d300ce14a5ea6fd32a20defe._comment | 12 + doc/todo/unlock_--read-only.mdwn | 8 + ..._c2a1f402a28c44f842d88747fa3741cc._comment | 18 + ..._e8f1576e67d6368eb28aa89c30aaa34c._comment | 8 + ..._19da9b33836df34b7d747039e6863586._comment | 13 + ..._1658f775ef9340e65711512049085dd7._comment | 20 + ..._305c1b867c38edf74cdff1638e5b1cfa._comment | 11 + ..._515e21cf5c2dfbf9fd780af9cef2e726._comment | 22 + ..._645bccbcd3499eb552a24563cb613af2._comment | 8 + ..._eda5475b89536726ec29a831e2748f43._comment | 13 + ..._3ea1a354bb631539df1ac941e76988e1._comment | 14 + ..._c39e204047bd9a1999b69a433b22b16d._comment | 12 + ..._82a8bfe07d78fc29d306fa5545e866a7._comment | 13 + doc/todo/unregisterurl_KEY_URL.mdwn | 19 + ..._9562b4583203b49ec68162f3a4816ad7._comment | 20 + ..._87ec9a2037eaa84011f7e7ecf43d31aa._comment | 13 + ..._22edc4e69a686511c76c7c7608da5793._comment | 20 + ...ge_chunks_without_buffering_in_memory.mdwn | 26 + ...use_git-mktree_rather_than_index_file.mdwn | 29 + ...tial_system_for_git-annex_credentials.mdwn | 15 + ..._preferred___40__wanted__41___content.mdwn | 12 + ..._8c377382b772e4c2d0c1f981010b8d91._comment | 17 + doc/todo/v11_changes.mdwn | 30 + doc/todo/v9_changes.mdwn | 22 + doc/todo/verified_relaxed_urls.mdwn | 127 + ...of_breaking_changes_same_way_git_does.mdwn | 31 + ...t_on_how_to_decide_on_extension__63__.mdwn | 16 + ..._b3e9fcb09b6455301a5f7a9bf50a8a49._comment | 22 + ...rust_without_unncessary_branch_update.mdwn | 15 + .../webapp__58___show_times_of_events.mdwn | 5 + ...export_remote_configuration_interface.mdwn | 12 + ...nudge_when_less_than_numcopies_clones.mdwn | 7 + ...h_locked_down_git-annex-shell_account.mdwn | 7 + doc/todo/wherewas.mdwn | 29 + ...hlist__58___GPG_alternatives_like_AGE.mdwn | 8 + ..._92a7d08946a3ed95d0f0413e6c6208ae._comment | 8 + ..._18ae790f59a9dbeda745e6f6f45384cb._comment | 35 + ..._09b89df28a3a3dab2f0fbf2f56feafe1._comment | 36 + ..._b9de19ba8382225ac8c65ee1ad8110a8._comment | 18 + ..._c81d61a221fd93eb25765998b67bbde7._comment | 32 + ..._991bf6846513818c00b75b7962b0fb2e._comment | 13 + ..._d86cf1376fbbd85e9ea63d7b7afbd1fc._comment | 8 + ..._d784886328bc00b2adaba2391776d2c8._comment | 13 + ..._18861f94b677a40c2d1c0014338231c6._comment | 22 + ...list__58___kde-connect_as_a_transport.mdwn | 9 + ..._14426ad1fa5dfc32d290da484c1e4c7b._comment | 21 + ...for_Win32_not_export_c__95___entities.mdwn | 57 + ..._40985c5919f20fd47fa57caec09bfa3c._comment | 19 + ..._1d9c331e774138ceb89b1f7920bb76d4._comment | 14 + ..._88b58dd27cbff3f046b6f8d1c612f87f._comment | 50 + ..._28e5593e0a58fb7d7a2a297fa63e8208._comment | 9 + ..._43603d84801cfe0ecfcdc408db97ae22._comment | 11 + ..._a623b2e131dd85f50e04483d262abc9a._comment | 26 + ..._91c17601eed0936bab17cdf9ec5f3ecb._comment | 7 + doc/todo/windows_support.mdwn | 136 + ..._394127e34e07ab3dc0e7b94ee6898866._comment | 8 + ..._c91eb7da8ee05064a5bc4a6e2203314b._comment | 8 + ..._0775dc22516cfa8c5e7deea954084947._comment | 18 + ..._4dfb65242280c2e28796f1ab8f022dea._comment | 13 + ..._a8519b722cb94f9363d4a8a8bd40e942._comment | 9 + ..._61d1281072de2bb418cf96fd8b563d45._comment | 10 + ..._6bbcf900874e950b08cdf0410f7a75d2._comment | 11 + ..._653b36e0838308dd85d38b05d3df5077._comment | 11 + ..._fbd19cd8365808daa007f44ff167c635._comment | 11 + ..._87e06eb2968856ce97b6162bc14203c1._comment | 9 + ..._3cc26ad8101a22e95a8c60cf0c4dedcc._comment | 10 + ..._7d83963db52d5dedd65f8cf7937dff4f._comment | 12 + ..._49ef5997d36ade4797ef77b1b62f5405._comment | 15 + ..._8e5b8ec9e6a63bcde7390511c92d2940._comment | 17 + ..._616a7d579730e5a4f5cc314d6328bfd0._comment | 23 + ..._f50de72a082476e0a2e7587368191788._comment | 11 + ..._5eb1a4693db88a9e05500ad66edce61d._comment | 18 + ..._99d0541d1c7f7c82a67d481c61209670._comment | 13 + ..._8acae818ce468967499050bbe3c532ea._comment | 12 + ..._bd0a12f4c9b884ab8a06082842381a01._comment | 8 + ..._ad06b98b2ddac866ffee334e41fee6a8._comment | 8 + ..._444fc7251f57db241b6e80abae41851c._comment | 10 + ..._34f1f60b570c389bb1e741b990064a7e._comment | 8 + ..._a5ca56c487257434650420acfa60e39f._comment | 8 + ..._61214de7d967740d42905f3823ce2f65._comment | 12 + ..._259a0b1a6f4d8d1944173380adc5e7c8._comment | 8 + ...8___--dry-run_option_for_all_commands.mdwn | 6 + ..._03bf493d5a7f957339f9aa388ba85ef8._comment | 20 + ..._8ac7ae6937d219854bc60b56b8646d8b._comment | 8 + ..._411cabdfebe353d35f8dc78364f4a507._comment | 16 + ..._2824eb6fd3fe9a44d48639c38d478351._comment | 17 + ..._e139434d88638d05c84b721abdbb406c._comment | 17 + ..._cd430ea90286759eb5311ef376f63929._comment | 7 + ..._--maxdepth_option_for_git_annex_find.mdwn | 24 + ..._c355878ac49bbb23a4cf82fe685da9ee._comment | 10 + ..._da30a066c4de465fe172ad01057e2380._comment | 10 + ..._f3eadd6241f5cc2886515b2826dc5cf9._comment | 10 + ..._c766c1465407324fc933db78be325b33._comment | 12 + ..._dcda795ff29de150ced0c839c85f7837._comment | 17 + ...ishlist__58___Add_--byte-limit_option.mdwn | 16 + ...ist__58___Freeing_X_space_on_remote_Y.mdwn | 5 + ...__Option_to_specify_max_transfer_rate.mdwn | 5 + ..._4fd870e14b5b70c8a6ade41406294387._comment | 10 + ..._dd854f297ad6a94b54be9f3edfd0f766._comment | 8 + ..._a8b7e90a473d5937807cc7eb456efe33._comment | 10 + ..._53c43e480a37b20bc8fed9d38527651b._comment | 9 + ..._428d638e1f41d84df7e6c51675fe65da._comment | 9 + ...___Parity_files_for_encrypted_remotes.mdwn | 7 + ..._5fbffd74f9d89857b807093cd7a5941e._comment | 9 + ...8___Restore_s3_files_moved_to_Glacier.mdwn | 7 + ..._eb934756cb2af7fa13ad3b5fad7f85b2._comment | 9 + ..._____39__get__39___queue_and_schedule.mdwn | 32 + ..._d6ab311beee2ce5f73ae325a4ae463d4._comment | 11 + ..._c2e9ab3ff49c22f27dd800512e7b7961._comment | 10 + ...__whereis__39___support_in_the_webapp.mdwn | 4 + ...___96__git_annex_drop_--relaxed__96__.mdwn | 5 + ..._c83a6cddd0ce222205a149cfa41ca395._comment | 10 + ..._353fbc2bcc40cb8c9af42907a34c6e5a._comment | 11 + ..._3e830035df580601f038ce3a7003c39d._comment | 63 + ..._e5516689bc128c061dcd66649dc69584._comment | 10 + ..._be740e4b06d9130ae6afc5783da3c0e0._comment | 14 + ..._79d115f95cec46bb51e7fba078524db1._comment | 17 + ...__58_____96__git_annex_optimize__96__.mdwn | 12 + ...t__58___allow_custom_S3_url_in_webapp.mdwn | 3 + ..._3d1ea5579a6ad0c0efde58dca11c10aa._comment | 10 + ..._f96bb81fde4185368dc6ea5a5aed87da._comment | 10 + ...tracking_the_sources_of_the_downloads.mdwn | 1 + ..._36ae3c75053d5ec278b5e6eb2084d57a._comment | 8 + ..._be8eb800523db8cf7a2c68a28fbf5ea5._comment | 8 + ..._d9f725de41a8572c85e4c6d9b4bcc927._comment | 8 + ..._f52492e4cc6f965515800bd1c0e05c90._comment | 10 + ..._5b36656fc5fa124e763f06711d9da32b._comment | 10 + ..._285215a4466806baf85b8606f680494a._comment | 12 + ..._15bf62e46db4b84ed3156f550f03de42._comment | 12 + ...iles_configuration_in_webapp_and_sync.mdwn | 4 + ..._db632de391ce9fce42af51a770ed3aeb._comment | 10 + ..._4a0931d9884054d764fde315d4fe4851._comment | 14 + ...from_remote_with_the_least_free_space.mdwn | 1 + ..._6813fdc7ecc98765a5d35d34163a1712._comment | 8 + ..._21a249cedca1ceb80d10784004735524._comment | 8 + ...__58___assistant_logging_improvements.mdwn | 3 + ..._683e2e3c94345cb6f35028cd130a4dcc._comment | 8 + ...ishlist__58___derived_content_support.mdwn | 8 + ...hlist__58___disable_automatic_commits.mdwn | 37 + ..._3f76bc558b59f90d0276be8cd24c6797._comment | 25 + ..._a031373f7251b5395100bcfc57519049._comment | 11 + ..._53b1321d5bcaf4139f9fbbd17f26fe75._comment | 17 + ..._e021de3647a00aa0259a247441de50eb._comment | 8 + ..._701ef8d7bca858150bc0ae070d21755d._comment | 15 + ..._195815446f3ec78901c1ddd245b86c4c._comment | 37 + ...splay_status_of_remotes_in_the_webapp.mdwn | 1 + ...it_remote_on_hosting_site_from_webapp.mdwn | 1 + ...list__58___generic_annex.cost-command.mdwn | 17 + ..._b2060ec194e3ae53bd286f2bae799984._comment | 14 + ...wishlist__58___global_progress_status.mdwn | 3 + ..._d915dce144071f768ee9bcdead07a0e5._comment | 9 + ..._816f41f5436543fc09e7d7df82a8c8d5._comment | 9 + ..._587e8befa0e52d8880362a32799df492._comment | 14 + ..._60b7597af2b86ce6bcb31731f6d8c54e._comment | 26 + .../wishlist__58___history_of_operations.mdwn | 8 + ..._f9a77ce83c6f39b6272d5c577ffbb9f9._comment | 8 + ...t__58___matching_options_for_branches.mdwn | 1 + ..._c0d442b646dc40d870b10098a0ee5408._comment | 20 + ...o_the_end_of_the_queue_when_one_fails.mdwn | 7 + ..._82ee9de610a0ac55cd1c27c211079e5b._comment | 10 + ..._bea55156bd32cf9e6dd9b946ba1bb8c1._comment | 10 + ..._output_of_checkpresentkey_batch_mode.mdwn | 3 + ..._f95f2c92a46c1bd00c627aa19b08c875._comment | 13 + ..._bb756ddf06c52ca52d73af319f0265b0._comment | 14 + .../wishlist__58___perform_fsck_remotely.mdwn | 39 + ..._db92311dcdb1ef0ab0413f83e191c70c._comment | 15 + ..._2f0dbaf143d94290bfbebb6869eb7241._comment | 12 + ..._5ec2e0e248dfd4ca46aef89cc5658d18._comment | 8 + ...ew_hashing_scheme_in_non-bare_remotes.mdwn | 8 + ...ve_directory_remote_setup__47__addurl.mdwn | 10 + ..._b79976afc2242791523e63831f30af71._comment | 12 + ..._1741d2392006a9af9cfd1f3b847600b9._comment | 9 + ..._b6fb39030f98bbc9915712e3d35d1838._comment | 9 + ...58___traffic_accounting_for_git-annex.mdwn | 3 + ..._unify_directory_scheme_for_the_store.mdwn | 20 + ..._44da58beaaab359ecaba7fb905ca4ae1._comment | 10 + ..._bc698c501ecdb56df57171f4f3bb831a._comment | 16 + ..._e555d0dbbaa05528806905c6a940724b._comment | 8 + ...git-annex-__123__copy__44__get__125__.mdwn | 5 + ..._bbbb9c4c71b8c56eaf134b794d2345c3._comment | 8 + ..._1eb09a234616cb0df7fed9016827dd0c._comment | 8 + ..._942c2decd6dda0730e2efe4ed6e6cd16._comment | 22 + ..._stamps_to_annex_log_popups_in_webapp.mdwn | 1 + ..._ec90432a7d46383071401b05243d621f._comment | 8 + doc/todo/wishlist_degraded_files.mdwn | 5 + .../withExclusiveLock_blocking_issue.mdwn | 83 + doc/todo/worktree_overwrite_races.mdwn | 45 + ...r__41_____34__Video_unavailable__34__.mdwn | 94 + ..._8b761cfc9b2ca784efc15b39689c31f5._comment | 20 + doc/transferring_data.mdwn | 19 + doc/trust.mdwn | 65 + ..._305e4e7c6b75db29212b758e8504d8c9._comment | 10 + ..._2262eaa830306d3dc75999bc0433b6a8._comment | 8 + doc/tuning.mdwn | 47 + ..._f8af8e9b696d32d238ebd56a3b8058c4._comment | 17 + ..._a0091dbb39b79dfe101d05f9a5db216f._comment | 12 + ..._1c576f9a5e0a0b5d7d8edf9d40462874._comment | 10 + ..._5b782975263480a405c5e8dcfe058007._comment | 17 + ..._0143b798e75ad25c5917794a49a879fb._comment | 13 + doc/upgrades.mdwn | 179 + doc/upgrades/SHA_size.mdwn | 20 + ..._20f9b7b75786075de666b2146dc13a60._comment | 12 + doc/upgrades/gcrypt.mdwn | 25 + ..._606c1527735996ae671f78948e4ad84b._comment | 8 + doc/upgrades/insecure_embedded_creds.mdwn | 42 + doc/use_case/Alice.mdwn | 24 + doc/use_case/Bob.mdwn | 25 + doc/users.mdwn | 9 + doc/users/Ilya__95__Shlyakhter.mdwn | 1 + doc/users/anarcat.mdwn | 55 + doc/users/andrew.mdwn | 4 + doc/users/ben.mdwn | 1 + doc/users/chris.mdwn | 1 + doc/users/chrysn.mdwn | 11 + doc/users/clacke.mdwn | 3 + doc/users/claes.wallin.mdwn | 1 + doc/users/dandi.mdwn | 1 + doc/users/datalad.mdwn | 1 + doc/users/dave.mdwn | 1 + doc/users/dckc.mdwn | 1 + doc/users/falsifian.mdwn | 1 + doc/users/fmarier.mdwn | 6 + doc/users/frederik.mdwn | 1 + doc/users/gebi.mdwn | 1 + doc/users/greg.mdwn | 3 + doc/users/james.mdwn | 1 + doc/users/jgoerzen.mdwn | 1 + doc/users/jkniiv.mdwn | 10 + doc/users/joey.mdwn | 2 + ..._0ccf207fd817f9b5555aad030bd4957f._comment | 17 + ..._7e0b8d499d2bededf01591a7c5686f8f._comment | 9 + doc/users/kolam.mdwn | 1 + doc/users/mih.mdwn | 23 + doc/users/nobodyinperson.mdwn | 13 + doc/users/parhuzamos.mdwn | 8 + doc/users/petersjt014.mdwn | 1 + doc/users/ptilopteri.mdwn | 1 + doc/users/sameerds.mdwn | 3 + doc/users/thk.mdwn | 26 + doc/users/timothe.mdwn | 5 + doc/users/tobiastheviking.mdwn | 13 + doc/users/unqueued.mdwn | 7 + doc/users/wzhd.mdwn | 1 + doc/users/yarikoptic.mdwn | 15 + doc/users/yoh.mdwn | 23 + doc/videos.mdwn | 8 + doc/videos/FOSDEM2012.mdwn | 7 + doc/videos/LCA2013.mdwn | 8 + doc/videos/git-annex_assistant_archiving.mdwn | 5 + .../git-annex_assistant_introduction.mdwn | 5 + ..._f42ad4183c2c28319d3705a82fceb82f._comment | 15 + ..._b62f4eeeac1138570f7cb8c98d41c2cb._comment | 12 + doc/videos/git-annex_assistant_lan.mdwn | 6 + ..._df8c8b6d9d63fbf5462b225edbb23c82._comment | 8 + ..._d4e3122da9c9e27fbe872e09fcde762b._comment | 10 + ..._d43ee0a335c2f010b437cf28437455c2._comment | 8 + ..._c710e27db41311b157d8caaafc32dc7e._comment | 8 + doc/videos/git-annex_assistant_sync_demo.mdwn | 8 + doc/videos/git-annex_views_demo.mdwn | 11 + doc/videos/git-annex_watch_demo.mdwn | 7 + doc/videos/git-annex_weppapp_demo.mdwn | 8 + doc/videos/tuebix.mdwn | 11 + doc/walkthrough.mdwn | 32 + doc/walkthrough/adding_a_remote.mdwn | 22 + ..._0a59355bd33a796aec97173607e6adc9._comment | 8 + ..._f8cd79ef1593a8181a7f1086a87713e8._comment | 9 + ..._60691af4400521b5a8c8d75efe3b44cb._comment | 9 + ..._6f7cf5c330272c96b3abeb6612075c9d._comment | 10 + ..._bcbe480aa710ce693ee03d86884f1820._comment | 10 + ..._15ea28114e69dddac82fddaf009079ca._comment | 9 + ..._caea7e4e9ec904617c6ec1a33368090f._comment | 16 + doc/walkthrough/adding_files.mdwn | 11 + .../automatically_managing_content.mdwn | 45 + doc/walkthrough/backups.mdwn | 27 + ..._d0244791d2abbf29553546a6a6568a0f._comment | 10 + doc/walkthrough/creating_a_repository.mdwn | 6 + .../fsck__58___verifying_your_data.mdwn | 36 + .../fsck__58___when_things_go_wrong.mdwn | 13 + doc/walkthrough/getting_file_content.mdwn | 12 + doc/walkthrough/modifying_annexed_files.mdwn | 31 + ..._624b4a0b521b553d68ab6049f7dbaf8c._comment | 14 + ..._b000622304535d32b69db17d51156b21._comment | 10 + doc/walkthrough/more.mdwn | 3 + ...ing_file_content_between_repositories.mdwn | 13 + ..._4c30ade91fc7113a95960aa3bd1d5427._comment | 19 + ..._7d90e1e150e7524ba31687108fcc38d6._comment | 10 + ..._558d80384434207b9cfc033763863de3._comment | 12 + ..._a2f343eceed9e9fba1670f21e0fc6af4._comment | 8 + ...___When_git-annex_seems_to_skip_files.mdwn | 27 + doc/walkthrough/removing_files.mdwn | 17 + ..._cb65e7c510b75be1c51f655b058667c6._comment | 8 + ..._64709ea4558915edd5c8ca4486965b07._comment | 8 + ..._91e995867a731325dfdf3331f69a238c._comment | 8 + ..._9b575f7f2b67b36599890dd5455dcf47._comment | 9 + ...ving_files__58___When_things_go_wrong.mdwn | 24 + doc/walkthrough/renaming_files.mdwn | 13 + ..._c05f70079c265d23e882f92aaa4d28f8._comment | 31 + ..._fe83c600e080131b3109fe616940a25e._comment | 9 + ..._6b579a4f2990a28b33a8170ebd39da5c._comment | 15 + ..._1cf4cb6be73223755cb611ec097d1498._comment | 12 + ..._bc3e37868b276c52a51586641cdb92ae._comment | 13 + ..._2ae2cc3dba5db4d4354a5b49c490272e._comment | 32 + doc/walkthrough/syncing.mdwn | 32 + ...ring_files__58___When_things_go_wrong.mdwn | 17 + doc/walkthrough/unused_data.mdwn | 35 + ..._684b7b652d3a8ec04f32129c5528f1ab._comment | 22 + ..._e2ccd9a209c7a104004e998135d4b675._comment | 13 + ..._5f973eb7c265015fcd400b6b0bbdf235._comment | 10 + ..._2110ed6316b6a0df4ef3e1c8bc97ab99._comment | 11 + ..._46acb9fbbd5ef19f65115723888f3eb6._comment | 14 + doc/walkthrough/using_bup.mdwn | 37 + doc/walkthrough/using_ddar.mdwn | 32 + doc/walkthrough/using_special_remotes.mdwn | 53 + doc/walkthrough/using_ssh_remotes.mdwn | 36 + ..._98e97c4d7fbbcd449eddf683967a71d6._comment | 8 + ..._f2775a151ed50caba27057bd9c38bae2._comment | 13 + ..._a8bc6110128431ca2a8624ddc75ea364._comment | 10 + ..._365db5820d96d5daa62c19fd76fcdf1e._comment | 13 + ..._451fd0c6a25ee61ef137e8e5be0c286b._comment | 16 + ..._b2f15a46620385da26d5fe8f11ebfc1a._comment | 15 + ..._433ccc87fbb0a13e32d59d77f0b4e56c._comment | 8 + ..._a9805c7965da0b88a1c9f7f207c450a1._comment | 18 + ..._9d5c12c056892b706cf100ea01866685._comment | 12 + ..._725e7dbb2d0a74a035127cb01ee0442c._comment | 16 + ..._8448e55026d2c2b50d8da41707686bea._comment | 16 + ..._61833299a9878f23ac57598fa6da8839._comment | 23 + doc/walkthrough/using_tags_and_branches.mdwn | 14 + doc/workflow.mdwn | 102 + ..._e4b2199944c3a248562bddf3cf9e2829._comment | 17 + ..._67edac29c0e7b5a768511a0fd0878947._comment | 10 + git-annex.cabal | 1101 ++ git-annex.hs | 56 + git-union-merge.hs | 50 + stack-lts-18.13.yaml | 28 + stack.yaml | 17 + standalone/licences.gz | Bin 0 -> 58148 bytes standalone/linux/skel/README | 20 + standalone/linux/skel/git | 24 + standalone/linux/skel/git-annex | 24 + standalone/linux/skel/git-annex-shell | 24 + standalone/linux/skel/git-annex-webapp | 24 + standalone/linux/skel/git-receive-pack | 24 + standalone/linux/skel/git-shell | 24 + standalone/linux/skel/git-upload-pack | 24 + standalone/linux/skel/runshell | 274 + standalone/linux/stack-i386ancient.yaml | 44 + standalone/osx/Info.plist.template | 41 + .../osx/git-annex.app/Contents/MacOS/README | 9 + .../osx/git-annex.app/Contents/MacOS/git | 31 + .../git-annex.app/Contents/MacOS/git-annex | 31 + .../Contents/MacOS/git-annex-shell | 31 + .../Contents/MacOS/git-annex-webapp | 32 + .../Contents/MacOS/git-receive-pack | 31 + .../git-annex.app/Contents/MacOS/git-shell | 31 + .../Contents/MacOS/git-upload-pack | 31 + .../osx/git-annex.app/Contents/MacOS/runshell | 104 + .../Contents/Resources/git-annex.icns | Bin 0 -> 77548 bytes standalone/rpm/git-annex-standalone.spec | 44 + .../rpm/rpmbuild-from-standalone-tarball | 38 + standalone/trustedkeys.gpg | Bin 0 -> 4979 bytes static/activityicon.gif | Bin 0 -> 529 bytes static/css/bootstrap-theme.css | 347 + static/css/bootstrap.css | 5785 +++++++++++ static/favicon.ico | Bin 0 -> 2550 bytes static/fonts/glyphicons-halflings-regular.eot | Bin 0 -> 20335 bytes static/fonts/glyphicons-halflings-regular.svg | 229 + static/fonts/glyphicons-halflings-regular.ttf | Bin 0 -> 41280 bytes .../fonts/glyphicons-halflings-regular.woff | Bin 0 -> 23320 bytes static/js/bootstrap.js | 1951 ++++ static/js/jquery.full.js | 9111 +++++++++++++++++ static/js/jquery.ui.core.js | 320 + static/js/jquery.ui.mouse.js | 169 + static/js/jquery.ui.sortable.js | 1289 +++ static/js/jquery.ui.widget.js | 521 + static/js/longpolling.js | 46 + static/syncicon.gif | Bin 0 -> 847 bytes templates/README | 7 + templates/actionbutton.hamlet | 3 + templates/bootstrap.hamlet | 14 + templates/configurators/adddrive.hamlet | 36 + .../configurators/adddrive/combine.hamlet | 22 + .../configurators/adddrive/encrypt.hamlet | 29 + .../configurators/adddrive/setupmodal.hamlet | 9 + templates/configurators/addglacier.hamlet | 38 + templates/configurators/addia.hamlet | 36 + templates/configurators/addrepository.hamlet | 19 + .../addrepository/archive.hamlet | 13 + .../configurators/addrepository/cloud.hamlet | 17 + .../addrepository/connection.hamlet | 3 + .../configurators/addrepository/misc.hamlet | 26 + .../configurators/addrepository/ssh.hamlet | 7 + .../addrepository/wormholepairing.hamlet | 13 + templates/configurators/adds3.hamlet | 33 + .../delete/currentrepository.hamlet | 36 + .../configurators/delete/finished.hamlet | 15 + templates/configurators/delete/start.hamlet | 13 + .../configurators/edit/nonannexremote.hamlet | 19 + .../configurators/edit/repository.hamlet | 40 + .../configurators/edit/webrepository.hamlet | 8 + templates/configurators/enableaws.hamlet | 34 + .../configurators/enabledirectory.hamlet | 11 + templates/configurators/enableia.hamlet | 26 + templates/configurators/enablewebdav.hamlet | 26 + templates/configurators/fsck.cassius | 4 + templates/configurators/fsck.hamlet | 32 + templates/configurators/fsck/form.hamlet | 2 + .../configurators/fsck/formcontent.hamlet | 21 + .../configurators/fsck/preferencesform.hamlet | 7 + templates/configurators/fsck/status.hamlet | 5 + templates/configurators/genkeymodal.hamlet | 15 + templates/configurators/main.hamlet | 29 + templates/configurators/needconnection.hamlet | 14 + templates/configurators/needgcrypt.hamlet | 11 + templates/configurators/needglaciercli.hamlet | 11 + .../configurators/needmagicwormhole.hamlet | 11 + templates/configurators/needtor.hamlet | 11 + templates/configurators/newrepository.hamlet | 14 + .../newrepository/combine.hamlet | 20 + .../configurators/newrepository/first.hamlet | 21 + .../configurators/newrepository/form.hamlet | 13 + .../configurators/pairing/disabled.hamlet | 6 + .../pairing/local/inprogress.hamlet | 19 + .../configurators/pairing/local/prompt.hamlet | 53 + .../pairing/wormhole/prompt.hamlet | 59 + .../pairing/wormhole/start.hamlet | 35 + templates/configurators/preferences.hamlet | 16 + templates/configurators/rsync.net/add.hamlet | 43 + .../configurators/rsync.net/encrypt.hamlet | 49 + templates/configurators/ssh/add.hamlet | 26 + templates/configurators/ssh/combine.hamlet | 22 + templates/configurators/ssh/confirm.hamlet | 74 + templates/configurators/ssh/enable.hamlet | 28 + templates/configurators/ssh/error.hamlet | 13 + .../configurators/ssh/expiredpassword.hamlet | 12 + templates/configurators/ssh/setupmodal.hamlet | 13 + templates/configurators/ssh/testmodal.hamlet | 9 + templates/configurators/unused.hamlet | 42 + templates/configurators/unused/form.hamlet | 6 + templates/control/log.hamlet | 7 + templates/control/notrunning.hamlet | 13 + templates/control/notrunning.julius | 3 + templates/control/repairrepository.hamlet | 29 + .../control/repairrepository/done.hamlet | 14 + templates/control/repositoryswitcher.hamlet | 15 + templates/control/shutdown.hamlet | 10 + templates/controlmenu.hamlet | 22 + templates/dashboard/main.hamlet | 11 + templates/dashboard/metarefresh.hamlet | 2 + templates/dashboard/transfers.cassius | 8 + templates/dashboard/transfers.hamlet | 40 + templates/documentation/about.hamlet | 35 + templates/documentation/license.hamlet | 2 + templates/documentation/repogroup.hamlet | 61 + templates/error.cassius | 3 + templates/error.hamlet | 31 + templates/notifications/longpolling.julius | 11 + templates/page.cassius | 34 + templates/page.hamlet | 29 + templates/page.julius | 22 + templates/repolist.hamlet | 84 + templates/repolist.julius | 28 + templates/sidebar/alert.hamlet | 27 + templates/sidebar/main.hamlet | 3 + 14843 files changed, 450445 insertions(+) create mode 100644 .appveyor.yml create mode 100644 .codespellrc create mode 100644 .ghci create mode 100644 .gitattributes create mode 100644 .gitignore create mode 100644 .mailmap create mode 100644 Annex.hs create mode 100644 Annex/Action.hs create mode 100644 Annex/AdjustedBranch.hs create mode 100644 Annex/AdjustedBranch/Merge.hs create mode 100644 Annex/AdjustedBranch/Name.hs create mode 100644 Annex/AutoMerge.hs create mode 100644 Annex/BloomFilter.hs create mode 100644 Annex/Branch.hs create mode 100644 Annex/Branch/Transitions.hs create mode 100644 Annex/BranchState.hs create mode 100644 Annex/CatFile.hs create mode 100644 Annex/ChangedRefs.hs create mode 100644 Annex/CheckAttr.hs create mode 100644 Annex/CheckIgnore.hs create mode 100644 Annex/Common.hs create mode 100644 Annex/Concurrent.hs create mode 100644 Annex/Concurrent/Utility.hs create mode 100644 Annex/Content.hs create mode 100644 Annex/Content/LowLevel.hs create mode 100644 Annex/Content/PointerFile.hs create mode 100644 Annex/Content/Presence.hs create mode 100644 Annex/Content/Presence/LowLevel.hs create mode 100644 Annex/CopyFile.hs create mode 100644 Annex/CurrentBranch.hs create mode 100644 Annex/Debug.hs create mode 100644 Annex/Debug/Utility.hs create mode 100644 Annex/Difference.hs create mode 100644 Annex/DirHashes.hs create mode 100644 Annex/Drop.hs create mode 100644 Annex/Environment.hs create mode 100644 Annex/Export.hs create mode 100644 Annex/ExternalAddonProcess.hs create mode 100644 Annex/FileMatcher.hs create mode 100644 Annex/Fixup.hs create mode 100644 Annex/GitOverlay.hs create mode 100644 Annex/HashObject.hs create mode 100644 Annex/Hook.hs create mode 100644 Annex/Import.hs create mode 100644 Annex/Ingest.hs create mode 100644 Annex/Init.hs create mode 100644 Annex/InodeSentinal.hs create mode 100644 Annex/Journal.hs create mode 100644 Annex/Link.hs create mode 100644 Annex/Locations.hs create mode 100644 Annex/LockFile.hs create mode 100644 Annex/LockPool.hs create mode 100644 Annex/LockPool/PosixOrPid.hs create mode 100644 Annex/Magic.hs create mode 100644 Annex/MetaData.hs create mode 100644 Annex/MetaData/StandardFields.hs create mode 100644 Annex/Multicast.hs create mode 100644 Annex/Notification.hs create mode 100644 Annex/NumCopies.hs create mode 100644 Annex/Path.hs create mode 100644 Annex/Perms.hs create mode 100644 Annex/PidLock.hs create mode 100644 Annex/Queue.hs create mode 100644 Annex/RemoteTrackingBranch.hs create mode 100644 Annex/ReplaceFile.hs create mode 100644 Annex/SpecialRemote.hs create mode 100644 Annex/SpecialRemote/Config.hs create mode 100644 Annex/Ssh.hs create mode 100644 Annex/StallDetection.hs create mode 100644 Annex/TaggedPush.hs create mode 100644 Annex/Tmp.hs create mode 100644 Annex/Transfer.hs create mode 100644 Annex/TransferrerPool.hs create mode 100644 Annex/UUID.hs create mode 100644 Annex/UntrustedFilePath.hs create mode 100644 Annex/UpdateInstead.hs create mode 100644 Annex/Url.hs create mode 100644 Annex/VariantFile.hs create mode 100644 Annex/VectorClock.hs create mode 100644 Annex/VectorClock/Utility.hs create mode 100644 Annex/Verify.hs create mode 100644 Annex/Version.hs create mode 100644 Annex/View.hs create mode 100644 Annex/View/ViewedFile.hs create mode 100644 Annex/Wanted.hs create mode 100644 Annex/WorkTree.hs create mode 100644 Annex/WorkerPool.hs create mode 100644 Annex/YoutubeDl.hs create mode 100644 Assistant.hs create mode 100644 Assistant/Alert.hs create mode 100644 Assistant/Alert/Utility.hs create mode 100644 Assistant/BranchChange.hs create mode 100644 Assistant/Changes.hs create mode 100644 Assistant/Commits.hs create mode 100644 Assistant/Common.hs create mode 100644 Assistant/CredPairCache.hs create mode 100644 Assistant/DaemonStatus.hs create mode 100644 Assistant/DeleteRemote.hs create mode 100644 Assistant/Drop.hs create mode 100644 Assistant/Fsck.hs create mode 100644 Assistant/Gpg.hs create mode 100644 Assistant/Install.hs create mode 100644 Assistant/Install/AutoStart.hs create mode 100644 Assistant/Install/Menu.hs create mode 100644 Assistant/MakeRemote.hs create mode 100644 Assistant/MakeRepo.hs create mode 100644 Assistant/Monad.hs create mode 100644 Assistant/NamedThread.hs create mode 100644 Assistant/Pairing.hs create mode 100644 Assistant/Pairing/MakeRemote.hs create mode 100644 Assistant/Pairing/Network.hs create mode 100644 Assistant/Pushes.hs create mode 100644 Assistant/RemoteControl.hs create mode 100644 Assistant/Repair.hs create mode 100644 Assistant/RepoProblem.hs create mode 100644 Assistant/Restart.hs create mode 100644 Assistant/ScanRemotes.hs create mode 100644 Assistant/Ssh.hs create mode 100644 Assistant/Sync.hs create mode 100644 Assistant/Threads/Committer.hs create mode 100644 Assistant/Threads/ConfigMonitor.hs create mode 100644 Assistant/Threads/Cronner.hs create mode 100644 Assistant/Threads/DaemonStatus.hs create mode 100644 Assistant/Threads/Exporter.hs create mode 100644 Assistant/Threads/Glacier.hs create mode 100644 Assistant/Threads/Merger.hs create mode 100644 Assistant/Threads/MountWatcher.hs create mode 100644 Assistant/Threads/NetWatcher.hs create mode 100644 Assistant/Threads/PairListener.hs create mode 100644 Assistant/Threads/ProblemFixer.hs create mode 100644 Assistant/Threads/Pusher.hs create mode 100644 Assistant/Threads/RemoteControl.hs create mode 100644 Assistant/Threads/SanityChecker.hs create mode 100644 Assistant/Threads/TransferPoller.hs create mode 100644 Assistant/Threads/TransferScanner.hs create mode 100644 Assistant/Threads/TransferWatcher.hs create mode 100644 Assistant/Threads/Transferrer.hs create mode 100644 Assistant/Threads/UpgradeWatcher.hs create mode 100644 Assistant/Threads/Upgrader.hs create mode 100644 Assistant/Threads/Watcher.hs create mode 100644 Assistant/Threads/WebApp.hs create mode 100644 Assistant/TransferQueue.hs create mode 100644 Assistant/TransferSlots.hs create mode 100644 Assistant/Types/Alert.hs create mode 100644 Assistant/Types/BranchChange.hs create mode 100644 Assistant/Types/Changes.hs create mode 100644 Assistant/Types/Commits.hs create mode 100644 Assistant/Types/CredPairCache.hs create mode 100644 Assistant/Types/DaemonStatus.hs create mode 100644 Assistant/Types/NamedThread.hs create mode 100644 Assistant/Types/Pushes.hs create mode 100644 Assistant/Types/RemoteControl.hs create mode 100644 Assistant/Types/RepoProblem.hs create mode 100644 Assistant/Types/ScanRemotes.hs create mode 100644 Assistant/Types/ThreadName.hs create mode 100644 Assistant/Types/ThreadedMonad.hs create mode 100644 Assistant/Types/TransferQueue.hs create mode 100644 Assistant/Types/TransferSlots.hs create mode 100644 Assistant/Types/UrlRenderer.hs create mode 100644 Assistant/Unused.hs create mode 100644 Assistant/Upgrade.hs create mode 100644 Assistant/WebApp.hs create mode 100644 Assistant/WebApp/Common.hs create mode 100644 Assistant/WebApp/Configurators.hs create mode 100644 Assistant/WebApp/Configurators/AWS.hs create mode 100644 Assistant/WebApp/Configurators/Delete.hs create mode 100644 Assistant/WebApp/Configurators/Edit.hs create mode 100644 Assistant/WebApp/Configurators/Fsck.hs create mode 100644 Assistant/WebApp/Configurators/IA.hs create mode 100644 Assistant/WebApp/Configurators/Local.hs create mode 100644 Assistant/WebApp/Configurators/Pairing.hs create mode 100644 Assistant/WebApp/Configurators/Preferences.hs create mode 100644 Assistant/WebApp/Configurators/Ssh.hs create mode 100644 Assistant/WebApp/Configurators/Unused.hs create mode 100644 Assistant/WebApp/Configurators/Upgrade.hs create mode 100644 Assistant/WebApp/Configurators/WebDAV.hs create mode 100644 Assistant/WebApp/Control.hs create mode 100644 Assistant/WebApp/DashBoard.hs create mode 100644 Assistant/WebApp/Documentation.hs create mode 100644 Assistant/WebApp/Form.hs create mode 100644 Assistant/WebApp/Gpg.hs create mode 100644 Assistant/WebApp/MakeRemote.hs create mode 100644 Assistant/WebApp/Notifications.hs create mode 100644 Assistant/WebApp/OtherRepos.hs create mode 100644 Assistant/WebApp/Page.hs create mode 100644 Assistant/WebApp/Pairing.hs create mode 100644 Assistant/WebApp/Repair.hs create mode 100644 Assistant/WebApp/RepoId.hs create mode 100644 Assistant/WebApp/RepoList.hs create mode 100644 Assistant/WebApp/SideBar.hs create mode 100644 Assistant/WebApp/Types.hs create mode 100644 Assistant/WebApp/routes create mode 100644 Author.hs create mode 100644 Backend.hs create mode 100644 Backend/External.hs create mode 100644 Backend/Hash.hs create mode 100644 Backend/URL.hs create mode 100644 Backend/Utilities.hs create mode 100644 Backend/VURL.hs create mode 100644 Backend/VURL/Utilities.hs create mode 100644 Backend/Variety.hs create mode 100644 Backend/WORM.hs create mode 100644 Benchmark.hs create mode 100644 Build/BuildVersion.hs create mode 100644 Build/BundledPrograms.hs create mode 100644 Build/Configure.hs create mode 100644 Build/DesktopFile.hs create mode 100644 Build/DistributionUpdate.hs create mode 100644 Build/InstallDesktopFile.hs create mode 100644 Build/LinuxMkLibs.hs create mode 100644 Build/MakeMans.hs create mode 100644 Build/Mans.hs create mode 100644 Build/NullSoftInstaller.hs create mode 100644 Build/OSXMkLibs.hs create mode 100644 Build/Standalone.hs create mode 100644 Build/TestConfig.hs create mode 100644 Build/Version.hs create mode 100755 Build/collect-ghc-options.sh create mode 100755 Build/mdwn2man create mode 100644 BuildFlags.hs create mode 100644 BuildInfo.hs create mode 100644 CHANGELOG create mode 100644 COPYRIGHT create mode 100644 CmdLine.hs create mode 100644 CmdLine/Action.hs create mode 100644 CmdLine/AnnexSetter.hs create mode 100644 CmdLine/Batch.hs create mode 100644 CmdLine/GitAnnex.hs create mode 100644 CmdLine/GitAnnex/Options.hs create mode 100644 CmdLine/GitAnnexShell.hs create mode 100644 CmdLine/GitAnnexShell/Checks.hs create mode 100644 CmdLine/GitAnnexShell/Fields.hs create mode 100644 CmdLine/GitRemoteTorAnnex.hs create mode 100644 CmdLine/Option.hs create mode 100644 CmdLine/Seek.hs create mode 100644 CmdLine/Usage.hs create mode 100644 Command.hs create mode 100644 Command/Add.hs create mode 100644 Command/AddUnused.hs create mode 100644 Command/AddUrl.hs create mode 100644 Command/Adjust.hs create mode 100644 Command/Assist.hs create mode 100644 Command/Assistant.hs create mode 100644 Command/Benchmark.hs create mode 100644 Command/CalcKey.hs create mode 100644 Command/CheckPresentKey.hs create mode 100644 Command/Config.hs create mode 100644 Command/ConfigList.hs create mode 100644 Command/ConfigRemote.hs create mode 100644 Command/ContentLocation.hs create mode 100644 Command/Copy.hs create mode 100644 Command/Dead.hs create mode 100644 Command/Describe.hs create mode 100644 Command/DiffDriver.hs create mode 100644 Command/Direct.hs create mode 100644 Command/Drop.hs create mode 100644 Command/DropKey.hs create mode 100644 Command/DropUnused.hs create mode 100644 Command/EnableRemote.hs create mode 100644 Command/EnableTor.hs create mode 100644 Command/ExamineKey.hs create mode 100644 Command/Expire.hs create mode 100644 Command/Export.hs create mode 100644 Command/FilterBranch.hs create mode 100644 Command/FilterProcess.hs create mode 100644 Command/Find.hs create mode 100644 Command/FindKeys.hs create mode 100644 Command/FindRef.hs create mode 100644 Command/Fix.hs create mode 100644 Command/Forget.hs create mode 100644 Command/FromKey.hs create mode 100644 Command/Fsck.hs create mode 100644 Command/FuzzTest.hs create mode 100644 Command/GCryptSetup.hs create mode 100644 Command/Get.hs create mode 100644 Command/Group.hs create mode 100644 Command/GroupWanted.hs create mode 100644 Command/Help.hs create mode 100644 Command/Import.hs create mode 100644 Command/ImportFeed.hs create mode 100644 Command/InAnnex.hs create mode 100644 Command/Indirect.hs create mode 100644 Command/Info.hs create mode 100644 Command/Init.hs create mode 100644 Command/InitRemote.hs create mode 100644 Command/Inprogress.hs create mode 100644 Command/List.hs create mode 100644 Command/Lock.hs create mode 100644 Command/Log.hs create mode 100644 Command/LookupKey.hs create mode 100644 Command/Map.hs create mode 100644 Command/MatchExpression.hs create mode 100644 Command/Merge.hs create mode 100644 Command/MetaData.hs create mode 100644 Command/Migrate.hs create mode 100644 Command/MinCopies.hs create mode 100644 Command/Mirror.hs create mode 100644 Command/Move.hs create mode 100644 Command/Multicast.hs create mode 100644 Command/NotifyChanges.hs create mode 100644 Command/NumCopies.hs create mode 100644 Command/OldKeys.hs create mode 100644 Command/P2P.hs create mode 100644 Command/P2PStdIO.hs create mode 100644 Command/PostReceive.hs create mode 100644 Command/PreCommit.hs create mode 100644 Command/Proxy.hs create mode 100644 Command/Pull.hs create mode 100644 Command/Push.hs create mode 100644 Command/ReKey.hs create mode 100644 Command/ReadPresentKey.hs create mode 100644 Command/RecvKey.hs create mode 100644 Command/RegisterUrl.hs create mode 100644 Command/Reinit.hs create mode 100644 Command/Reinject.hs create mode 100644 Command/RemoteDaemon.hs create mode 100644 Command/RenameRemote.hs create mode 100644 Command/Repair.hs create mode 100644 Command/Required.hs create mode 100644 Command/ReregisterUrl.hs create mode 100644 Command/ResolveMerge.hs create mode 100644 Command/Restage.hs create mode 100644 Command/RmUrl.hs create mode 100644 Command/Satisfy.hs create mode 100644 Command/Schedule.hs create mode 100644 Command/Semitrust.hs create mode 100644 Command/SendKey.hs create mode 100644 Command/SetKey.hs create mode 100644 Command/SetPresentKey.hs create mode 100644 Command/Smudge.hs create mode 100644 Command/Status.hs create mode 100644 Command/Sync.hs create mode 100644 Command/Test.hs create mode 100644 Command/TestRemote.hs create mode 100644 Command/TransferKey.hs create mode 100644 Command/TransferKeys.hs create mode 100644 Command/Transferrer.hs create mode 100644 Command/Trust.hs create mode 100644 Command/Unannex.hs create mode 100644 Command/Undo.hs create mode 100644 Command/Ungroup.hs create mode 100644 Command/Uninit.hs create mode 100644 Command/Unlock.hs create mode 100644 Command/UnregisterUrl.hs create mode 100644 Command/Untrust.hs create mode 100644 Command/Unused.hs create mode 100644 Command/Upgrade.hs create mode 100644 Command/VAdd.hs create mode 100644 Command/VCycle.hs create mode 100644 Command/VFilter.hs create mode 100644 Command/VPop.hs create mode 100644 Command/Version.hs create mode 100644 Command/Vicfg.hs create mode 100644 Command/View.hs create mode 100644 Command/Wanted.hs create mode 100644 Command/Watch.hs create mode 100644 Command/WebApp.hs create mode 100644 Command/WhereUsed.hs create mode 100644 Command/Whereis.hs create mode 100644 Common.hs create mode 100644 Config.hs create mode 100644 Config/Cost.hs create mode 100644 Config/DynamicConfig.hs create mode 100644 Config/Files.hs create mode 100644 Config/Files/AutoStart.hs create mode 100644 Config/GitConfig.hs create mode 100644 Config/Smudge.hs create mode 100644 Creds.hs create mode 100644 Crypto.hs create mode 100644 Database/Benchmark.hs create mode 100644 Database/ContentIdentifier.hs create mode 100644 Database/Export.hs create mode 100644 Database/Fsck.hs create mode 100644 Database/Handle.hs create mode 100644 Database/ImportFeed.hs create mode 100644 Database/Init.hs create mode 100644 Database/Keys.hs create mode 100644 Database/Keys/Handle.hs create mode 100644 Database/Keys/SQL.hs create mode 100644 Database/Keys/Tables.hs create mode 100644 Database/Queue.hs create mode 100644 Database/RawFilePath.hs create mode 100644 Database/Types.hs create mode 100644 Database/Utility.hs create mode 100644 Git.hs create mode 100644 Git/AutoCorrect.hs create mode 100644 Git/Branch.hs create mode 100644 Git/BuildVersion.hs create mode 100644 Git/CatFile.hs create mode 100644 Git/CheckAttr.hs create mode 100644 Git/CheckIgnore.hs create mode 100644 Git/Command.hs create mode 100644 Git/Command/Batch.hs create mode 100644 Git/Config.hs create mode 100644 Git/ConfigTypes.hs create mode 100644 Git/Construct.hs create mode 100644 Git/Credential.hs create mode 100644 Git/CurrentRepo.hs create mode 100644 Git/DiffTree.hs create mode 100644 Git/DiffTreeItem.hs create mode 100644 Git/Env.hs create mode 100644 Git/FileMode.hs create mode 100644 Git/FilePath.hs create mode 100644 Git/FilterProcess.hs create mode 100644 Git/Fsck.hs create mode 100644 Git/GCrypt.hs create mode 100644 Git/HashObject.hs create mode 100644 Git/History.hs create mode 100644 Git/Hook.hs create mode 100644 Git/Index.hs create mode 100644 Git/LockFile.hs create mode 100644 Git/Log.hs create mode 100644 Git/LsFiles.hs create mode 100644 Git/LsTree.hs create mode 100644 Git/Merge.hs create mode 100644 Git/Objects.hs create mode 100644 Git/PktLine.hs create mode 100644 Git/Queue.hs create mode 100644 Git/Quote.hs create mode 100644 Git/Ref.hs create mode 100644 Git/RefLog.hs create mode 100644 Git/Remote.hs create mode 100644 Git/Remote/Remove.hs create mode 100644 Git/Repair.hs create mode 100644 Git/Sha.hs create mode 100644 Git/Ssh.hs create mode 100644 Git/Status.hs create mode 100644 Git/Tree.hs create mode 100644 Git/Types.hs create mode 100644 Git/UnionMerge.hs create mode 100644 Git/UpdateIndex.hs create mode 100644 Git/Url.hs create mode 100644 Git/Version.hs create mode 100644 Key.hs create mode 100644 Limit.hs create mode 100644 Limit/Wanted.hs create mode 100644 Logs.hs create mode 100644 Logs/Activity.hs create mode 100644 Logs/AdjustedBranchUpdate.hs create mode 100644 Logs/Chunk.hs create mode 100644 Logs/Chunk/Pure.hs create mode 100644 Logs/Config.hs create mode 100644 Logs/ContentIdentifier.hs create mode 100644 Logs/ContentIdentifier/Pure.hs create mode 100644 Logs/Difference.hs create mode 100644 Logs/Difference/Pure.hs create mode 100644 Logs/EquivilantKeys.hs create mode 100644 Logs/Export.hs create mode 100644 Logs/Export/Pure.hs create mode 100644 Logs/File.hs create mode 100644 Logs/FsckResults.hs create mode 100644 Logs/Group.hs create mode 100644 Logs/Import.hs create mode 100644 Logs/Line.hs create mode 100644 Logs/Location.hs create mode 100644 Logs/MapLog.hs create mode 100644 Logs/MetaData.hs create mode 100644 Logs/MetaData/Pure.hs create mode 100644 Logs/Migrate.hs create mode 100644 Logs/Multicast.hs create mode 100644 Logs/NumCopies.hs create mode 100644 Logs/PreferredContent.hs create mode 100644 Logs/PreferredContent/Raw.hs create mode 100644 Logs/Presence.hs create mode 100644 Logs/Presence/Pure.hs create mode 100644 Logs/Remote.hs create mode 100644 Logs/Remote/Pure.hs create mode 100644 Logs/RemoteState.hs create mode 100644 Logs/Restage.hs create mode 100644 Logs/Schedule.hs create mode 100644 Logs/SingleValue.hs create mode 100644 Logs/SingleValue/Pure.hs create mode 100644 Logs/Smudge.hs create mode 100644 Logs/Transfer.hs create mode 100644 Logs/Transitions.hs create mode 100644 Logs/Trust.hs create mode 100644 Logs/Trust/Basic.hs create mode 100644 Logs/Trust/Pure.hs create mode 100644 Logs/UUID.hs create mode 100644 Logs/UUIDBased.hs create mode 100644 Logs/Unused.hs create mode 100644 Logs/Upgrade.hs create mode 100644 Logs/View.hs create mode 100644 Logs/Web.hs create mode 100644 Makefile create mode 100644 Messages.hs create mode 100644 Messages/Concurrent.hs create mode 100644 Messages/Internal.hs create mode 100644 Messages/JSON.hs create mode 100644 Messages/Progress.hs create mode 100644 Messages/Serialized.hs create mode 100644 NEWS create mode 100644 P2P/Address.hs create mode 100644 P2P/Annex.hs create mode 100644 P2P/Auth.hs create mode 100644 P2P/IO.hs create mode 100644 P2P/Protocol.hs create mode 100644 README create mode 100644 Remote.hs create mode 100644 Remote/Adb.hs create mode 100644 Remote/BitTorrent.hs create mode 100644 Remote/Borg.hs create mode 100644 Remote/Bup.hs create mode 100644 Remote/Ddar.hs create mode 100644 Remote/Directory.hs create mode 100644 Remote/Directory/LegacyChunked.hs create mode 100644 Remote/External.hs create mode 100644 Remote/External/AsyncExtension.hs create mode 100644 Remote/External/Types.hs create mode 100644 Remote/GCrypt.hs create mode 100644 Remote/Git.hs create mode 100644 Remote/GitLFS.hs create mode 100644 Remote/Glacier.hs create mode 100644 Remote/Helper/AWS.hs create mode 100644 Remote/Helper/Chunked.hs create mode 100644 Remote/Helper/Chunked/Legacy.hs create mode 100644 Remote/Helper/Encryptable.hs create mode 100644 Remote/Helper/ExportImport.hs create mode 100644 Remote/Helper/Git.hs create mode 100644 Remote/Helper/Hooks.hs create mode 100644 Remote/Helper/Http.hs create mode 100644 Remote/Helper/Messages.hs create mode 100644 Remote/Helper/P2P.hs create mode 100644 Remote/Helper/Path.hs create mode 100644 Remote/Helper/ReadOnly.hs create mode 100644 Remote/Helper/Special.hs create mode 100644 Remote/Helper/Ssh.hs create mode 100644 Remote/Helper/ThirdPartyPopulated.hs create mode 100644 Remote/Hook.hs create mode 100644 Remote/HttpAlso.hs create mode 100644 Remote/List.hs create mode 100644 Remote/List/Util.hs create mode 100644 Remote/P2P.hs create mode 100644 Remote/Rclone.hs create mode 100644 Remote/Rsync.hs create mode 100644 Remote/Rsync/RsyncUrl.hs create mode 100644 Remote/S3.hs create mode 100644 Remote/Tahoe.hs create mode 100644 Remote/Web.hs create mode 100644 Remote/WebDAV.hs create mode 100644 Remote/WebDAV/DavLocation.hs create mode 100644 RemoteDaemon/Common.hs create mode 100644 RemoteDaemon/Core.hs create mode 100644 RemoteDaemon/Transport.hs create mode 100644 RemoteDaemon/Transport/GCrypt.hs create mode 100644 RemoteDaemon/Transport/Ssh.hs create mode 100644 RemoteDaemon/Transport/Ssh/Types.hs create mode 100644 RemoteDaemon/Transport/Tor.hs create mode 100644 RemoteDaemon/Types.hs create mode 100644 Setup.hs create mode 100644 Test.hs create mode 100644 Test/Framework.hs create mode 100644 Types.hs create mode 100644 Types/ActionItem.hs create mode 100644 Types/AdjustedBranch.hs create mode 100644 Types/Availability.hs create mode 100644 Types/Backend.hs create mode 100644 Types/Benchmark.hs create mode 100644 Types/BranchState.hs create mode 100644 Types/CatFileHandles.hs create mode 100644 Types/CleanupActions.hs create mode 100644 Types/Command.hs create mode 100644 Types/Concurrency.hs create mode 100644 Types/Creds.hs create mode 100644 Types/Crypto.hs create mode 100644 Types/DeferredParse.hs create mode 100644 Types/DesktopNotify.hs create mode 100644 Types/Difference.hs create mode 100644 Types/Direction.hs create mode 100644 Types/Distribution.hs create mode 100644 Types/Export.hs create mode 100644 Types/FileMatcher.hs create mode 100644 Types/GitConfig.hs create mode 100644 Types/Group.hs create mode 100644 Types/Import.hs create mode 100644 Types/IndexFiles.hs create mode 100644 Types/Key.hs create mode 100644 Types/KeySource.hs create mode 100644 Types/Link.hs create mode 100644 Types/LockCache.hs create mode 100644 Types/Messages.hs create mode 100644 Types/MetaData.hs create mode 100644 Types/Mime.hs create mode 100644 Types/NumCopies.hs create mode 100644 Types/ProposedAccepted.hs create mode 100644 Types/RefSpec.hs create mode 100644 Types/Remote.hs create mode 100644 Types/RemoteConfig.hs create mode 100644 Types/RemoteState.hs create mode 100644 Types/RepoVersion.hs create mode 100644 Types/ScheduledActivity.hs create mode 100644 Types/StallDetection.hs create mode 100644 Types/StandardGroups.hs create mode 100644 Types/StoreRetrieve.hs create mode 100644 Types/Test.hs create mode 100644 Types/Transfer.hs create mode 100644 Types/Transferrer.hs create mode 100644 Types/TransferrerPool.hs create mode 100644 Types/Transitions.hs create mode 100644 Types/TrustLevel.hs create mode 100644 Types/UUID.hs create mode 100644 Types/Upgrade.hs create mode 100644 Types/UrlContents.hs create mode 100644 Types/VectorClock.hs create mode 100644 Types/View.hs create mode 100644 Types/WorkerPool.hs create mode 100644 Upgrade.hs create mode 100644 Upgrade/V0.hs create mode 100644 Upgrade/V1.hs create mode 100644 Upgrade/V2.hs create mode 100644 Upgrade/V3.hs create mode 100644 Upgrade/V4.hs create mode 100644 Upgrade/V5.hs create mode 100644 Upgrade/V5/Direct.hs create mode 100644 Upgrade/V6.hs create mode 100644 Upgrade/V7.hs create mode 100644 Upgrade/V8.hs create mode 100644 Upgrade/V9.hs create mode 100644 Utility/Aeson.hs create mode 100644 Utility/Android.hs create mode 100644 Utility/Applicative.hs create mode 100644 Utility/Attoparsec.hs create mode 100644 Utility/AuthToken.hs create mode 100644 Utility/Base64.hs create mode 100644 Utility/Batch.hs create mode 100644 Utility/Bloom.hs create mode 100644 Utility/CoProcess.hs create mode 100644 Utility/CopyFile.hs create mode 100644 Utility/DBus.hs create mode 100644 Utility/Daemon.hs create mode 100644 Utility/Data.hs create mode 100644 Utility/DataUnits.hs create mode 100644 Utility/Debug.hs create mode 100644 Utility/DebugLocks.hs create mode 100644 Utility/DirWatcher.hs create mode 100644 Utility/DirWatcher/FSEvents.hs create mode 100644 Utility/DirWatcher/INotify.hs create mode 100644 Utility/DirWatcher/Kqueue.hs create mode 100644 Utility/DirWatcher/Types.hs create mode 100644 Utility/DirWatcher/Win32Notify.hs create mode 100644 Utility/Directory.hs create mode 100644 Utility/Directory/Create.hs create mode 100644 Utility/Directory/Stream.hs create mode 100644 Utility/DiskFree.hs create mode 100644 Utility/Dot.hs create mode 100644 Utility/DottedVersion.hs create mode 100644 Utility/Env.hs create mode 100644 Utility/Env/Basic.hs create mode 100644 Utility/Env/Set.hs create mode 100644 Utility/Exception.hs create mode 100644 Utility/FileMode.hs create mode 100644 Utility/FileSize.hs create mode 100644 Utility/FileSystemEncoding.hs create mode 100644 Utility/Format.hs create mode 100644 Utility/FreeDesktop.hs create mode 100644 Utility/Glob.hs create mode 100644 Utility/Gpg.hs create mode 100644 Utility/Hash.hs create mode 100644 Utility/HtmlDetect.hs create mode 100644 Utility/HumanNumber.hs create mode 100644 Utility/HumanTime.hs create mode 100644 Utility/IPAddress.hs create mode 100644 Utility/InodeCache.hs create mode 100644 Utility/LinuxMkLibs.hs create mode 100644 Utility/LockFile.hs create mode 100644 Utility/LockFile/LockStatus.hs create mode 100644 Utility/LockFile/PidLock.hs create mode 100644 Utility/LockFile/Posix.hs create mode 100644 Utility/LockFile/Windows.hs create mode 100644 Utility/LockPool.hs create mode 100644 Utility/LockPool/LockHandle.hs create mode 100644 Utility/LockPool/PidLock.hs create mode 100644 Utility/LockPool/Posix.hs create mode 100644 Utility/LockPool/STM.hs create mode 100644 Utility/LockPool/Windows.hs create mode 100644 Utility/LogFile.hs create mode 100644 Utility/Lsof.hs create mode 100644 Utility/MD5.hs create mode 100644 Utility/MagicWormhole.hs create mode 100644 Utility/Matcher.hs create mode 100644 Utility/Metered.hs create mode 100644 Utility/Misc.hs create mode 100644 Utility/Monad.hs create mode 100644 Utility/Mounts.hs create mode 100644 Utility/MoveFile.hs create mode 100644 Utility/Network.hs create mode 100644 Utility/NotificationBroadcaster.hs create mode 100644 Utility/OSX.hs create mode 100644 Utility/OpenFd.hs create mode 100644 Utility/OptParse.hs create mode 100644 Utility/PID.hs create mode 100644 Utility/PartialPrelude.hs create mode 100644 Utility/Path.hs create mode 100644 Utility/Path/AbsRel.hs create mode 100644 Utility/Path/Max.hs create mode 100644 Utility/Path/Tests.hs create mode 100644 Utility/Path/Windows.hs create mode 100644 Utility/Percentage.hs create mode 100644 Utility/Process.hs create mode 100644 Utility/Process/Shim.hs create mode 100644 Utility/Process/Transcript.hs create mode 100644 Utility/QuickCheck.hs create mode 100644 Utility/RawFilePath.hs create mode 100644 Utility/ResourcePool.hs create mode 100644 Utility/Rsync.hs create mode 100644 Utility/SafeCommand.hs create mode 100644 Utility/SafeOutput.hs create mode 100644 Utility/Scheduled.hs create mode 100644 Utility/Scheduled/QuickCheck.hs create mode 100644 Utility/Shell.hs create mode 100644 Utility/ShellEscape.hs create mode 100644 Utility/SimpleProtocol.hs create mode 100644 Utility/Split.hs create mode 100644 Utility/SshConfig.hs create mode 100644 Utility/SshHost.hs create mode 100644 Utility/StatelessOpenPGP.hs create mode 100644 Utility/Su.hs create mode 100644 Utility/SystemDirectory.hs create mode 100644 Utility/TList.hs create mode 100644 Utility/Tense.hs create mode 100644 Utility/Terminal.hs create mode 100644 Utility/ThreadLock.hs create mode 100644 Utility/ThreadScheduler.hs create mode 100644 Utility/TimeStamp.hs create mode 100644 Utility/Tmp.hs create mode 100644 Utility/Tmp/Dir.hs create mode 100644 Utility/Tor.hs create mode 100644 Utility/Touch.hs create mode 100644 Utility/Tuple.hs create mode 100644 Utility/Url.hs create mode 100644 Utility/Url/Parse.hs create mode 100644 Utility/UserInfo.hs create mode 100644 Utility/Verifiable.hs create mode 100644 Utility/WebApp.hs create mode 100644 Utility/Yesod.hs create mode 100644 Utility/libkqueue.c create mode 100644 Utility/libkqueue.h create mode 100644 bash-completion.bash create mode 120000 debian/NEWS create mode 120000 debian/changelog create mode 100644 debian/compat create mode 100644 debian/control create mode 120000 debian/copyright create mode 100755 debian/create-standalone-changelog create mode 100644 debian/doc-base create mode 100644 debian/patches/series.standalone-build create mode 100644 debian/patches/standalone-build create mode 100755 debian/rules create mode 100644 debian/source/format create mode 100644 debian/tests/basics create mode 100644 debian/tests/control create mode 100644 doc/Android.mdwn create mode 100644 doc/Android/comment_29_37aa87a451d4390ed367402eec740855._comment create mode 100644 doc/Android/comment_2_7f0caccd085a541b117c8583133e94dd._comment create mode 100644 doc/Android/comment_3_ff03ae378da71c6637959779139ecb12._comment create mode 100644 doc/Android/comment_4_c7591d06fc444a4462267b000be8d688._comment create mode 100644 doc/Android/comment_5_9118997c7e892ce163c33a0de963fa11._comment create mode 100644 doc/Android/comment_6_e9559029d8f2c482a482f7343ffa99a4._comment create mode 100644 doc/android/DCIM.png create mode 100644 doc/android/appinstalled.png create mode 100644 doc/android/webapp.png create mode 100644 doc/assistant.mdwn create mode 100644 doc/assistant/addsshserver.png create mode 100644 doc/assistant/archival_walkthrough.mdwn create mode 100644 doc/assistant/brokenrepositoryalert.png create mode 100644 doc/assistant/buddylist.png create mode 100644 doc/assistant/cloudnudge.png create mode 100644 doc/assistant/combinerepos.png create mode 100644 doc/assistant/comment_1_f2c4857b7b000e005f0c19279db14eaf._comment create mode 100644 doc/assistant/comment_2_befa1f48e5a43a7965060491430a6bc4._comment create mode 100644 doc/assistant/comment_3_9bd3b532a5c026a1d664c898f8e335e6._comment create mode 100644 doc/assistant/comment_4_c546a24459ca29025f00e424353c40d2._comment create mode 100644 doc/assistant/comment_5_d17de359cdd46659170d373cd09c0979._comment create mode 100644 doc/assistant/comment_6_70193bbaa5d60b829d7636748c641104._comment create mode 100644 doc/assistant/comment_7_831a529c92951f70a27721210204e46b._comment create mode 100644 doc/assistant/connection.png create mode 100644 doc/assistant/controlmenu.png create mode 100644 doc/assistant/crashrecovery.png create mode 100644 doc/assistant/dashboard.png create mode 100644 doc/assistant/deleterepository.png create mode 100644 doc/assistant/downloadnotification.png create mode 100644 doc/assistant/downloadupgrade.png create mode 100644 doc/assistant/encryptdrive.png create mode 100644 doc/assistant/example.png create mode 100644 doc/assistant/fsckconfig.png create mode 100644 doc/assistant/genkey.png create mode 100644 doc/assistant/iaitem.png create mode 100644 doc/assistant/inotify_max_limit_alert.png create mode 100644 doc/assistant/konquerormenu.png create mode 100644 doc/assistant/local_pairing_walkthrough.mdwn create mode 100644 doc/assistant/local_pairing_walkthrough/addrepository.png create mode 100644 doc/assistant/local_pairing_walkthrough/comment_1_b33deed054d3aa8cfa6c9e3958643f16._comment create mode 100644 doc/assistant/local_pairing_walkthrough/comment_2_39f1162b4d43b61e957e7497df4b9e2b._comment create mode 100644 doc/assistant/local_pairing_walkthrough/comment_3_588869692b290483f58f3a7aa2bfb55f._comment create mode 100644 doc/assistant/local_pairing_walkthrough/comment_4_f6bf82c263fefe38701709d9dbd974cc._comment create mode 100644 doc/assistant/local_pairing_walkthrough/comment_5_bada601ea4b7104f162a3e00def4be2b._comment create mode 100644 doc/assistant/local_pairing_walkthrough/comment_6_01ba0f9bfa0ed066c4b73d2d6028eecc._comment create mode 100644 doc/assistant/local_pairing_walkthrough/comment_7_17d44229e4fa46c50815672b96a9735a._comment create mode 100644 doc/assistant/local_pairing_walkthrough/comment_8_b9d4c29cf2cca0427808df6af08fb789._comment create mode 100644 doc/assistant/local_pairing_walkthrough/comment_9_bf313e490076a4676a632e3ec6129189._comment create mode 100644 doc/assistant/local_pairing_walkthrough/pairing.png create mode 100644 doc/assistant/local_pairing_walkthrough/pairrequest.png create mode 100644 doc/assistant/local_pairing_walkthrough/secret.png create mode 100644 doc/assistant/local_pairing_walkthrough/secretempty.png create mode 100644 doc/assistant/logs.png create mode 100644 doc/assistant/makerepo.png create mode 100644 doc/assistant/menu.png create mode 100644 doc/assistant/nautilusmenu.png create mode 100644 doc/assistant/osx-app.png create mode 100644 doc/assistant/preferences.png create mode 100644 doc/assistant/quickstart.mdwn create mode 100644 doc/assistant/release_notes.mdwn create mode 100644 doc/assistant/release_notes/comment_1_bd8f376c9d0c1d5ed07fb013907a60ee._comment create mode 100644 doc/assistant/release_notes/comment_2_75e0774ad042717fbd059a8a9ec2db1e._comment create mode 100644 doc/assistant/release_notes/comment_3_b3bfd8e547e20c51f7c32c6c9424e936._comment create mode 100644 doc/assistant/release_notes/comment_4_c6caa2b521b456bb4ce594d64919cffe._comment create mode 100644 doc/assistant/release_notes/comment_5_e9faf88a8eeb9aa8714c8c0514792815._comment create mode 100644 doc/assistant/release_notes/comment_6_53c2b479dbb53236000b4b3caad8ed04._comment create mode 100644 doc/assistant/remote_sharing_walkthrough.mdwn create mode 100644 doc/assistant/repairrepository.png create mode 100644 doc/assistant/repogroups.png create mode 100644 doc/assistant/repoinfo.png create mode 100644 doc/assistant/repositories.png create mode 100644 doc/assistant/rsync.net.encryption.png create mode 100644 doc/assistant/rsync.net.png create mode 100644 doc/assistant/running.png create mode 100644 doc/assistant/share_with_a_friend_walkthrough.mdwn create mode 100644 doc/assistant/share_with_a_friend_walkthrough/enabletor.png create mode 100644 doc/assistant/share_with_a_friend_walkthrough/pairing.png create mode 100644 doc/assistant/share_with_a_friend_walkthrough/wormholepairing.png create mode 100644 doc/assistant/thanks.mdwn create mode 100644 doc/assistant/thumbnail.png create mode 100644 doc/assistant/unused.png create mode 100644 doc/assistant/upgradecomplete.png create mode 100644 doc/assistant/xmpp.png create mode 100644 doc/assistant/xmppnudge.png create mode 100644 doc/assistant/xmpppairingend.png create mode 100644 doc/automatic_conflict_resolution.mdwn create mode 100644 doc/automatic_conflict_resolution/comment_1_307898855f91a2a189d4fa5eae62cce1._comment create mode 100644 doc/automatic_conflict_resolution/comment_2_0a8ea42764dde1a33d2112197b961c51._comment create mode 100644 doc/automatic_conflict_resolution/comment_3_5c587c6633cae1c8547ca970d55ee97e._comment create mode 100644 doc/automatic_conflict_resolution/comment_4_80539e11e36a0b64cee83b6b373bd843._comment create mode 100644 doc/automatic_conflict_resolution/comment_5_00ac9e4a47ce9a886dbf573480f151bd._comment create mode 100644 doc/automatic_conflict_resolution/comment_6_8a0860fee88f5954918305f055a39d8d._comment create mode 100644 doc/automatic_conflict_resolution/comment_7_3d2250cc26036b8532faa980065e20d0._comment create mode 100644 doc/automatic_conflict_resolution/comment_8_ef474c258ce8e0ebc6485c1366ae6315._comment create mode 100644 doc/backends.mdwn create mode 100644 doc/backends/comment_10_920cd139dfec8adb1089f5acf26de4d2._comment create mode 100644 doc/backends/comment_11_f0f6316bbdc971a9ab157de9bbb9f74c._comment create mode 100644 doc/backends/comment_12_da76dff5fe712318d7d4313f1d827883._comment create mode 100644 doc/backends/comment_13_578423935bc71cdbdc23c3db06d1e870._comment create mode 100644 doc/backends/comment_14_57154dcd1041a33f220f9105b709be89._comment create mode 100644 doc/backends/comment_15_b3445fd1f379346c642a27211c6c798b._comment create mode 100644 doc/backends/comment_16_c68dfaeee2ef18f420f7e11ff5f604b9._comment create mode 100644 doc/backends/comment_17_557a622b3304eb86fed52896e0b6cbda._comment create mode 100644 doc/backends/comment_18_784b29b086503a2b4913558350526ee1._comment create mode 100644 doc/backends/comment_19_cfcaeea6fdded241f5d36ef251ef8010._comment create mode 100644 doc/backends/comment_1_375bb1fb5973e8fa67b763f2dd6e404b._comment create mode 100644 doc/backends/comment_20_29e500adf7e8614a938b3b714c9bd112._comment create mode 100644 doc/backends/comment_21_7f9cc5f966b28b7461e8ec42ceeb7165._comment create mode 100644 doc/backends/comment_22_be75c669ed8e127de8b6364961a5c0cb._comment create mode 100644 doc/backends/comment_23_8c8b08d7e6409756da4f9f3b21d5ad01._comment create mode 100644 doc/backends/comment_24_f90b8eeae8d150eca6a91416f20eb223._comment create mode 100644 doc/backends/comment_25_f6a697ac069ab018ccacf8f16b09bc7e._comment create mode 100644 doc/backends/comment_26_9e9e0f3631c60b0cdcaa9c6dd4ae0d4e._comment create mode 100644 doc/backends/comment_27_c311551741a671bcb1f32b80431c1d66._comment create mode 100644 doc/backends/comment_28_44e8d93b1f0a88c36543438d6e33d702._comment create mode 100644 doc/backends/comment_29_9e14c32713b5607b245972b400286a45._comment create mode 100644 doc/backends/comment_2_1f2626eca9004b31a0b7fc1a0df8027b._comment create mode 100644 doc/backends/comment_30_bea2a3f4f673e6e9d5ee99cf10d39460._comment create mode 100644 doc/backends/comment_31_32df8ec41dd8a6516b88b1871c998eb9._comment create mode 100644 doc/backends/comment_32_b0a375dcd0932aa380ce01d693462f5e._comment create mode 100644 doc/backends/comment_33_4c5f9c75cbb8a546e8325b206369aba1._comment create mode 100644 doc/backends/comment_34_3782e7561607c8ccf1741bd039c2c648._comment create mode 100644 doc/backends/comment_35_8ac9d37cc2a7b0b361cf686fe27192dd._comment create mode 100644 doc/backends/comment_3_fdcbf8727fdefb9942a54689234b9698._comment create mode 100644 doc/backends/comment_4_46591a3ba888fb686b1b319b80ca2c22._comment create mode 100644 doc/backends/comment_5_2210c7ff2d5812fb3b778ac172291656._comment create mode 100644 doc/backends/comment_6_82f239b58680a2681bd8074c7ef9584d._comment create mode 100644 doc/backends/comment_7_4aa8cfaec1090f79fed530720e4ddad4._comment create mode 100644 doc/backends/comment_8_c40d2c2c929ad3239ee5d529e307c746._comment create mode 100644 doc/backends/comment_9_5bef7f76f5e5b73a8e404fe6172b4368._comment create mode 100644 doc/bare_repositories.mdwn create mode 100644 doc/bare_repositories/comment_1_148e1da70d37d311634a0309a4ff8dcd._comment create mode 100644 doc/bare_repositories/comment_2_c88216da0588562c851c2ceabbfebc0a._comment create mode 100644 doc/bare_repositories/comment_3_26ba93bddb0cd1bb4e1799311f3ca750._comment create mode 100644 doc/bare_repositories/comment_4_7cf6103709a7a2710686681a6f406214._comment create mode 100644 doc/bare_repositories/comment_5_6328134497c0de6a088087fc9cb0e59e._comment create mode 100644 doc/bare_repositories/comment_6_bf227861ec3cb2ea474c143218c68133._comment create mode 100644 doc/bare_repositories/comment_7_9e065a2d8aaf7371ab7c0bb4f0c724b0._comment create mode 100644 doc/bare_repositories/comment_8_d4dff0d6265be941af9f66ba09f36ebe._comment create mode 100644 doc/bugs.mdwn create mode 100644 doc/bugs/--git-dir_and_--work-tree_separation_issue.mdwn create mode 100644 doc/bugs/--git-dir_and_--work-tree_separation_issue/comment_1_fa97996b85c0f949bbd720204db8ed46._comment create mode 100644 doc/bugs/10.20220525_cannot_probe_for_untrusted_remote_key.mdwn create mode 100644 doc/bugs/10.20220525_cannot_probe_for_untrusted_remote_key/comment_1_e35bef8fb0b9a40938022c43c87df597._comment create mode 100644 doc/bugs/Adding_zip_or_7z_or_tar_archive_builds_for_windows.mdwn create mode 100644 doc/bugs/Adding_zip_or_7z_or_tar_archive_builds_for_windows/comment_1_70480ffd417788f18cd75a9b625ecf3b._comment create mode 100644 doc/bugs/Adding_zip_or_7z_or_tar_archive_builds_for_windows/comment_2_afa6a131999feda67876859cd85ebcfc._comment create mode 100644 doc/bugs/Adjust_--unlock_not_using_--reflink__63__.mdwn create mode 100644 doc/bugs/Adjust_--unlock_not_using_--reflink__63__/comment_1_c42743828ddc62f7df7f612c713ee309._comment create mode 100644 doc/bugs/Always_identical_UUIDs.mdwn create mode 100644 doc/bugs/Always_identical_UUIDs/comment_1_1223fe5e635d771848d7054f0492920f._comment create mode 100644 doc/bugs/Always_identical_UUIDs/comment_2_6c44232cac847f6160f5bec7c8f1434b._comment create mode 100644 doc/bugs/Always_identical_UUIDs/comment_3_cdb2eec514bcf125b7f79c7be5ed810a._comment create mode 100644 doc/bugs/Android__44___unable_to_start_browser_.mdwn create mode 100644 doc/bugs/Android__44___unable_to_start_browser_/comment_1_1fc9d5168fec0b277b5ab5321c07385f._comment create mode 100644 doc/bugs/Android__44___unable_to_start_browser_/comment_2_8db1f505c02fd6d4e8acc1b6bbded03f._comment create mode 100644 doc/bugs/Android__44___unable_to_start_browser_/comment_3_93e260d1cb9de25fe4e2a6a973f05da6._comment create mode 100644 doc/bugs/Android__58___Several_error_messages___47___warnings.mdwn create mode 100644 doc/bugs/Android__58___Several_error_messages___47___warnings/comment_1_85da61d3dfb528fef17366effe123ff5._comment create mode 100644 doc/bugs/Android__58___Several_error_messages___47___warnings/comment_2_97ddaba23e91a903f69cf00931627444._comment create mode 100644 doc/bugs/Android__58___Several_error_messages___47___warnings/comment_3_b4ea7ff7deb9626a02dfd0eb459f22a2._comment create mode 100644 doc/bugs/Android__58___Several_error_messages___47___warnings/comment_4_5edddd7e90b8f11c52a44abfb891ce25._comment create mode 100644 doc/bugs/Android__58___Several_error_messages___47___warnings/comment_4_b38b675a2862d527fad28b7477f7ddde._comment create mode 100644 doc/bugs/Android__58___addurl__58___Network.BSD.getProtocolByName__58___does_not_exist___40__no_such_protocol_name__58___tcp__41__.mdwn create mode 100644 doc/bugs/Android__58___addurl__58___Network.BSD.getProtocolByName__58___does_not_exist___40__no_such_protocol_name__58___tcp__41__/comment_1_be30193f501c530bd99e97992a9c08ad._comment create mode 100644 doc/bugs/Android___58___handling_DCIM__47__Camera_not_being_configurable.mdwn create mode 100644 doc/bugs/Android___58___handling_DCIM__47__Camera_not_being_configurable/comment_1_1fe5f8c68a430b2436649cf4ba8f4987._comment create mode 100644 doc/bugs/Android_can__39__t_sync_files_with_utf-8_characters_in_names.mdwn create mode 100644 doc/bugs/Android_can__39__t_sync_files_with_utf-8_characters_in_names/comment_1_bcc3ce19cf26731057a7f3189fcbae19._comment create mode 100644 doc/bugs/Android_termux_install_fails_with_Bad_system_call.mdwn create mode 100644 doc/bugs/Android_unable_to_use_external_special_remote.mdwn create mode 100644 doc/bugs/Android_unable_to_use_external_special_remote/comment_1_17b13329db6fb4788240428ed1e2b212._comment create mode 100644 doc/bugs/Android_unable_to_use_external_special_remote/comment_2_c235675c07faaecf8e7df2d77fdac3ea._comment create mode 100644 doc/bugs/Android_version_converts_plain_git_file___40__git_add__41___to_git-annex_file.mdwn create mode 100644 doc/bugs/Assistant__39__s_transfer_bar_often_stuck_at_100__37___and_only_SHA_instead_of_file_content_.mdwn create mode 100644 doc/bugs/Assistant__39__s_transfer_bar_often_stuck_at_100__37___and_only_SHA_instead_of_file_content_/comment_1_f88d08035baf75efa1dbbddc296b591a._comment create mode 100644 doc/bugs/Assistant__39__s_transfer_bar_often_stuck_at_100__37___and_only_SHA_instead_of_file_content_/comment_2_c1b86731f0e2fe8ce70931fe4a0d1656._comment create mode 100644 doc/bugs/Assistant_crashes_with_handle_issues_-_never_works.mdwn create mode 100644 doc/bugs/Assistant_deleted_file_when_merging___40__another_report__41__.mdwn create mode 100644 doc/bugs/Assistant_deleted_file_when_merging___40__another_report__41__/comment_1_27d96b639bc386132b9e74170532d749._comment create mode 100644 doc/bugs/Assistant_deleted_file_when_merging___40__another_report__41__/comment_2_b9a39f172115fc39fee21c8987843faa._comment create mode 100644 doc/bugs/Assistant_deleted_file_when_merging___40__another_report__41__/comment_3_324213fb62c67dc9565f0e812500e046._comment create mode 100644 doc/bugs/Assistant_deleted_file_when_merging___40__another_report__41__/comment_4_271c48d2cf4b09c27cf47ecba7fe1a64._comment create mode 100644 doc/bugs/Assistant_does_not_update_adjusted_branch.mdwn create mode 100644 doc/bugs/Assistant_doesn__39__t_sync_directory_remotes.mdwn create mode 100644 doc/bugs/Assistant_drops_files_from_remote_repos_that_it_shouldn__39__t.mdwn create mode 100644 doc/bugs/Assistant_drops_files_from_remote_repos_that_it_shouldn__39__t/comment_1_5e7d5b0b996a171c641fa560a613d319._comment create mode 100644 doc/bugs/Assistant_drops_files_from_remote_repos_that_it_shouldn__39__t/comment_2_2015dfc648d26d6dfabe6ad4f4754034._comment create mode 100644 doc/bugs/Assistant_drops_files_from_remote_repos_that_it_shouldn__39__t/comment_3_8f394437982cebeaf878f5b3871afaf3._comment create mode 100644 doc/bugs/Assistant_drops_files_from_remote_repos_that_it_shouldn__39__t/comment_4_ccd108a53a9fb747539e269becfb3e05._comment create mode 100644 doc/bugs/Assistant_drops_files_from_remote_repos_that_it_shouldn__39__t/comment_5_7ee571496c6d7cd57a206e6356dc2be3._comment create mode 100644 doc/bugs/Assistant_drops_files_from_remote_repos_that_it_shouldn__39__t/comment_6_6c88b218b8186242a6106fc3e7b3edf5._comment create mode 100644 doc/bugs/Assistant_drops_files_from_remote_repos_that_it_shouldn__39__t/comment_7_fbbf9d1a63fc61a5fd288fd308b24ca1._comment create mode 100644 doc/bugs/Assistant_drops_files_from_remote_repos_that_it_shouldn__39__t/comment_8_fe2498f60b02104a8a044c79cb5bea63._comment create mode 100644 doc/bugs/Assistant_drops_files_from_remote_repos_that_it_shouldn__39__t/comment_9_c46cdba62da4f5ccfdc42dfc33aec600._comment create mode 100644 doc/bugs/Assistant_has_created_155_semitrusted_repositories.mdwn create mode 100644 doc/bugs/Assistant_has_created_155_semitrusted_repositories/comment_10_c5508b476fc48e7a0002b6ecb8d5eac0._comment create mode 100644 doc/bugs/Assistant_has_created_155_semitrusted_repositories/comment_11_cb49edcc8a13928c171a2acdde32dce9._comment create mode 100644 doc/bugs/Assistant_has_created_155_semitrusted_repositories/comment_12_a86c8347526e7b0a6f7633f3aea528bb._comment create mode 100644 doc/bugs/Assistant_has_created_155_semitrusted_repositories/comment_13_a26c2b49ee7746be06f4772aa838d5aa._comment create mode 100644 doc/bugs/Assistant_has_created_155_semitrusted_repositories/comment_14_b958da97a69091d283918e0d5a658da5._comment create mode 100644 doc/bugs/Assistant_has_created_155_semitrusted_repositories/comment_1_169b24b34cce3f5c8446c2150beb6827._comment create mode 100644 doc/bugs/Assistant_has_created_155_semitrusted_repositories/comment_2_6acd6f38297772a07d8d5fb999bd2eaa._comment create mode 100644 doc/bugs/Assistant_has_created_155_semitrusted_repositories/comment_3_6a4118e5c5fbe5e84d27094ac72b741b._comment create mode 100644 doc/bugs/Assistant_has_created_155_semitrusted_repositories/comment_4_04daa20d5d7c74bb34ec48e752ed9fe8._comment create mode 100644 doc/bugs/Assistant_has_created_155_semitrusted_repositories/comment_5_11af8ab2587e6eeb671051ba8191995b._comment create mode 100644 doc/bugs/Assistant_has_created_155_semitrusted_repositories/comment_6_26236cdc2bce532017854791bcd727d1._comment create mode 100644 doc/bugs/Assistant_has_created_155_semitrusted_repositories/comment_7_3c532dd5b8a01ecdeda1300b49aba675._comment create mode 100644 doc/bugs/Assistant_has_created_155_semitrusted_repositories/comment_8_119142c5ebc499f0ee0926dbca265308._comment create mode 100644 doc/bugs/Assistant_has_created_155_semitrusted_repositories/comment_9_0651071ee1654eeaa9aa9369873fdf6a._comment create mode 100644 doc/bugs/Assistant_having_a_child_git_cat-file_--batch_do_the_same_thing_over_and_over_and_using_a_lot_of_memory.mdwn create mode 100644 doc/bugs/Assistant_having_a_child_git_cat-file_--batch_do_the_same_thing_over_and_over_and_using_a_lot_of_memory/comment_10_edb2428552cf98bfb1735c2d6daf2b20._comment create mode 100644 doc/bugs/Assistant_having_a_child_git_cat-file_--batch_do_the_same_thing_over_and_over_and_using_a_lot_of_memory/comment_1_ac8c39e362e6c806b9d68befc0199ccd._comment create mode 100644 doc/bugs/Assistant_having_a_child_git_cat-file_--batch_do_the_same_thing_over_and_over_and_using_a_lot_of_memory/comment_2_b2941bf7901a1b2237b7210c8f0af2a5._comment create mode 100644 doc/bugs/Assistant_having_a_child_git_cat-file_--batch_do_the_same_thing_over_and_over_and_using_a_lot_of_memory/comment_3_1429ca784a03bc424b3537cbe0449421._comment create mode 100644 doc/bugs/Assistant_having_a_child_git_cat-file_--batch_do_the_same_thing_over_and_over_and_using_a_lot_of_memory/comment_4_f9e65cf5598b4b14eeee1f41f46d4084._comment create mode 100644 doc/bugs/Assistant_having_a_child_git_cat-file_--batch_do_the_same_thing_over_and_over_and_using_a_lot_of_memory/comment_5_044ecac2d2e670e1ef69809c944093d1._comment create mode 100644 doc/bugs/Assistant_having_a_child_git_cat-file_--batch_do_the_same_thing_over_and_over_and_using_a_lot_of_memory/comment_6_6f4f51e1583bed5e7e601e4f30f4207b._comment create mode 100644 doc/bugs/Assistant_having_a_child_git_cat-file_--batch_do_the_same_thing_over_and_over_and_using_a_lot_of_memory/comment_7_683a0a3d4caea0ee625e41ae8a6c7c06._comment create mode 100644 doc/bugs/Assistant_having_a_child_git_cat-file_--batch_do_the_same_thing_over_and_over_and_using_a_lot_of_memory/comment_8_03dd76b01f46a7cc66eddac3e054c8ad._comment create mode 100644 doc/bugs/Assistant_having_a_child_git_cat-file_--batch_do_the_same_thing_over_and_over_and_using_a_lot_of_memory/comment_9_5f4444f03cbebaa44628288095383679._comment create mode 100644 doc/bugs/Assistant_is_stuck_with___39__fuzztest__39__.mdwn create mode 100644 doc/bugs/Assistant_only_watches_one_repo_on_startup.mdwn create mode 100644 doc/bugs/Assistant_only_watches_one_repo_on_startup/comment_1_4606e5c7159e8e9f2f12e010cbd22e6a._comment create mode 100644 doc/bugs/Assistant_temporary_delete_and_recommit_files.mdwn create mode 100644 doc/bugs/Attempting_to_repair_repository_almost_every_day.mdwn create mode 100644 doc/bugs/Auto-repair_greatly_slows_down_the_machine.mdwn create mode 100644 doc/bugs/Auto-repair_greatly_slows_down_the_machine/comment_10_d46c6314bff75a0ae679bc2358b28c2b._comment create mode 100644 doc/bugs/Auto-repair_greatly_slows_down_the_machine/comment_11_1c2c3adfbccd2b14a7d1c4618800e735._comment create mode 100644 doc/bugs/Auto-repair_greatly_slows_down_the_machine/comment_1_a52e4ef04209d0a2449165e2b4cb9ccc._comment create mode 100644 doc/bugs/Auto-repair_greatly_slows_down_the_machine/comment_2_9f5340ab1012f335af0c246b82c1a777._comment create mode 100644 doc/bugs/Auto-repair_greatly_slows_down_the_machine/comment_3_67bfccf0934075559d439b1deafc001e._comment create mode 100644 doc/bugs/Auto-repair_greatly_slows_down_the_machine/comment_4_5fa785aa759d1a1917f2a292324fe5ec._comment create mode 100644 doc/bugs/Auto-repair_greatly_slows_down_the_machine/comment_5_9fe529034ad0115792b58d7da99c167e._comment create mode 100644 doc/bugs/Auto-repair_greatly_slows_down_the_machine/comment_6_93ed991ef2a74c18575073ca72e06185._comment create mode 100644 doc/bugs/Auto-repair_greatly_slows_down_the_machine/comment_7_4649fa11745ff668e43833209811d005._comment create mode 100644 doc/bugs/Auto-repair_greatly_slows_down_the_machine/comment_8_6138a48f0b7e8be2bb66430397afdf5a._comment create mode 100644 doc/bugs/Auto-repair_greatly_slows_down_the_machine/comment_9_3da5940bb2e9689b00239eec9a073f1c._comment create mode 100644 doc/bugs/Bootstrap3_icons_missing_on_Android.mdwn create mode 100644 doc/bugs/Bootstrap3_icons_missing_on_Android/comment_10_da4e26c77376a8171493a815bdb51ff1._comment create mode 100644 doc/bugs/Bootstrap3_icons_missing_on_Android/comment_11_506e26de284a6429366def33b007bc0c._comment create mode 100644 doc/bugs/Bootstrap3_icons_missing_on_Android/comment_12_a77477951576fc657d693811f11f9975._comment create mode 100644 doc/bugs/Bootstrap3_icons_missing_on_Android/comment_13_c3ef67bded8ed3c511a8ea85b8bd81a5._comment create mode 100644 doc/bugs/Bootstrap3_icons_missing_on_Android/comment_1_97cf233d8401d642337d5fe9dd525e2b._comment create mode 100644 doc/bugs/Bootstrap3_icons_missing_on_Android/comment_2_4981a0a894b77e94a3bffec82b0f6e51._comment create mode 100644 doc/bugs/Bootstrap3_icons_missing_on_Android/comment_3_dbe960392aaa0839886381820754814a._comment create mode 100644 doc/bugs/Bootstrap3_icons_missing_on_Android/comment_4_cdf9621fe3e9f8eb8b7af88f779a7116._comment create mode 100644 doc/bugs/Bootstrap3_icons_missing_on_Android/comment_5_a2318f094b30f58fefc072807896c099._comment create mode 100644 doc/bugs/Bootstrap3_icons_missing_on_Android/comment_6_7c2f1d914793798708ca13b6ac3dd474._comment create mode 100644 doc/bugs/Bootstrap3_icons_missing_on_Android/comment_7_a24b5165590b5d58919da1003cd20c54._comment create mode 100644 doc/bugs/Bootstrap3_icons_missing_on_Android/comment_8_71ed14b8e5a898b1643d5e37591c2476._comment create mode 100644 doc/bugs/Bootstrap3_icons_missing_on_Android/comment_9_15357e33c2431080d45f7cef5f4f1209._comment create mode 100644 doc/bugs/Broken_symlinks_in_directory_remote_causes_crash.mdwn create mode 100644 doc/bugs/Button_to_cancel_conistency_checks.mdwn create mode 100644 doc/bugs/CHECKPRESENT_could_check_file_size_as_well.mdwn create mode 100644 doc/bugs/CHECKPRESENT_could_check_file_size_as_well/comment_1_7bbba896da745a8a6b69ec62bf71fc89._comment create mode 100644 doc/bugs/CRLF_breaks_interoperability_Win-Ux__58__..post-receive.mdwn create mode 100644 doc/bugs/CRLF_breaks_interoperability_Win-Ux__58__..post-receive/comment_1_a9501e2f347b957e7dc53a06fe59cff4._comment create mode 100644 doc/bugs/CRLF_breaks_interoperability_Win-Ux__58__..post-receive/comment_2_e4cac0d18fd6cde1084e93d0fe997f40._comment create mode 100644 doc/bugs/CRLF_breaks_interoperability_Win-Ux__58__..post-receive/comment_3_a3a702176a316d6b599eb2a149a293ad._comment create mode 100644 doc/bugs/CRLF_breaks_interoperability_Win-Ux__58__..post-receive/comment_4_82103077cde68c3b6a70dcf70c4ed837._comment create mode 100644 doc/bugs/CRLF_breaks_interoperability_Win-Ux__58__..post-receive/comment_5_c22f9e3c5e438b2cc05008bc3f91b7fc._comment create mode 100644 doc/bugs/Can__39__t_add_a_git_repo_to_git_annex__58_____34__Invalid_path_repo__47__.git__47__X__34___for_many_X.mdwn create mode 100644 doc/bugs/Can__39__t_add_a_git_repo_to_git_annex__58_____34__Invalid_path_repo__47__.git__47__X__34___for_many_X/comment_1_5d23b1f02c6a0db0b43939210c427994._comment create mode 100644 doc/bugs/Can__39__t_add_a_git_repo_to_git_annex__58_____34__Invalid_path_repo__47__.git__47__X__34___for_many_X/comment_2_6ede677f8113fcd6215ecd68de237f06._comment create mode 100644 doc/bugs/Can__39__t_add_a_git_repo_to_git_annex__58_____34__Invalid_path_repo__47__.git__47__X__34___for_many_X/comment_3_3377120e8e246f5ec74d372015590a6c._comment create mode 100644 doc/bugs/Cannot_add_gcrypt_remote_in_webapp__58___gcrypt_backend.mdwn create mode 100644 doc/bugs/Cannot_clone_an_annex.mdwn create mode 100644 doc/bugs/Cannot_clone_an_annex/comment_1_b40a2652361a79c6c6eab0fc21be8e46._comment create mode 100644 doc/bugs/Cannot_delete_remote_when_ssh_sync_fails.mdwn create mode 100644 doc/bugs/Cannot_delete_remote_when_ssh_sync_fails/comment_1_3c8e8fae688a9db8e18e869a187fb4eb._comment create mode 100644 doc/bugs/Cannot_delete_remote_when_ssh_sync_fails/comment_2_e189617c4ac23df50f02af8c517fa399._comment create mode 100644 doc/bugs/Cannot_delete_remote_when_ssh_sync_fails/comment_3_35a08daa2776c648d5ee010b77e72bd4._comment create mode 100644 doc/bugs/Changing_sync_to_include_content_breaks_UX.mdwn create mode 100644 doc/bugs/Changing_sync_to_include_content_breaks_UX/comment_10_ec80bdff87c7b70e4235cd5b2ba6ed05._comment create mode 100644 doc/bugs/Changing_sync_to_include_content_breaks_UX/comment_11_82e32aca2c23a1e27553bcd9708870b2._comment create mode 100644 doc/bugs/Changing_sync_to_include_content_breaks_UX/comment_12_4e0746d00d8a596d878c1fe12ec68849._comment create mode 100644 doc/bugs/Changing_sync_to_include_content_breaks_UX/comment_13_80ba2e4241372ff3ce1505900e17c22f._comment create mode 100644 doc/bugs/Changing_sync_to_include_content_breaks_UX/comment_14_08f3c3d26d13fd44ae9c26791b90a8fc._comment create mode 100644 doc/bugs/Changing_sync_to_include_content_breaks_UX/comment_15_38a0eafe91e05a7784dd5e305f38a8f3._comment create mode 100644 doc/bugs/Changing_sync_to_include_content_breaks_UX/comment_16_ee529ac7b3d27f1cdc7edf5154c0da8f._comment create mode 100644 doc/bugs/Changing_sync_to_include_content_breaks_UX/comment_17_d60adea3f0c0030a403c33c57f27abda._comment create mode 100644 doc/bugs/Changing_sync_to_include_content_breaks_UX/comment_18_594ae4ce426c7fd9963a22def58904d8._comment create mode 100644 doc/bugs/Changing_sync_to_include_content_breaks_UX/comment_19_bdc211b026d3b05de127f6ed5a3d19b0._comment create mode 100644 doc/bugs/Changing_sync_to_include_content_breaks_UX/comment_1_1541a9323009b20f527501ebedc9d395._comment create mode 100644 doc/bugs/Changing_sync_to_include_content_breaks_UX/comment_2_c06017f123f1ee34c7310f923086d09a._comment create mode 100644 doc/bugs/Changing_sync_to_include_content_breaks_UX/comment_3_c03b45321728155eae9470cd8bb2cc93._comment create mode 100644 doc/bugs/Changing_sync_to_include_content_breaks_UX/comment_4_bb6972e9870a68a98d90c6847228ab31._comment create mode 100644 doc/bugs/Changing_sync_to_include_content_breaks_UX/comment_5_da9812dd37de7bba4fe2b1785bdca1ae._comment create mode 100644 doc/bugs/Changing_sync_to_include_content_breaks_UX/comment_6_bc8154b171c460b4590d2b32401f24a2._comment create mode 100644 doc/bugs/Changing_sync_to_include_content_breaks_UX/comment_7_20febad4aa06d5b39668a858d2b118b1._comment create mode 100644 doc/bugs/Changing_sync_to_include_content_breaks_UX/comment_8_84d31b8fdde0f0ab0355a5d30760e90d._comment create mode 100644 doc/bugs/Changing_sync_to_include_content_breaks_UX/comment_9_17a75fa68bf3718230d1d523b7eb0250._comment create mode 100644 doc/bugs/Cloned_from_.git_under_Windows__44___get_fails.mdwn create mode 100644 doc/bugs/Cloned_from_.git_under_Windows__44___get_fails/comment_1_0d619c1a4c9645a6b76619b05b3d518c._comment create mode 100644 doc/bugs/Cloned_from_.git_under_Windows__44___get_fails/comment_2_0bc5932c037002dac6b096f97d12584c._comment create mode 100644 doc/bugs/Commiting_Files_Containing_Non_Ascii_Char_on_OS_X_.mdwn create mode 100644 doc/bugs/Commiting_Files_Containing_Non_Ascii_Char_on_OS_X_/comment_1_81a4647a9b51bed8c230a2a16990915d._comment create mode 100644 doc/bugs/Commiting_Files_Containing_Non_Ascii_Char_on_OS_X_/comment_2_f8e97dded9ba6d2305de1278025924fe._comment create mode 100644 doc/bugs/Commiting_Files_Containing_Non_Ascii_Char_on_OS_X_/comment_3_eb34061429cb8c7d0b155825e84b657b._comment create mode 100644 doc/bugs/Commiting_Files_Containing_Non_Ascii_Char_on_OS_X_/comment_4_8cf5dc85a94c60b9c88c8e8354f19772._comment create mode 100644 doc/bugs/Continual_space_exhaustion_from_syncing_metadata.mdwn create mode 100644 doc/bugs/Continual_space_exhaustion_from_syncing_metadata/comment_1_93e3deab54b34e9ad608fd549119e221._comment create mode 100644 doc/bugs/Continual_space_exhaustion_from_syncing_metadata/comment_2_9401be5e6af886edadaf3ad7ba6a071d._comment create mode 100644 doc/bugs/Continual_space_exhaustion_from_syncing_metadata/comment_3_3309c51dbd251cc46a25557a0d25e946._comment create mode 100644 doc/bugs/Copying_many_files_to_bup_remotes_is_very_slow.mdwn create mode 100644 doc/bugs/Copying_many_files_to_bup_remotes_is_very_slow/comment_1_d81f94dfdb1b15b8bc0d9c243ef748db._comment create mode 100644 doc/bugs/Copying_many_files_to_bup_remotes_is_very_slow/comment_2_0f5ff10d84450a6df35cb974cdb4739e._comment create mode 100644 doc/bugs/Copying_many_files_to_bup_remotes_is_very_slow/comment_3_7150178b47a15857d5eece0fbe57a971._comment create mode 100644 doc/bugs/Copying_many_files_to_bup_remotes_is_very_slow/comment_4_d2896b544d6d26663b532735c3924134._comment create mode 100644 doc/bugs/Corrupted_.git__47__annex__47__index_when_running_assistant.mdwn create mode 100644 doc/bugs/Corrupted_.git__47__annex__47__index_when_running_assistant/comment_1_f2102da5822a35e1600d67326954e059._comment create mode 100644 doc/bugs/Corrupted_.git__47__annex__47__index_when_running_assistant/comment_2_656986cdc4831a8d2f80432acaf8a884._comment create mode 100644 doc/bugs/Corrupted_.git__47__annex__47__index_when_running_assistant/comment_3_fa94d1b008a6c1663e40854edcd5504d._comment create mode 100644 doc/bugs/Corrupted_.git__47__annex__47__index_when_running_assistant/comment_4_5a26a33c34594ec6eb50bd675d68801a._comment create mode 100644 doc/bugs/Corrupted_.git__47__annex__47__index_when_running_assistant/comment_5_81e2f37e7adbd8f24734b67a1dd209f9._comment create mode 100644 doc/bugs/Corrupted_.git__47__annex__47__index_when_running_assistant/comment_6_f0999dbd00e06ab2cbf68b58527c2b9b._comment create mode 100644 doc/bugs/Corrupted_drive__58___Assistant_seems_consider_files_deleted_and_deletes_them_elsewhere_too.mdwn create mode 100644 doc/bugs/Corrupted_drive__58___Assistant_seems_consider_files_deleted_and_deletes_them_elsewhere_too/comment_1_80ca50f5305eda71fe32f2b0bc922c34._comment create mode 100644 doc/bugs/Corrupted_drive__58___Assistant_seems_consider_files_deleted_and_deletes_them_elsewhere_too/comment_2_e6bc6d1c0eb8c469e9e00b37bbcc9b86._comment create mode 100644 doc/bugs/Corrupted_drive__58___Assistant_seems_consider_files_deleted_and_deletes_them_elsewhere_too/comment_5_0d0f6b6b46d0153433fead2bbd1bbe64._comment create mode 100644 doc/bugs/Corrupted_drive__58___Assistant_seems_consider_files_deleted_and_deletes_them_elsewhere_too/comment_5_6058a22b733cb02126286af950074ed4._comment create mode 100644 doc/bugs/Corrupted_drive__58___Assistant_seems_consider_files_deleted_and_deletes_them_elsewhere_too/comment_6_593a49669e2fadfb91773f8c84fbb031._comment create mode 100644 doc/bugs/Corrupted_drive__58___Assistant_seems_consider_files_deleted_and_deletes_them_elsewhere_too/comment_6_5a348c5f327f16e1192ef6bd7f2880bb._comment create mode 100644 doc/bugs/Corrupted_git___40__but_not_annex__41___controlled_files.mdwn create mode 100644 doc/bugs/Corrupted_git___40__but_not_annex__41___controlled_files/comment_1_48f15b40bf3a7cd3beb7cabd4e706337._comment create mode 100644 doc/bugs/Could_not_read_from_remote_repository.mdwn create mode 100644 doc/bugs/Could_not_read_from_remote_repository/comment_1_da842a9d146bcd5c7773b58364c25597._comment create mode 100644 doc/bugs/Could_not_read_from_remote_repository/comment_2_82746a0cf989d884cd0fd796db092b3c._comment create mode 100644 doc/bugs/Could_not_read_from_remote_repository/comment_3_95d16045dc238dba19a98808de2eeedf._comment create mode 100644 doc/bugs/Crash_when_disabling_syncing_in_the_webapp.mdwn create mode 100644 doc/bugs/Crash_when_disabling_syncing_in_the_webapp/comment_1_e25dd80370820782f9c6a877101d8703._comment create mode 100644 doc/bugs/Crash_when_disabling_syncing_in_the_webapp/comment_2_4031c16362137747717e9595cb5c8a15._comment create mode 100644 doc/bugs/Crash_when_disabling_syncing_in_the_webapp/comment_3_0667f39f60bdaba6670f5b8304a8a77c._comment create mode 100644 doc/bugs/Creating_an_encrypted_S3_does_not_check_for_presence_of_GPG.mdwn create mode 100644 doc/bugs/Data_loss_when_copying_files_with_running_assistant.mdwn create mode 100644 doc/bugs/Data_loss_when_copying_files_with_running_assistant/comment_1_51e7afb030dfb3052044b0fa95e08bed._comment create mode 100644 doc/bugs/Data_loss_when_copying_files_with_running_assistant/comment_2_b9cc9ae227a6dd883a2324b6d70b88ad._comment create mode 100644 doc/bugs/Data_loss_when_copying_files_with_running_assistant/comment_3_15f4fc02d574a2ed55e683dd99e9b72c._comment create mode 100644 doc/bugs/Data_loss_when_copying_files_with_running_assistant/comment_4_c16ecf8fabd0c63a7b59927fe0bb6e2c._comment create mode 100644 doc/bugs/Deasn__39__t_clean_up_ssh_keys_after_removing_remote_repo.mdwn create mode 100644 doc/bugs/Deasn__39__t_clean_up_ssh_keys_after_removing_remote_repo/comment_1_88fbf70eae48484988dbb433a437c717._comment create mode 100644 doc/bugs/Debian_and_MacOSX_cannot_read_eachother__39__s_S3_credentials.mdwn create mode 100644 doc/bugs/Debian_and_MacOSX_cannot_read_eachother__39__s_S3_credentials/comment_1_e307e5d0ec02ed76dc7c3f0894770539._comment create mode 100644 doc/bugs/Delete_data__47__update_location_log_when_a_special_remote_fails_to_fsck.mdwn create mode 100644 doc/bugs/Delete_data__47__update_location_log_when_a_special_remote_fails_to_fsck/comment_1_203ebe6fa1bb8d3c6e7c0b948fc7dd6b._comment create mode 100644 doc/bugs/Direct_mode_repositories_still_use_symlinks_sometimes.mdwn create mode 100644 doc/bugs/Directory_remotes_with_same_mount_point.mdwn create mode 100644 doc/bugs/Directory_remotes_with_same_mount_point/comment_1_351063bf8fb7779a9a7ecd21bef8b801._comment create mode 100644 doc/bugs/Directory_remotes_with_same_mount_point/comment_2_90351193c14f4c68f9b92640dae82f13._comment create mode 100644 doc/bugs/Directory_remotes_with_same_mount_point/comment_3_6b7727db8e2487394a80fc061d76868e._comment create mode 100644 doc/bugs/Directory_remotes_with_same_mount_point/comment_4_5a4b3daa0f8a0d7f330f5a1d922d0f6a._comment create mode 100644 doc/bugs/Directory_remotes_with_same_mount_point/comment_5_fb21865b36819a54a23e1ccb7f377fa1._comment create mode 100644 doc/bugs/Disabling_remote_auto-enabling_not_possible.mdwn create mode 100644 doc/bugs/Disabling_remote_auto-enabling_not_possible/comment_1_136c0fa106347bd0474f8298fde227f5._comment create mode 100644 doc/bugs/Disabling_remote_auto-enabling_not_possible/comment_2_f6b1d513e664d1a5ee51b90f49731eeb._comment create mode 100644 doc/bugs/Disabling_remote_auto-enabling_not_possible/comment_3_c2c7144fa74bdc455e1bd36b594902c1._comment create mode 100644 doc/bugs/Disabling_remote_auto-enabling_not_possible/comment_4_4f3e9f15fcc96cd98c6915ec68cc471f._comment create mode 100644 doc/bugs/Disabling_remote_auto-enabling_not_possible/comment_5_ccb5b6960da43a93ff0b7404190c51de._comment create mode 100644 doc/bugs/Disabling_remote_auto-enabling_not_possible/comment_6_5b6359663efb608b9a78ab17c02be9ee._comment create mode 100644 doc/bugs/Disabling_remote_auto-enabling_not_possible/comment_7_995b88efc83f76f14ccb22bc2a6ef4bd._comment create mode 100644 doc/bugs/Dropping_filename_extensions_with_more_than_4_char.mdwn create mode 100644 doc/bugs/Dropping_filename_extensions_with_more_than_4_char/comment_1_ecc9ff2bca0638797f358d5ff0d9e363._comment create mode 100644 doc/bugs/Duplicate_descriptions_cause_confusing_error.mdwn create mode 100644 doc/bugs/Empty_files_make_git_status_slow.mdwn create mode 100644 doc/bugs/Empty_files_make_git_status_slow/comment_1_67662686361d345b3b82d1c80adc2452._comment create mode 100644 doc/bugs/Empty_files_make_git_status_slow/comment_2_39876be38934e9056e9aa2a9fcdeaedf._comment create mode 100644 doc/bugs/Empty_files_make_git_status_slow/comment_3_17b400bc03eb176f63009b9e01a862f4._comment create mode 100644 doc/bugs/Empty_files_make_git_status_slow/comment_4_d3a05649e8d7d5d62cc3e80ce0f45fe4._comment create mode 100644 doc/bugs/Empty_files_make_git_status_slow/comment_5_e2c9b041388685bb2ada57244c1735fd._comment create mode 100644 doc/bugs/Empty_files_make_git_status_slow/comment_6_d107491ed7ac97c4732dc96707defaf0._comment create mode 100644 doc/bugs/Empty_folders_don__39__t_get_remove.mdwn create mode 100644 doc/bugs/Empty_folders_don__39__t_get_remove/comment_1_9f41638299c214b2ee13f23ab41349da._comment create mode 100644 doc/bugs/Empty_folders_don__39__t_get_remove/comment_2_35f59adc30fe743221f29bbfecff639b._comment create mode 100644 doc/bugs/Empty_folders_don__39__t_get_remove/comment_3_ccc703f8667805ce2886719c57e76ef8._comment create mode 100644 doc/bugs/Enable__47__paus_syncing_to_remote_ssh_server_with_multiple_directories.mdwn create mode 100644 doc/bugs/Enable__47__paus_syncing_to_remote_ssh_server_with_multiple_directories/comment_1_e8affeca873c2ef73255f8f77e0ac16f._comment create mode 100644 doc/bugs/Enabling_useConfigOnly_not_honored.mdwn create mode 100644 doc/bugs/Enabling_useConfigOnly_not_honored/comment_1_4f0e4da06d8c9a9db771e593be1e2608._comment create mode 100644 doc/bugs/Enabling_useConfigOnly_not_honored/comment_2_5dede8445ba1c20e9750a30fe29de0b0._comment create mode 100644 doc/bugs/Encoding_error_in_webapp.mdwn create mode 100644 doc/bugs/EvilLinker_needs_to_escape_spaces_in_user_name.mdwn create mode 100644 doc/bugs/EvilLinker_needs_to_escape_spaces_in_user_name/comment_1_6b289221a65a750444b1b5850df3386c._comment create mode 100644 doc/bugs/FTBFS_for_the_2nd_day.mdwn create mode 100644 doc/bugs/FTBFS_for_the_2nd_day/comment_1_b7278de8f98c9fd96219281d61284461._comment create mode 100644 doc/bugs/FTBFS_for_the_2nd_day/comment_2_05c93396766cb9ac6a596db679519718._comment create mode 100644 doc/bugs/FTBFS_for_the_2nd_day/comment_3_0037f0e43383f32b22ee1ba2c98d78f8._comment create mode 100644 doc/bugs/FTBFS_on_OSX__47__Windows.mdwn create mode 100644 doc/bugs/FTBFS_on_OSX__47__Windows/comment_1_04e4ec83077eec6af8ce50d6f1b2c71e._comment create mode 100644 doc/bugs/FTBFS_since_yesterday_on_linux.mdwn create mode 100644 doc/bugs/Failed_adjusted_branch_update_after_error_in_drop.mdwn create mode 100644 doc/bugs/Failed_adjusted_branch_update_after_error_in_drop/comment_1_08b3eafdabe5f60ec2206584dff5d230._comment create mode 100644 doc/bugs/Failed_adjusted_branch_update_after_error_in_drop/comment_2_a947f8afde3d7f63fd33b0b7e5998e43._comment create mode 100644 doc/bugs/Failed_adjusted_branch_update_after_error_in_drop/comment_3_c8ce6c9fc35fa6ad5165ecf9a3592c9d._comment create mode 100644 doc/bugs/Failed_adjusted_branch_update_after_error_in_drop/comment_4_2a4de8981ced7894148ca9a68e5ef60b._comment create mode 100644 doc/bugs/Failed_adjusted_branch_update_after_error_in_drop/comment_5_7b989f777b211f21ca0e9ca681869bff._comment create mode 100644 doc/bugs/Failed_adjusted_branch_update_after_error_in_drop/comment_6_f9ef22fcfabc6445060b964f08080c76._comment create mode 100644 doc/bugs/Failed_adjusted_branch_update_after_error_in_drop/comment_7_f679af07b798cb4bfae75565dd46e8ed._comment create mode 100644 doc/bugs/Failed_adjusted_branch_update_after_error_in_drop/comment_8_c7c210961b51a87770932f40a9563622._comment create mode 100644 doc/bugs/Failed_move__47__get_over_ssh_in_new_version.mdwn create mode 100644 doc/bugs/Failed_move__47__get_over_ssh_in_new_version/comment_1_13252610f5b05251d1dcdf81f295ae7c._comment create mode 100644 doc/bugs/Failed_move__47__get_over_ssh_in_new_version/comment_2_ae1807997fe2098f8534d23130039ae4._comment create mode 100644 doc/bugs/Failed_move__47__get_over_ssh_in_new_version/comment_3_fcb4b6a62bcee4d2f70c58fb7f270b7a._comment create mode 100644 doc/bugs/Failed_move__47__get_over_ssh_in_new_version/comment_4_f2fe8462292a4e80b5df4adeac20ee72._comment create mode 100644 doc/bugs/Failed_move__47__get_over_ssh_in_new_version/comment_5_a769702d5d203eb435677bbd423857a6._comment create mode 100644 doc/bugs/Failed_move__47__get_over_ssh_in_new_version/comment_6_8b18048e0ba4341ecef60787855cdac3._comment create mode 100644 doc/bugs/Failed_move__47__get_over_ssh_in_new_version/comment_7_5c8ac4f42293240cacfb2edceada1a0b._comment create mode 100644 doc/bugs/Fails_to_connect_to_newly_added_remote_on_Windows.mdwn create mode 100644 doc/bugs/Fails_to_drop_key_on_windows___40__Access_denied__41__.mdwn create mode 100644 doc/bugs/Fails_to_drop_key_on_windows___40__Access_denied__41__/comment_1_fdad38ba9decc434e0d04a446f0a02e5._comment create mode 100644 doc/bugs/Fails_to_drop_key_on_windows___40__Access_denied__41__/comment_2_cdedb5512dc9c27a88632e963a27a389._comment create mode 100644 doc/bugs/Failure_to_get_small_files_over_P2P_protocol.mdwn create mode 100644 doc/bugs/Failure_to_get_small_files_over_P2P_protocol/comment_1_72a8b9b6ed582dad36301cb9beece2f8._comment create mode 100644 doc/bugs/Failure_to_get_small_files_over_P2P_protocol/comment_2_53970994816f1de9816e3496fdf0ef71._comment create mode 100644 doc/bugs/Failure_to_get_small_files_over_P2P_protocol/comment_3_4c359c12d5c61351484dfcb2f5547222._comment create mode 100644 doc/bugs/Failure_to_get_small_files_over_P2P_protocol/comment_4_1e286c1506fc542df85c6158a8ec3d1c._comment create mode 100644 doc/bugs/Failure_to_get_small_files_over_P2P_protocol/comment_5_c667e4d4899925a5484c94256044f6ee._comment create mode 100644 doc/bugs/Failure_to_get_small_files_over_P2P_protocol/comment_6_5ed6591954aeafe6c99ae152f4f4ad67._comment create mode 100644 doc/bugs/Failure_to_get_small_files_over_P2P_protocol/comment_7_247db3d1c03b207296e97975a3554756._comment create mode 100644 doc/bugs/Files_disappear_from_locally_paired_annexes_when_edited.mdwn create mode 100644 doc/bugs/Files_disappear_from_locally_paired_annexes_when_edited/comment_1_bdc97db9dc9954331e4c400baf9e5541._comment create mode 100644 doc/bugs/Files_recorded_with_other_file__39__s_checksums.mdwn create mode 100644 doc/bugs/Files_recorded_with_other_file__39__s_checksums/comment_1_05e3e33e1ca2361546dbe08c6bd476d6._comment create mode 100644 doc/bugs/Files_recorded_with_other_file__39__s_checksums/comment_2_0735ed4187e23ddea6bd0aa408451942._comment create mode 100644 doc/bugs/Files_recorded_with_other_file__39__s_checksums/comment_3_06b7be9e651e528440a054ef43f7142f._comment create mode 100644 doc/bugs/Files_recorded_with_other_file__39__s_checksums/comment_4_bc9cf721f8087cb91954cc2435376bc2._comment create mode 100644 doc/bugs/Files_recorded_with_other_file__39__s_checksums/comment_5_8f0bbd819b95dfa97e2f4848e08a787a._comment create mode 100644 doc/bugs/Files_recorded_with_other_file__39__s_checksums/comment_6_17a0864cec6f28a0445998f3c5fc7f10._comment create mode 100644 doc/bugs/Files_recorded_with_other_file__39__s_checksums/comment_7_d480e85683f0418441f26c7d61c4af02._comment create mode 100644 doc/bugs/Files_recorded_with_other_file__39__s_checksums/comment_8_80763c1c40acdf0915134182d15e4fd8._comment create mode 100644 doc/bugs/Files_recorded_with_other_file__39__s_checksums/comment_9_7c3180616e40b49fc5ddf398d23d0201._comment create mode 100644 doc/bugs/Files_unaccessible_in___40__some__63____41___views_on_a_crippled_filesystem.mdwn create mode 100644 doc/bugs/FreeBSD_patches.mdwn create mode 100644 doc/bugs/FreeBSD_patches/comment_1_3473c3d4207a8387d962366dd1aa88b1._comment create mode 100644 doc/bugs/FreeBSD_patches/comment_2_ba8df081ebf5cbbb5561aa48343e4fcd._comment create mode 100644 doc/bugs/GIN_is_not_recognized_as_a_git-annex_enabled_repos.mdwn create mode 100644 doc/bugs/GIN_is_not_recognized_as_a_git-annex_enabled_repos/comment_1_8a27545e11b3d9e4e45aea4c9a5c9af4._comment create mode 100644 doc/bugs/GIN_is_not_recognized_as_a_git-annex_enabled_repos/comment_2_3e2f01eaaf717710a08ba092856af193._comment create mode 100644 doc/bugs/GIN_is_not_recognized_as_a_git-annex_enabled_repos/comment_3_07460def4969896c87e8696955740fa9._comment create mode 100644 doc/bugs/GIN_is_not_recognized_as_a_git-annex_enabled_repos/comment_4_f97de485f97d8016a5ab4e276799d230._comment create mode 100644 doc/bugs/GIN_is_not_recognized_as_a_git-annex_enabled_repos/comment_5_cf4130cb932d3d884e605d7c6447e61e._comment create mode 100644 doc/bugs/GPG_passphrase_repeated_prompt.mdwn create mode 100644 doc/bugs/GPG_passphrase_repeated_prompt/comment_1_6ef1c9725befc84ad57bce196ef630ef._comment create mode 100644 doc/bugs/Get_crashes_when_remote_contains_non-english_chars.mdwn create mode 100644 doc/bugs/Get_gpg_subkey_id_used_for_encryption.mdwn create mode 100644 doc/bugs/Get_gpg_subkey_id_used_for_encryption/comment_1_2cbdc33f22d18b8ea25473d361e591eb._comment create mode 100644 doc/bugs/Get_gpg_subkey_id_used_for_encryption/comment_2_81f2725bf6cfbef43cd9253a61eb7cfa._comment create mode 100644 doc/bugs/Get_gpg_subkey_id_used_for_encryption/comment_3_efae569e57322f263f626e330c64aac5._comment create mode 100644 doc/bugs/Git-annex_and_Microsoft_Office_files_on_OS_X.mdwn create mode 100644 doc/bugs/Git-annex_and_Microsoft_Office_files_on_OS_X/comment_1_0cf11096ceeb6cf93db5609a42a70641._comment create mode 100644 doc/bugs/Git_checkout_fails_using_--recurse-submodules.mdwn create mode 100644 doc/bugs/Git_checkout_fails_using_--recurse-submodules/comment_1_571703fc4e1e2f4e34f54db7a7da7080._comment create mode 100644 doc/bugs/Git_checkout_fails_using_--recurse-submodules/comment_2_9fe6b56ffda6d0c77ce65786514cd79d._comment create mode 100644 doc/bugs/Git_checkout_fails_using_--recurse-submodules/comment_3_fce2467a0442f98194fa11caffa466ad._comment create mode 100644 doc/bugs/Git_copy_fails_with_absolute_path_on_mavericks.mdwn create mode 100644 doc/bugs/Git_copy_fails_with_absolute_path_on_mavericks/comment_1_2f0c74aba502533b85b922ea81ded70d._comment create mode 100644 doc/bugs/Git_repos_corrupt_themselves.mdwn create mode 100644 doc/bugs/Git_repos_corrupt_themselves/comment_10_74e6d17a1b14b2fdc7eddf4ee1895733._comment create mode 100644 doc/bugs/Git_repos_corrupt_themselves/comment_11_d1f454482feef0350a6fa61bdf7673cc._comment create mode 100644 doc/bugs/Git_repos_corrupt_themselves/comment_12_5a13945d6bec6fa5fac84555f7ef8e21._comment create mode 100644 doc/bugs/Git_repos_corrupt_themselves/comment_13_6715bc3370f115f90627cfc4b06cf0e8._comment create mode 100644 doc/bugs/Git_repos_corrupt_themselves/comment_14_6234b04455acc0b2b2f22a1d8c2ab475._comment create mode 100644 doc/bugs/Git_repos_corrupt_themselves/comment_16_586e591a1e3cc53fd0108da91492c5c2._comment create mode 100644 doc/bugs/Git_repos_corrupt_themselves/comment_16_7a1cdfba17f129f6bf87a71549bbaab6._comment create mode 100644 doc/bugs/Git_repos_corrupt_themselves/comment_17_faaa433ba8df649771469fdbcd9bb69e._comment create mode 100644 doc/bugs/Git_repos_corrupt_themselves/comment_18_238bbbcabd626c33acc14f930a7d536c._comment create mode 100644 doc/bugs/Git_repos_corrupt_themselves/comment_1_c7fbc3da4404fb33a4b0babf068dc4d3._comment create mode 100644 doc/bugs/Git_repos_corrupt_themselves/comment_2_f2368358a0ccdd36a551a2c833cb9c9a._comment create mode 100644 doc/bugs/Git_repos_corrupt_themselves/comment_3_f7d921256107773dcb294747cdc38ebd._comment create mode 100644 doc/bugs/Git_repos_corrupt_themselves/comment_4_cf152fccbdb281dcbeb02cb398686ac0._comment create mode 100644 doc/bugs/Git_repos_corrupt_themselves/comment_5_652928a8f8bd0250973f19fa28cbb029._comment create mode 100644 doc/bugs/Git_repos_corrupt_themselves/comment_6_315606cfa07d2c4b20a6c9ec477c83d1._comment create mode 100644 doc/bugs/Git_repos_corrupt_themselves/comment_7_54aed251ddb9df1c8164a25240e1533f._comment create mode 100644 doc/bugs/Git_repos_corrupt_themselves/comment_8_a1131917149dd07ec73367e7cbc3b3f2._comment create mode 100644 doc/bugs/Git_repos_corrupt_themselves/comment_9_033def91d2a30f1cee498fabbfe5d37f._comment create mode 100644 doc/bugs/Handling_of_files_inside_and_outside_archive_directory_at_the_same_time.mdwn create mode 100644 doc/bugs/Handling_of_files_inside_and_outside_archive_directory_at_the_same_time/comment_1_e8bb3d6a2318402b985caed08282d473._comment create mode 100644 doc/bugs/Handling_of_files_inside_and_outside_archive_directory_at_the_same_time/comment_2_ead9fa75a12ef36be9a92637b144e74f._comment create mode 100644 doc/bugs/Hard_links_not_synced_in_direct_mode.mdwn create mode 100644 doc/bugs/Hard_links_not_synced_in_direct_mode/comment_1_aaa781664ae0c62c4f6530cb075ed367._comment create mode 100644 doc/bugs/Hard_links_not_synced_in_direct_mode/comment_2_213aa10909d1fd0f20ed078a7ed93e79._comment create mode 100644 doc/bugs/Hard_links_not_synced_in_direct_mode/comment_3_e6b783d9aaae20c0d35e9888d878716a._comment create mode 100644 doc/bugs/Hard_links_not_synced_in_direct_mode/comment_4_b008ae7b1cf8685d92c9a87a7609de1e._comment create mode 100644 doc/bugs/Hard_links_not_synced_in_direct_mode/comment_5_949c891209713a2c0a5e66af11ed4c79._comment create mode 100644 doc/bugs/Hard_links_not_synced_in_direct_mode/comment_6_12379a8e89ce8505123f5b24f3dbbaca._comment create mode 100644 doc/bugs/Homebrew_build_broken.mdwn create mode 100644 doc/bugs/Homebrew_build_broken/comment_1_c30517144c98faaf592b0e8e2bcc7db4._comment create mode 100644 doc/bugs/Homebrew_build_broken/comment_2_d3f253a12a77fe4a354144880d0a4935._comment create mode 100644 doc/bugs/Host_resolution_error_on_Android_when_adding_RSync.net_repo.mdwn create mode 100644 doc/bugs/Host_resolution_error_on_Android_when_adding_RSync.net_repo/comment_1_a7a613c3fa1bee42442a446366027381._comment create mode 100644 doc/bugs/Host_resolution_error_on_Android_when_adding_RSync.net_repo/comment_2_97bf976e0e04fb27916e245eb9c7709d._comment create mode 100644 doc/bugs/How_to_git_union-merge__63__.mdwn create mode 100644 doc/bugs/How_to_git_union-merge__63__/comment_1_58b6c9712d7c209248d9ef87bcc0e110._comment create mode 100644 doc/bugs/How_to_git_union-merge__63__/comment_2_22701b82e8d53acff66ddea5bf9448bf._comment create mode 100644 doc/bugs/Hybrid_encryption_can__39__t_generate_the_right_key_after_moving_files.mdwn create mode 100644 doc/bugs/Hybrid_encryption_can__39__t_generate_the_right_key_after_moving_files/comment_1_bbc1e7205d7701afd405c6e62a1c0aa3._comment create mode 100644 doc/bugs/Hybrid_encryption_can__39__t_generate_the_right_key_after_moving_files/comment_2_52a1800537f1244ad6cf417c5f25ebe0._comment create mode 100644 doc/bugs/Hybrid_encryption_can__39__t_generate_the_right_key_after_moving_files/comment_3_414bd487619e46b25e8d9a57d9aef1f6._comment create mode 100644 doc/bugs/Hybrid_encryption_can__39__t_generate_the_right_key_after_moving_files/comment_4_81abd2627672911ba6367effbf5c487b._comment create mode 100644 doc/bugs/Hybrid_encryption_can__39__t_generate_the_right_key_after_moving_files/comment_5_ce0342e38a87017ad58c9a79b17d759a._comment create mode 100644 doc/bugs/Impossible_to_enable_an_existing_gcrypt_repo_in_the_webapp.mdwn create mode 100644 doc/bugs/Impossible_to_enable_an_existing_gcrypt_repo_in_the_webapp/comment_1_17814787e333d15da3ab4e57c7d31d4b._comment create mode 100644 doc/bugs/Incompatibility_with_git_2.37.mdwn create mode 100644 doc/bugs/Incompatibility_with_git_2.37/comment_1_c24657bb9d3b3072698572c4e75ccb5d._comment create mode 100644 doc/bugs/Incompatibility_with_git_2.37/comment_2_4d5eb77736e8512affc25e7bdd5190f1._comment create mode 100644 doc/bugs/Incompatibility_with_git_2.37/comment_3_889ece8b2168b20019253ab6dd5b0e48._comment create mode 100644 doc/bugs/Incompatibility_with_git_2.37/comment_4_95b8ea35cd10ac80e1d01b658e24d7a9._comment create mode 100644 doc/bugs/Incompatibility_with_git_2.37/comment_5_d0e60d224dd48d7c31adb6b250f662df._comment create mode 100644 doc/bugs/Incompatibility_with_git_2.37/comment_6_3bb6424838d4f8a971f3dce6d1b8dbfb._comment create mode 100644 doc/bugs/Incorrect___34__file_content_has_changed__34___on_duplicates.mdwn create mode 100644 doc/bugs/Incorrect___34__file_content_has_changed__34___on_duplicates/comment_1_b9491e9cb432ca3b8bdb08a00c89b346._comment create mode 100644 doc/bugs/Incorrect___34__file_content_has_changed__34___on_duplicates/comment_2_cf9ce09377da2eae63ff41d07cb222d7._comment create mode 100644 doc/bugs/Incorrect___34__file_content_has_changed__34___on_duplicates/comment_3_a99df351ed700f908b6aaf3f52d245b4._comment create mode 100644 doc/bugs/Incorrect___34__file_content_has_changed__34___on_duplicates/comment_4_d370abe891d554577a9af7f959c9e3f0._comment create mode 100644 doc/bugs/Incorrect___34__file_content_has_changed__34___on_duplicates/comment_5_68a3936700a02a17d0379d96880eea15._comment create mode 100644 doc/bugs/Incorrect___34__file_content_has_changed__34___on_duplicates/comment_6_4d05a896fd57b55388fb21638ed02233._comment create mode 100644 doc/bugs/Incorrect___34__file_content_has_changed__34___on_duplicates/comment_7_4a1248ea257c04f1afe233891a606eea._comment create mode 100644 doc/bugs/Incorrect___34__file_content_has_changed__34___on_duplicates/comment_8_37eb9d35191bcfc0e7e4496f5720cbed._comment create mode 100644 doc/bugs/Infinite_loop_when_synchronizing_between_many_machines.mdwn create mode 100644 doc/bugs/Infinite_loop_when_synchronizing_between_many_machines/comment_1_6d8f42446749f3e697af20626f22cf8b._comment create mode 100644 doc/bugs/Infinite_loop_when_synchronizing_between_many_machines/comment_2_3b4e529564488e732dd62569247b3d56._comment create mode 100644 doc/bugs/Initial___34__Make_repository__34___fails_due_to___34__empty_ident_name___40__for___60__email-address__62____41___not_allowed__34__.mdwn create mode 100644 doc/bugs/Initial___34__Make_repository__34___fails_due_to___34__empty_ident_name___40__for___60__email-address__62____41___not_allowed__34__/comment_1_267b252368dca4803d706c70a3ef3244._comment create mode 100644 doc/bugs/Installing_git-annex_on_macOS_10.13_HighSierra_via_brew_install_git-annex_require_to_install_lib_magic_via_the_command_brew_install_lib_magic.mdwn create mode 100644 doc/bugs/Installing_git-annex_on_macOS_10.13_HighSierra_via_brew_install_git-annex_require_to_install_lib_magic_via_the_command_brew_install_lib_magic/comment_1_43614460d92cfac8a40ad2d6654926b9._comment create mode 100644 doc/bugs/Invalid_argument_saving_FreeSurfer_file_on_NTFS.mdwn create mode 100644 doc/bugs/Invalid_argument_saving_FreeSurfer_file_on_NTFS/comment_1_181a319138cc10742bc8676d77e8a614._comment create mode 100644 doc/bugs/Invalid_option___96__--time-limit__61__1m__39___with_pull.mdwn create mode 100644 doc/bugs/Is_there_any_way_to_rate_limit_uploads_to_an_S3_backend__63__.mdwn create mode 100644 doc/bugs/Is_there_any_way_to_rate_limit_uploads_to_an_S3_backend__63__/comment_1_ef97e735ce308f7bcc03f5d9fda588bf._comment create mode 100644 doc/bugs/Is_there_any_way_to_rate_limit_uploads_to_an_S3_backend__63__/comment_2_539b89de8743e435386b86119d1e982f._comment create mode 100644 doc/bugs/Issue_fewer_S3_GET_requests.mdwn create mode 100644 doc/bugs/Issue_fewer_S3_GET_requests/comment_1_59a6b87d01c003bf55cde4c882e1778c._comment create mode 100644 doc/bugs/Issue_fewer_S3_GET_requests/comment_2_8fdeb3352ac00a76625ec9c007e5b76a._comment create mode 100644 doc/bugs/Issue_fewer_S3_GET_requests/comment_3_6ccbb1cff7bc6b4640220d98f7ce21c3._comment create mode 100644 doc/bugs/Issue_on_OSX_with_some_system_limits.mdwn create mode 100644 doc/bugs/Issue_on_OSX_with_some_system_limits/comment_1_5fc1eedb5231edc37c87a2d9b91313b9._comment create mode 100644 doc/bugs/Issue_on_OSX_with_some_system_limits/comment_2_b14e697c211843163285aaa8de5bf4c6._comment create mode 100644 doc/bugs/Issue_on_OSX_with_some_system_limits/comment_3_18ddf8b5934dd6fb1676cd6adc7d103b._comment create mode 100644 doc/bugs/Issue_on_OSX_with_some_system_limits/comment_4_c25a8eb369e546f65e1a72d89f43066f._comment create mode 100644 doc/bugs/Issue_on_OSX_with_some_system_limits/comment_5_6407a3e7aa0316cba2994bfef0e3c633._comment create mode 100644 doc/bugs/Issue_on_OSX_with_some_system_limits/comment_6_f01887695e8b8386e125464c6d401565._comment create mode 100644 doc/bugs/Issue_on_OSX_with_some_system_limits/comment_7_c7776d5b2d073e0d2ae36515185c25aa._comment create mode 100644 doc/bugs/It_is_very_easy_to_turn_git-annex_into_a_zombie.mdwn create mode 100644 doc/bugs/It_is_very_easy_to_turn_git-annex_into_a_zombie/comment_1_d5fba6c061fb21795021ea83070dbfa2._comment create mode 100644 doc/bugs/It_is_very_easy_to_turn_git-annex_into_a_zombie/comment_2_12cba707239018989e8d5b6f456fa754._comment create mode 100644 doc/bugs/J1_display_issue.mdwn create mode 100644 doc/bugs/Linux_standalone__39__s_metadata_--batch_can__39__t_parse_UTF-8.mdwn create mode 100644 doc/bugs/Linux_standalone__39__s_metadata_--batch_can__39__t_parse_UTF-8/comment_1_1765400777911cc61eb591b76c84ae89._comment create mode 100644 doc/bugs/Local_network___40__ssh__41___fails_to_pair__47__sync.mdwn create mode 100644 doc/bugs/Local_network___40__ssh__41___fails_to_pair__47__sync/comment_1_bab9cd5bdcffec3c48b9e8657cd9bbf7._comment create mode 100644 doc/bugs/Local_network___40__ssh__41___fails_to_pair__47__sync/comment_2_104898dce3c67c082a9f2b36e2f45ff8._comment create mode 100644 doc/bugs/Location_change_of_remote_DNS_ignored.mdwn create mode 100644 doc/bugs/Location_change_of_remote_DNS_ignored/comment_1_449bfb3a594f99cf5e71a6e18d6d3dbc._comment create mode 100644 doc/bugs/Location_change_of_remote_DNS_ignored/comment_2_b097dec73d4965f62c61003ed27e4209._comment create mode 100644 doc/bugs/Low_disk_space_corrupts_state.mdwn create mode 100644 doc/bugs/Low_disk_space_corrupts_state/comment_1_d8235498e2206c3b5284455e5c4182b9._comment create mode 100644 doc/bugs/Low_disk_space_corrupts_state/comment_2_0e47c63a48e10ae760754df0ce165388._comment create mode 100644 doc/bugs/MacOSX__58___archive_folders_not_working_as_expected.mdwn create mode 100644 doc/bugs/MacOSX__58___archive_folders_not_working_as_expected/comment_1_c8ce2a1978fc1bfa5f31cff9f48690f6._comment create mode 100644 doc/bugs/MacOSX__58___archive_folders_not_working_as_expected/comment_2_cf9a679c7e6ec5cae4109e748b20b8f9._comment create mode 100644 doc/bugs/MacOSX__58___archive_folders_not_working_as_expected/comment_3_4026607087a9da2759f841e59aadfcdc._comment create mode 100644 doc/bugs/MacOSX__58___archive_folders_not_working_as_expected/comment_4_45c1e00e64f916ef8a5f9200144861eb._comment create mode 100644 doc/bugs/MacOSX__58___archive_folders_not_working_as_expected/comment_5_9501e259e7d813545ff9cfdac22748f6._comment create mode 100644 doc/bugs/MacOSX__58___archive_folders_not_working_as_expected/comment_6_6c42b7b4c53d2bd547d5ba8d2a3b4c9e._comment create mode 100644 doc/bugs/MacOSX__58___archive_folders_not_working_as_expected/comment_7_660bf8f60d340feca469cfd4e28b7e43._comment create mode 100644 doc/bugs/MacOSX__58___archive_folders_not_working_as_expected/comment_8_06c95f066ffc844b0e1e4b4c16d30da8._comment create mode 100644 doc/bugs/MacOSX__58___archive_folders_not_working_as_expected/comment_9_ab4b7a243f9d1dfddf1c2c2609863d99._comment create mode 100644 doc/bugs/Moved_files_are_not_picked_up_by_the_assistant_on_OS_X.mdwn create mode 100644 doc/bugs/Moved_files_are_not_picked_up_by_the_assistant_on_OS_X/comment_1_75c14b405929a8f771a7c261dcc4b7a2._comment create mode 100644 doc/bugs/Moved_files_are_not_picked_up_by_the_assistant_on_OS_X/comment_2_f52483415c623ea0649c3805728ce761._comment create mode 100644 doc/bugs/Moved_files_are_not_picked_up_by_the_assistant_on_OS_X/comment_3_fd73fbeef61df106f084ac235fca904a._comment create mode 100644 doc/bugs/Moved_files_are_not_picked_up_by_the_assistant_on_OS_X/comment_4_c5e9843a956984efd22bad629930f6bd._comment create mode 100644 doc/bugs/Nearline_bucket_stopped_working___40__can__39__t_even_HEAD_files__41__.mdwn create mode 100644 doc/bugs/Nearline_bucket_stopped_working___40__can__39__t_even_HEAD_files__41__/comment_1_2a1c20b432dd839e0153827e151fbbc0._comment create mode 100644 doc/bugs/Nearline_bucket_stopped_working___40__can__39__t_even_HEAD_files__41__/comment_2_c227071f23a96ed9928f128e7f77e503._comment create mode 100644 doc/bugs/Nearline_bucket_stopped_working___40__can__39__t_even_HEAD_files__41__/comment_3_5ac676877feaa7cdb9e05d6b71b1a4c3._comment create mode 100644 doc/bugs/Nearline_bucket_stopped_working___40__can__39__t_even_HEAD_files__41__/comment_4_3853bebdfcb7dac647edefd6f55ba8d5._comment create mode 100644 doc/bugs/No_viable_build_plan_for_ghc_9.2.2.mdwn create mode 100644 doc/bugs/No_viable_build_plan_for_ghc_9.2.2/comment_1_8e7f9605f05880899eba7eae4e6f7ea0._comment create mode 100644 doc/bugs/No_viable_build_plan_for_ghc_9.2.2/comment_2_e30befdadfd7989de2e214b8e1f6ed07._comment create mode 100644 doc/bugs/No_way_to_merge_conflicts_while_on_adjusted_branch.mdwn create mode 100644 doc/bugs/No_way_to_merge_conflicts_while_on_adjusted_branch/comment_1_77c241c5d61b62b1fae552145c6c94ef._comment create mode 100644 doc/bugs/Non-annexed_files_being_annexed_and_not_stored.mdwn create mode 100644 doc/bugs/Non-annexed_files_being_annexed_and_not_stored/comment_1_ef6c2dee191e80a46e348c78ba054fc2._comment create mode 100644 doc/bugs/Non-annexed_files_being_annexed_and_not_stored/comment_2_6d73b11c55e7b2ed4003e1908558426d._comment create mode 100644 doc/bugs/OSX_Assistant_will_not_automatically_drop.mdwn create mode 100644 doc/bugs/OSX_Assistant_will_not_automatically_drop/comment_1_9a3a594f983048a9035f385101b394cf._comment create mode 100644 doc/bugs/OSX_Assistant_will_not_automatically_drop/comment_2_7901e1211ab86429ef8bd95c72ed89f5._comment create mode 100644 doc/bugs/OSX_Assistant_will_not_automatically_drop/comment_3_1ba89b95a028ba4a84b22dfd983049fd._comment create mode 100644 doc/bugs/OSX_Assistant_will_not_automatically_drop/comment_4_704ef9c0ed78a00030f7d4d151ecbe5b._comment create mode 100644 doc/bugs/OSX_Assistant_will_not_automatically_drop/comment_5_47aa5de003b409d3d2a4c58a0f08a14a._comment create mode 100644 doc/bugs/OSX_Assistant_will_not_automatically_drop/comment_6_69781b2f00afe6150bc5997335b8af90._comment create mode 100644 doc/bugs/OSX__58___Assistant_leaves_repo_in_inconsistent_state.mdwn create mode 100644 doc/bugs/OSX__58___Assistant_leaves_repo_in_inconsistent_state/comment_1_0dfd9eedccb48f1f3d7939677dc96446._comment create mode 100644 doc/bugs/OSX__58___Assistant_leaves_repo_in_inconsistent_state/comment_2_5c5e7356cae8ddf8d2c8964fb69000f5._comment create mode 100644 doc/bugs/OSX__58___Assistant_leaves_repo_in_inconsistent_state/comment_3_1e0841d71c33fd3919310f1711b6e0b4._comment create mode 100644 doc/bugs/OSX__58___Assistant_leaves_repo_in_inconsistent_state/comment_4_eb5b0f8259d861000510fcfd58f66617._comment create mode 100644 doc/bugs/OSX__58___Assistant_leaves_repo_in_inconsistent_state/comment_5_4343ee35e4091fc50268f9fc611f5148._comment create mode 100644 doc/bugs/OSX__58___Pushed_changes_are_autocommited.mdwn create mode 100644 doc/bugs/OSX__58___Pushed_changes_are_autocommited/comment_1_ff7fc340c34297beb913e8cba5af052b._comment create mode 100644 doc/bugs/OSX__58___Pushed_changes_are_autocommited/comment_2_fb72d7dc7b56c6166c557aa03b951eb1._comment create mode 100644 doc/bugs/OSX__58___Pushed_changes_are_autocommited/comment_3_8420ed892366eb78a874eec793eaa38d._comment create mode 100644 doc/bugs/OSX__58___Pushed_changes_are_autocommited/comment_4_5def2bf7430c4cba0c6ed154e75c967b._comment create mode 100644 doc/bugs/OSX__58___Pushed_changes_are_autocommited/comment_5_72c7566677b4c2f212bddeca49262181._comment create mode 100644 doc/bugs/OSX__58___Pushed_changes_are_autocommited/comment_6_13ad56d86b5bdbaaacdad5b31347551c._comment create mode 100644 doc/bugs/OSX_assistant_fails_to_download_new_file_after_initial_pass.mdwn create mode 100644 doc/bugs/OSX_assistant_fails_to_download_new_file_after_initial_pass/comment_10_3feba4ba84efb77bd4f8f46b6b4600f1._comment create mode 100644 doc/bugs/OSX_assistant_fails_to_download_new_file_after_initial_pass/comment_1_a33fcd088e419d8e6c459e42f21f8bbe._comment create mode 100644 doc/bugs/OSX_assistant_fails_to_download_new_file_after_initial_pass/comment_2_47196f7e781137751ebd1a1d7083838a._comment create mode 100644 doc/bugs/OSX_assistant_fails_to_download_new_file_after_initial_pass/comment_3_672d98ee06e051430f8e01faa93bb4cf._comment create mode 100644 doc/bugs/OSX_assistant_fails_to_download_new_file_after_initial_pass/comment_4_06fb3031b838cd443326f4ecd689b600._comment create mode 100644 doc/bugs/OSX_assistant_fails_to_download_new_file_after_initial_pass/comment_5_42d447400c15acf6ca031d165b2c781c._comment create mode 100644 doc/bugs/OSX_assistant_fails_to_download_new_file_after_initial_pass/comment_6_edd7d5d5c761ff665840f0ef7bea50c9._comment create mode 100644 doc/bugs/OSX_assistant_fails_to_download_new_file_after_initial_pass/comment_7_18e5334ab89efcf89ba8847436d55065._comment create mode 100644 doc/bugs/OSX_assistant_fails_to_download_new_file_after_initial_pass/comment_8_35b2bbdc24a7bd686527cd1839dee7d0._comment create mode 100644 doc/bugs/OSX_assistant_fails_to_download_new_file_after_initial_pass/comment_9_a771c6b453e6a4b3895dd69a53093440._comment create mode 100644 doc/bugs/OSX_case_insensitive_filesystem.mdwn create mode 100644 doc/bugs/OSX_case_insensitive_filesystem/comment_1_2e81165ac03e1d0566c81016e7728ee6._comment create mode 100644 doc/bugs/OSX_case_insensitive_filesystem/comment_2_4472d5db7a1cf7242077184912e32e17._comment create mode 100644 doc/bugs/OSX_case_insensitive_filesystem/comment_3_4be758c2b70c0aadfe4fc9ecff8e4522._comment create mode 100644 doc/bugs/OSX_case_insensitive_filesystem/comment_4_0b0c95a902718dd4e0976bf4e2cf265b._comment create mode 100644 doc/bugs/OSX_case_insensitive_filesystem/comment_5_2123944418123c3aaf187d34df5c11e0._comment create mode 100644 doc/bugs/OSX_case_insensitive_filesystem/comment_6_f82c803d725829722842c6d54e388719._comment create mode 100644 doc/bugs/OSX_case_insensitive_filesystem/comment_7_45e0178ce9598d086f34a89701536eb5._comment create mode 100644 doc/bugs/OSX_case_insensitive_filesystem/comment_8_3384bca070d84220efe166a398eed8a4._comment create mode 100644 doc/bugs/Offline_editing_in_Android_removes_files_and_creates_links.mdwn create mode 100644 doc/bugs/Offline_editing_in_Android_removes_files_and_creates_links/comment_1_a15eb9cd1a7bcdfa4b16459ef978a019._comment create mode 100644 doc/bugs/Offline_editing_in_Android_removes_files_and_creates_links/comment_2_1c061621f0abe435182d763cd871f405._comment create mode 100644 doc/bugs/On_Lubuntu_14.04_assistant_fails_to_create_new_setup_or_actually_work___40__fixed_by_regular_lxsession_package_update_from_2014-06-30__41__.mdwn create mode 100644 doc/bugs/On_Lubuntu_14.04_assistant_fails_to_create_new_setup_or_actually_work___40__fixed_by_regular_lxsession_package_update_from_2014-06-30__41__/comment_1_7508685b6f676c72e316642b80e40ee8._comment create mode 100644 doc/bugs/On_Lubuntu_14.04_assistant_fails_to_create_new_setup_or_actually_work___40__fixed_by_regular_lxsession_package_update_from_2014-06-30__41__/comment_2_c4dd12ea578d1f07464e1b9d68ec96cf._comment create mode 100644 doc/bugs/On_Lubuntu_14.04_assistant_fails_to_create_new_setup_or_actually_work___40__fixed_by_regular_lxsession_package_update_from_2014-06-30__41__/comment_3_8687c1d1c44d88a8ac13208273565d6c._comment create mode 100644 doc/bugs/On_Lubuntu_14.04_assistant_fails_to_create_new_setup_or_actually_work___40__fixed_by_regular_lxsession_package_update_from_2014-06-30__41__/comment_4_62be3dd4092b15cdf85cf9a231b2863a._comment create mode 100644 doc/bugs/On_Lubuntu_14.04_assistant_fails_to_create_new_setup_or_actually_work___40__fixed_by_regular_lxsession_package_update_from_2014-06-30__41__/comment_5_cca4905426a3e01da6e12be855c7a418._comment create mode 100644 doc/bugs/On_Lubuntu_14.04_assistant_fails_to_create_new_setup_or_actually_work___40__fixed_by_regular_lxsession_package_update_from_2014-06-30__41__/comment_6_ae2ca07169321c4a51b7e8e581fda5e2._comment create mode 100644 doc/bugs/On_Lubuntu_14.04_assistant_fails_to_create_new_setup_or_actually_work___40__fixed_by_regular_lxsession_package_update_from_2014-06-30__41__/comment_7_ae5c434a9c94aa000b604095f52e3d3c._comment create mode 100644 doc/bugs/On_Windows__44___can__39__t_use_a_USB_disk_annex_created_on_Linux.mdwn create mode 100644 doc/bugs/On_Windows__44___can__39__t_use_a_USB_disk_annex_created_on_Linux/comment_1_f224f4155d857a59595658357f97dac1._comment create mode 100644 doc/bugs/On_Windows__44___can__39__t_use_repository_that_has_a_unix-style_local_remote_configured.mdwn create mode 100644 doc/bugs/On_Windows__44___can__39__t_use_repository_that_has_a_unix-style_local_remote_configured/comment_1_95655915ff6ba9fb5d873358ff047496._comment create mode 100644 doc/bugs/One_Client_Not_Syncing_Content.mdwn create mode 100644 doc/bugs/One_Client_Not_Syncing_Content/comment_1_b8c8a9d10a12b72ea828b6b35d87fa5e._comment create mode 100644 doc/bugs/One_Client_Not_Syncing_Content/comment_2_59921abb184bffb5ac1656cc50054e11._comment create mode 100644 doc/bugs/Option_--from-anywhere_not_recognized_in_copy.mdwn create mode 100644 doc/bugs/Option_--from-anywhere_not_recognized_in_copy/comment_1_92bb18a7a50cf3dcbca75f544d7a0acf._comment create mode 100644 doc/bugs/Packfile_does_not_match_digest__58___gcrypt_with_assistant.mdwn create mode 100644 doc/bugs/Packfile_does_not_match_digest__58___gcrypt_with_assistant/comment_10_9d4fdddd7ab05de9dfa4cc90f1051ef5._comment create mode 100644 doc/bugs/Packfile_does_not_match_digest__58___gcrypt_with_assistant/comment_11_bbd8b537e277d24df254ed058ad40e24._comment create mode 100644 doc/bugs/Packfile_does_not_match_digest__58___gcrypt_with_assistant/comment_12_5090e41cf96dfe542d1d2326aebc556c._comment create mode 100644 doc/bugs/Packfile_does_not_match_digest__58___gcrypt_with_assistant/comment_13_2bfa76c4083ff9c1d2a4adfe38ced2f0._comment create mode 100644 doc/bugs/Packfile_does_not_match_digest__58___gcrypt_with_assistant/comment_14_2274479a1eef9ffc6a53ffb65e2c3511._comment create mode 100644 doc/bugs/Packfile_does_not_match_digest__58___gcrypt_with_assistant/comment_15_e8deee63316c8af39d7cf0996d26ecba._comment create mode 100644 doc/bugs/Packfile_does_not_match_digest__58___gcrypt_with_assistant/comment_16_2139bcb34591be137ff3da959f08bc76._comment create mode 100644 doc/bugs/Packfile_does_not_match_digest__58___gcrypt_with_assistant/comment_17_7fcd45354f94756c34b2f3f912972c19._comment create mode 100644 doc/bugs/Packfile_does_not_match_digest__58___gcrypt_with_assistant/comment_1_bf61defadd3be9bc867be961b3149be6._comment create mode 100644 doc/bugs/Packfile_does_not_match_digest__58___gcrypt_with_assistant/comment_2_8a8ead857917e7b843f1bdfe07b5d52d._comment create mode 100644 doc/bugs/Packfile_does_not_match_digest__58___gcrypt_with_assistant/comment_3_2432df64f920f3962b6ba02adaa9b61d._comment create mode 100644 doc/bugs/Packfile_does_not_match_digest__58___gcrypt_with_assistant/comment_4_536fbc38a7f2e7ab42188b5a8700e2cf._comment create mode 100644 doc/bugs/Packfile_does_not_match_digest__58___gcrypt_with_assistant/comment_5_f45d09939527be362c586ae1d470afe4._comment create mode 100644 doc/bugs/Packfile_does_not_match_digest__58___gcrypt_with_assistant/comment_6_88178fa312f351a7667b3b2c48335b02._comment create mode 100644 doc/bugs/Packfile_does_not_match_digest__58___gcrypt_with_assistant/comment_7_cd6a850119dd1aa0d9bb34c6d8fe560c._comment create mode 100644 doc/bugs/Packfile_does_not_match_digest__58___gcrypt_with_assistant/comment_8_39139e25175ae265a4dc15f0b6b7b618._comment create mode 100644 doc/bugs/Packfile_does_not_match_digest__58___gcrypt_with_assistant/comment_9_16c004fe7c77cbbba113787ce6410c9e._comment create mode 100644 doc/bugs/Pairing_locally_shows__58_____34__bad_comment_in_ssh_public_key_ssh-rsa__34__.mdwn create mode 100644 doc/bugs/Paths_behind_relative_symlinks_in_repo_don__39__t_work.mdwn create mode 100644 doc/bugs/Paths_behind_relative_symlinks_in_repo_don__39__t_work/comment_1_d7ca8767953e1ec06740727a0eda4697._comment create mode 100644 doc/bugs/Paths_behind_relative_symlinks_in_repo_don__39__t_work/comment_2_c4e6ab98e88add01eefe545551b12929._comment create mode 100644 doc/bugs/Podcast_filename_encoding_breaks_Android_client.mdwn create mode 100644 doc/bugs/Podcast_filename_encoding_breaks_Android_client/comment_1_1bb8e3f3a3d190ed557302df8b8e0335._comment create mode 100644 doc/bugs/Preserving_times_for_Annexed_files_on_Android___47___Termux_not_permitted.mdwn create mode 100644 doc/bugs/Preserving_times_for_Annexed_files_on_Android___47___Termux_not_permitted/comment_1_093b92c3a751d32600958f34c3f2122d._comment create mode 100644 doc/bugs/Problem_setting_up_encrypted_repository_using_the_assistant_with___40__outside_of_git-annex__41___shared_pgp_key.mdwn create mode 100644 doc/bugs/Problem_setting_up_encrypted_repository_using_the_assistant_with___40__outside_of_git-annex__41___shared_pgp_key/comment_1_c8e7be58222afff2a4c1df60f657d2ed._comment create mode 100644 doc/bugs/Problem_with_windows_version__58___1.9.5.msysgit/comment_1_720dbf9d959a0050a159713cd1386913._comment create mode 100644 doc/bugs/Push_to_special_remote_includes_unwanted_files.mdwn create mode 100644 doc/bugs/Push_to_special_remote_includes_unwanted_files/comment_1_a9d43aaca191a2ea464d13bcba6cd31d._comment create mode 100644 doc/bugs/Push_to_special_remote_includes_unwanted_files/comment_2_44143f10ac80a979513477fbac2637f3._comment create mode 100644 doc/bugs/Pusher_crashed__58___fd__58__56__58___hPutStr__58___illegal_operation___40__handle_is_closed__41__.mdwn create mode 100644 doc/bugs/Pusher_crashed__58___fd__58__56__58___hPutStr__58___illegal_operation___40__handle_is_closed__41__/comment_1_ab1e86667225a0174a4e19210778f97c._comment create mode 100644 doc/bugs/Pusher_crashed__58___fd__58__56__58___hPutStr__58___illegal_operation___40__handle_is_closed__41__/comment_2_cc207e43757c44b4e749488b563fdc87._comment create mode 100644 doc/bugs/Pusher_crashed__58___fd__58__56__58___hPutStr__58___illegal_operation___40__handle_is_closed__41__/comment_3_7cdef9cf264f1b11cef7cea3accf112a._comment create mode 100644 doc/bugs/Race_condition_between_watch__47__assistant_and_addurl.mdwn create mode 100644 doc/bugs/Race_condition_between_watch__47__assistant_and_addurl/comment_1_8f56b8661a600729d7a9d569e8a0ba70._comment create mode 100644 doc/bugs/Race_condition_between_watch__47__assistant_and_addurl/comment_2_46dc67bdcd174cd50ccc421ec56735ad._comment create mode 100644 doc/bugs/Race_condition_or_double-locking_with_pidlock.mdwn create mode 100644 doc/bugs/Race_condition_or_double-locking_with_pidlock/comment_1_bd92615c640ff017cd8a2ebfcc117a37._comment create mode 100644 doc/bugs/Race_condition_or_double-locking_with_pidlock/comment_2_6db20a7c8ddde72cba76240b3f7faddd._comment create mode 100644 doc/bugs/Recreating_remote_repository__39__s_annex.mdwn create mode 100644 doc/bugs/Recreating_remote_repository__39__s_annex/comment_1_9fffb1329a4a06111cf2afd8552aea62._comment create mode 100644 doc/bugs/Recreating_remote_repository__39__s_annex/comment_2_b7f5634e136294ea1a3d4ce6de58fc5d._comment create mode 100644 doc/bugs/Redundant_quote_in_the_filepath_with_rsync_remote.mdwn create mode 100644 doc/bugs/Redundant_quote_in_the_filepath_with_rsync_remote/comment_1_53d3e78c0fb4d4c398dd47498e6348aa._comment create mode 100644 doc/bugs/Remote_repositories_have_to_be_setup_encrypted.mdwn create mode 100644 doc/bugs/Remote_repositories_have_to_be_setup_encrypted/comment_1_95f73315657bc35a8d3ff9b4ba207af0._comment create mode 100644 doc/bugs/Remote_webapp_on_debian_stretch_not_responding.mdwn create mode 100644 doc/bugs/Remote_webapp_on_debian_stretch_not_responding/comment_1_e2a0d0f458d263eae15640f36d59f071._comment create mode 100644 doc/bugs/Renamed_special_remote_cannot_be_reactivated_by_the_webapp.mdwn create mode 100644 doc/bugs/Repo_manipulation_breaks_git-annex_drop_--all.mdwn create mode 100644 doc/bugs/Repo_manipulation_breaks_git-annex_drop_--all/comment_1_22fb9214e6e31d04b0ffe3266d26ea69._comment create mode 100644 doc/bugs/Repo_manipulation_breaks_git-annex_drop_--all/comment_2_fac648fb7550f0c3c433ce423e3ea7f6._comment create mode 100644 doc/bugs/Request_the_ability_to_specify_pull_commit_message.mdwn create mode 100644 doc/bugs/Request_the_ability_to_specify_pull_commit_message/comment_1_6d581ea36afab3829cd56d6d6b83c6f3._comment create mode 100644 doc/bugs/Request_the_ability_to_specify_pull_commit_message/comment_2_bdb4b0200ab9d7c15454a2f3fcae474c._comment create mode 100644 doc/bugs/Resolver_lts-19.16_still_causes_trouble_with_Win32.mdwn create mode 100644 doc/bugs/Resolver_lts-19.16_still_causes_trouble_with_Win32/comment_1_7fc0ffa7787353cf40fff0bc8da43c1d._comment create mode 100644 doc/bugs/Resolver_lts-19.16_still_causes_trouble_with_Win32/comment_2_0b96112c5d57886add62d79e7bf6044e._comment create mode 100644 doc/bugs/Resolver_lts-19.16_still_causes_trouble_with_Win32/comment_3_79cafc76eb23e54ff70c72c2f528e724._comment create mode 100644 doc/bugs/Resolver_lts-19.16_still_causes_trouble_with_Win32/comment_4_07f1b2eacf7e9e58809ee44fc1d6b574._comment create mode 100644 doc/bugs/Resolver_lts-19.33_still_causes_trouble_with_Win32.mdwn create mode 100644 doc/bugs/Resolver_lts-19.33_still_causes_trouble_with_Win32/comment_1_dcc2067ea1bc26510d013ca52096513f._comment create mode 100644 doc/bugs/Resource_exhausted.mdwn create mode 100644 doc/bugs/Resource_exhausted/comment_10_bccf9528ffe963154c92ce49762e7ea6._comment create mode 100644 doc/bugs/Resource_exhausted/comment_11_24ad3a76a25a787ac59e2c5270709e72._comment create mode 100644 doc/bugs/Resource_exhausted/comment_12_1943ff77f3bccf885229ecc10c82399d._comment create mode 100644 doc/bugs/Resource_exhausted/comment_13_c3cac0717232e04e89df62efa1db0870._comment create mode 100644 doc/bugs/Resource_exhausted/comment_1_a5ef7a62d4ed9365f9448520bb17e3b5._comment create mode 100644 doc/bugs/Resource_exhausted/comment_2_cdba2015e603f3c21f3e1697dd6fafcd._comment create mode 100644 doc/bugs/Resource_exhausted/comment_3_747d16d050fdcf69dd3d2bc5ca469a2e._comment create mode 100644 doc/bugs/Resource_exhausted/comment_4_1e9b74e60da57c3d5f08c1eb3801c1d2._comment create mode 100644 doc/bugs/Resource_exhausted/comment_5_f55d933bce77fd2185ebd0cc46fe57ec._comment create mode 100644 doc/bugs/Resource_exhausted/comment_6_26c98fca45b029a527f9684873db4be5._comment create mode 100644 doc/bugs/Resource_exhausted/comment_7_8bab413b472f900e04977db2bc3951b6._comment create mode 100644 doc/bugs/Resource_exhausted/comment_8_e9bec0b80179b1229b6af0979a21c727._comment create mode 100644 doc/bugs/Resource_exhausted/comment_9_419e24e0b91f569294ece28c42daa246._comment create mode 100644 doc/bugs/Resource_temporarily_unavailable_when_running_enableremote.mdwn create mode 100644 doc/bugs/Resource_temporarily_unavailable_when_running_enableremote/comment_1_14a5135c2e822129972feb570e453bc8._comment create mode 100644 doc/bugs/S3_ACL_deprecation.mdwn create mode 100644 doc/bugs/S3_ACL_deprecation/comment_1_07d0d382b88426180e77bac962306f44._comment create mode 100644 doc/bugs/S3_ACL_deprecation/comment_2_63b541a937cb34cc4c68504e00dc3fb8._comment create mode 100644 doc/bugs/S3_remote___8212___un-embedding_creds__63__.mdwn create mode 100644 doc/bugs/S3_remote___8212___un-embedding_creds__63__/comment_1_336e1c2a5c2a367cba0ad74896b3895b._comment create mode 100644 doc/bugs/S3_remote___8212___un-embedding_creds__63__/comment_2_282aaaed5e95e8062460f94ac3a68dea._comment create mode 100644 doc/bugs/S3_remote___8212___un-embedding_creds__63__/comment_3_07fb8558238285883d11d8805884bdae._comment create mode 100644 doc/bugs/S3_remote_errors_with_garage_endpoint.mdwn create mode 100644 doc/bugs/S3_remote_errors_with_garage_endpoint/comment_10_ea7a56193439eb63ad45074bd40f4ff5._comment create mode 100644 doc/bugs/S3_remote_errors_with_garage_endpoint/comment_1_1d5b499a0cea623aadebf7e3b7fd9752._comment create mode 100644 doc/bugs/S3_remote_errors_with_garage_endpoint/comment_2_ca7ffa315cfa49e028fe6ff2d5c3133b._comment create mode 100644 doc/bugs/S3_remote_errors_with_garage_endpoint/comment_3_ae9308a3bab8904dd0f501cbe2f09de0._comment create mode 100644 doc/bugs/S3_remote_errors_with_garage_endpoint/comment_4_f17018fbc7a8205a3ef0bdea74069fb9._comment create mode 100644 doc/bugs/S3_remote_errors_with_garage_endpoint/comment_5_fb7a448a2a4231b08277741805c12c76._comment create mode 100644 doc/bugs/S3_remote_errors_with_garage_endpoint/comment_6_513bdbb6595612432fd4f33bd8e4e737._comment create mode 100644 doc/bugs/S3_remote_errors_with_garage_endpoint/comment_7_131eb46d499d29b124c576653796e270._comment create mode 100644 doc/bugs/S3_remote_errors_with_garage_endpoint/comment_8_d8cdf46fb8de877ea167d14a055813e0._comment create mode 100644 doc/bugs/S3_remote_errors_with_garage_endpoint/comment_9_3d2033edcd49e62045339e341996fd28._comment create mode 100644 doc/bugs/S3_special_remote_support_for_DigitalOcean_Spaces.mdwn create mode 100644 doc/bugs/S3_special_remote_support_for_DigitalOcean_Spaces/comment_1_12fd9dfb47e157e1d38c5e88a543498b._comment create mode 100644 doc/bugs/S3_special_remote_support_for_DigitalOcean_Spaces/comment_2_3bbdf23c8a4a480f4f6b8e8a2f8ddecd._comment create mode 100644 doc/bugs/SQlite_failed_when_copying_to_remote_repository.mdwn create mode 100644 doc/bugs/SQlite_failed_when_copying_to_remote_repository/comment_1_4578b04c1cfc46849e9440f257f49303._comment create mode 100644 doc/bugs/SQlite_failed_when_copying_to_remote_repository/comment_2_a953d5506f30cf19fe97c6ece155b45e._comment create mode 100644 doc/bugs/SQlite_failed_when_copying_to_remote_repository/comment_3_5b2956522ce9c9cdc0c704e63efe8dac._comment create mode 100644 doc/bugs/SQlite_failed_when_copying_to_remote_repository/comment_4_3966cce3267fe134f5c9c6b05e1149b5._comment create mode 100644 doc/bugs/SQlite_failed_when_copying_to_remote_repository/comment_5_0c0aec23302afafffc0f69d1bd89ad8f._comment create mode 100644 doc/bugs/SQlite_failed_when_copying_to_remote_repository/comment_6_031f049fdc2c284303e9db42071ebda7._comment create mode 100644 doc/bugs/SQlite_failed_when_copying_to_remote_repository/comment_7_3d4a7d330d80060275c34d0a13416fb7._comment create mode 100644 doc/bugs/SQlite_failed_when_copying_to_remote_repository/comment_8_1501223d25a03c27a7ceffc6b0ea32a3._comment create mode 100644 doc/bugs/SQlite_failed_when_copying_to_remote_repository/comment_9_192c219b32c95954ec6400367474dd78._comment create mode 100644 doc/bugs/SSL_repos_does_not_show_up_in_Assistant.mdwn create mode 100644 doc/bugs/SSL_repos_does_not_show_up_in_Assistant/comment_1_5a8e599d6e22e7c1960bd1715666657b._comment create mode 100644 doc/bugs/SSL_repos_does_not_show_up_in_Assistant/comment_2_2ad5098c5e2ac9b8651cb464adb974c1._comment create mode 100644 doc/bugs/Selfsigned_certificates_with_jabber_fail_miserably.mdwn create mode 100644 doc/bugs/Selfsigned_certificates_with_jabber_fail_miserably/comment_1_13d27ba41d9ef78c8db534b6bc26314e._comment create mode 100644 doc/bugs/Selfsigned_certificates_with_jabber_fail_miserably/comment_2_018eed99e71680be9e7c0844020419bb._comment create mode 100644 doc/bugs/Selfsigned_certificates_with_jabber_fail_miserably/comment_3_1e7578dd1321f399b12197056495b0b6._comment create mode 100644 doc/bugs/Selfsigned_certificates_with_jabber_fail_miserably/comment_4_a1948b7cd6ea990c8f1be5e483c835fa._comment create mode 100644 doc/bugs/Selfsigned_certificates_with_jabber_fail_miserably/comment_5_293b333134c97dc666a825cc7a8b2b62._comment create mode 100644 doc/bugs/Share_with_a_friend_fails.mdwn create mode 100644 doc/bugs/Share_with_a_friend_fails/comment_1_d3ba5f786c45e677ea9a7b4a7b36e1a9._comment create mode 100644 doc/bugs/Share_with_a_friend_fails/comment_2_1d5568c00a9b11a05b7fde0d2d3bc327._comment create mode 100644 doc/bugs/Should_try_again_when_network_fails___40__esp._DNS__41__.mdwn create mode 100644 doc/bugs/Should_try_again_when_network_fails___40__esp._DNS__41__/comment_1_dd792bd98a48554a65150c06401ed3e5._comment create mode 100644 doc/bugs/SmartGit__39__s_Cherry-Pick_function_throws_error_with_git-annex.mdwn create mode 100644 doc/bugs/SmartGit__39__s_Cherry-Pick_function_throws_error_with_git-annex/comment_1_6fd91f615e8d5212674a9748d1b4135b._comment create mode 100644 doc/bugs/SmartGit__39__s_Cherry-Pick_function_throws_error_with_git-annex/comment_2_3dbaf39065c2f0941f8f7092c27fd4cb._comment create mode 100644 doc/bugs/SmartGit__39__s_Cherry-Pick_function_throws_error_with_git-annex/comment_3_996139be157e23e17ece9f131b17240a._comment create mode 100644 doc/bugs/Strange_case_of_data_loss__44___possibly_linked_to_git-annex_with_encrypted_rsync_remote.mdwn create mode 100644 doc/bugs/Strange_case_of_data_loss__44___possibly_linked_to_git-annex_with_encrypted_rsync_remote/comment_1_4038261a4d49694374c37ff029d3540f._comment create mode 100644 doc/bugs/Stress_test.mdwn create mode 100644 doc/bugs/Stress_test/comment_10_1694e990eab6592159309c231c6dcc16._comment create mode 100644 doc/bugs/Stress_test/comment_11_ab4cb6eefd279e6c1f229e089f703581._comment create mode 100644 doc/bugs/Stress_test/comment_1_c4c764488ac082f5c48d3a6b4b5fba42._comment create mode 100644 doc/bugs/Stress_test/comment_2_42125bba09a0ea9821cda7183e458100._comment create mode 100644 doc/bugs/Stress_test/comment_3_8240e61106b494d3600ad91f16eb5b1c._comment create mode 100644 doc/bugs/Stress_test/comment_4_c38d84e0dcc834931804c44bce7f7b7a._comment create mode 100644 doc/bugs/Stress_test/comment_5_60ce20ee255451c4ea809ba475561adb._comment create mode 100644 doc/bugs/Stress_test/comment_6_1371562e201393986cd41597f6f288cb._comment create mode 100644 doc/bugs/Stress_test/comment_7_a14be7699da224a8f6c9b34f1b911219._comment create mode 100644 doc/bugs/Stress_test/comment_8_a01995bdca7ade7dde9842b53fbc4e0c._comment create mode 100644 doc/bugs/Stress_test/comment_9_9f7efe81b7e40aaa04a865394c53e20f._comment create mode 100644 doc/bugs/Support_manual_configuration_of_tor_hidden_service.mdwn create mode 100644 doc/bugs/Support_manual_configuration_of_tor_hidden_service/comment_1_643a8e22d6ffd27a5497c077e4ce3bcd._comment create mode 100644 doc/bugs/Support_manual_configuration_of_tor_hidden_service/comment_2_90deb38d083cfac454bf364884ce06c6._comment create mode 100644 doc/bugs/Support_manual_configuration_of_tor_hidden_service/comment_3_59fe23f38b4bb70e629b0c7c698d1438._comment create mode 100644 doc/bugs/Support_manual_configuration_of_tor_hidden_service/comment_4_20c00e22eff7cb5a5f907895bf4b0b44._comment create mode 100644 doc/bugs/Support_manual_configuration_of_tor_hidden_service/comment_5_7e6e7c0ce27504273be3e5bc27685d93._comment create mode 100644 doc/bugs/Symlink_support_on_Windows_10_Creators_Update_with_Developer_Mode.mdwn create mode 100644 doc/bugs/Sync_fails_when_borg_remote_is_inaccessible.mdwn create mode 100644 doc/bugs/Sync_fails_when_borg_remote_is_inaccessible/comment_1_5e83630a60aa0242969bd1279a70628a._comment create mode 100644 doc/bugs/Sync_fails_when_borg_remote_is_inaccessible/comment_2_eff73163e8a7ae09ceeb596fca04c507._comment create mode 100644 doc/bugs/Syncing_bare_repository_doesn__39__t_work_after_using_watch_on_Windows.mdwn create mode 100644 doc/bugs/Syncing_bare_repository_doesn__39__t_work_after_using_watch_on_Windows/comment_1_e197b8dc0eae0dd6dea4febdc2ecce53._comment create mode 100644 doc/bugs/Syncing_of_file_contents_seems_to_be_broken_in_recent_versions_of_the_assistant.mdwn create mode 100644 doc/bugs/Syncing_of_file_contents_seems_to_be_broken_in_recent_versions_of_the_assistant/comment_1_8100505a7ac74646e0767d03fe643a45._comment create mode 100644 doc/bugs/Syncing_of_file_contents_seems_to_be_broken_in_recent_versions_of_the_assistant/comment_2_9833e8f77c6148db9572316066a67eee._comment create mode 100644 doc/bugs/Syncing_of_file_contents_seems_to_be_broken_in_recent_versions_of_the_assistant/comment_3_1504f8767f1f4415222d8c315c734e81._comment create mode 100644 doc/bugs/Synology_NAS__58___timer__95__create__58___Bad_address.mdwn create mode 100644 doc/bugs/Synology_NAS__58___timer__95__create__58___Bad_address/comment_1_8ce2cbdf5b5c31fd42b0ed270c54a824._comment create mode 100644 doc/bugs/Synology_NAS__58___timer__95__create__58___Bad_address/comment_2_1316ea67dc7df8d3d6f681ac3caf6d3c._comment create mode 100644 doc/bugs/Synology_NAS__58___timer__95__create__58___Bad_address/comment_3_0e098ee460a0ad70dbe34d74c5e9bf3b._comment create mode 100644 doc/bugs/Synology_NAS__58___timer__95__create__58___Bad_address/comment_4_64fd17f3537fec02f8356e535a1d0bb4._comment create mode 100644 doc/bugs/Synology_NAS__58___timer__95__create__58___Bad_address/comment_5_dacfb426f7e67e984bb9281a40427e85._comment create mode 100644 doc/bugs/Synology_NAS__58___timer__95__create__58___Bad_address/comment_6_c85f2c69aa2cff05859e92afc95e9ccf._comment create mode 100644 doc/bugs/Synology_NAS__58___timer__95__create__58___Bad_address/comment_7_e8c76f8b9645733a793676dc274744ef._comment create mode 100644 doc/bugs/Synology_NAS__58___timer__95__create__58___Bad_address/comment_8_902afcef5ad9c3f2a80d5df1ce99e1d5._comment create mode 100644 doc/bugs/Synology___40__armel__41___clock__95__gettime__58___Invalid_argument.mdwn create mode 100644 doc/bugs/Synology___40__armel__41___clock__95__gettime__58___Invalid_argument/comment_1_5277a05a17b348a1be80845e697c018c._comment create mode 100644 doc/bugs/System.PosixCompat.User_removed_in_unix-compat-0.7.mdwn create mode 100644 doc/bugs/System.PosixCompat.User_removed_in_unix-compat-0.7/comment_1_cd573b785b7d7feec72387cb0dafdcab._comment create mode 100644 doc/bugs/System.PosixCompat.User_removed_in_unix-compat-0.7/comment_2_6b15d11b6e25689e2430663a4aa90168._comment create mode 100644 doc/bugs/Tests_v8_locked__58___rsync_remote__58___FAIL.mdwn create mode 100644 doc/bugs/Tests_v8_locked__58___rsync_remote__58___FAIL/comment_1_809ca8b986ccadbc3940cc795d1823e8._comment create mode 100644 doc/bugs/Tests_v8_locked__58___rsync_remote__58___FAIL/comment_2_0327663314d2a8b2f0cab7536fdaa6bd._comment create mode 100644 doc/bugs/TransferScanner_crashed__58___fd__58__59__58___hGetLine__58___end_of_file.mdwn create mode 100644 doc/bugs/TransferScanner_crashed__58___fd__58__59__58___hGetLine__58___end_of_file/comment_1_a1392b92efdff82783a4b0cc2c3c7f2f._comment create mode 100644 doc/bugs/TransferScanner_crashed__58___fd__58__59__58___hGetLine__58___end_of_file/comment_2_5e153b7c59c474988fe551a505e545bc._comment create mode 100644 doc/bugs/Transfers_continue_after_daemon_stopped.mdwn create mode 100644 doc/bugs/Transfers_continue_after_daemon_stopped/comment_1_39eb527d64367e6762281246f1d49b1f._comment create mode 100644 doc/bugs/Tries_to_upload_to_remote_although_remote_is_dead.mdwn create mode 100644 doc/bugs/Tries_to_upload_to_remote_although_remote_is_dead/comment_1_108b3984891f82429430b503cddfb3c1._comment create mode 100644 doc/bugs/Tries_to_upload_to_remote_although_remote_is_dead/comment_2_fa5b1bc26ed3e5bfe48441490c94fe3a._comment create mode 100644 doc/bugs/Tries_to_upload_to_remote_although_remote_is_dead/comment_3_0a785b5dfbf4eef30854d6bedb12b7d1._comment create mode 100644 doc/bugs/URL_key_potential_data_loss.mdwn create mode 100644 doc/bugs/URL_key_potential_data_loss/comment_1_a921dab2c4335f690df4d5189fe4e4c2._comment create mode 100644 doc/bugs/URL_key_potential_data_loss/comment_2_0c9e7b8e00db92e8d638328f0390f6e9._comment create mode 100644 doc/bugs/Unable_to_addurl_file__58____47____47____47___on_Windows.mdwn create mode 100644 doc/bugs/Unable_to_addurl_file__58____47____47____47___on_Windows/comment_1_c4cfa1d0f90193b127722711285e1210._comment create mode 100644 doc/bugs/Unable_to_addurl_file__58____47____47____47___on_Windows/comment_2_ff71a541b3df8bb272e576c856b3aa9d._comment create mode 100644 doc/bugs/UnicodeDecodeError_while_archiving_files_with_git-annex_to_glacier.mdwn create mode 100644 doc/bugs/UnicodeDecodeError_while_archiving_files_with_git-annex_to_glacier/comment_1_f68d5ad86d67aa73074389cf9a21469e._comment create mode 100644 doc/bugs/UnicodeDecodeError_while_archiving_files_with_git-annex_to_glacier/comment_2_f0f1f18265ebb83caf4e6f1fb23ec876._comment create mode 100644 doc/bugs/Upgrade_impossible_om_Mac_OSX.mdwn create mode 100644 doc/bugs/Upgrade_impossible_om_Mac_OSX/comment_10_8c1487635f724d017ebe2f8b7bc10e8d._comment create mode 100644 doc/bugs/Upgrade_impossible_om_Mac_OSX/comment_1_84e52a4d1502fd622bdb25e04b459292._comment create mode 100644 doc/bugs/Upgrade_impossible_om_Mac_OSX/comment_2_f2b109f6cf92f101d7f0afeb91605240._comment create mode 100644 doc/bugs/Upgrade_impossible_om_Mac_OSX/comment_3_df9b111aefea82b9d108495b79d7ffb4._comment create mode 100644 doc/bugs/Upgrade_impossible_om_Mac_OSX/comment_4_e3b5bc815376383bbd1f312cc1c32a41._comment create mode 100644 doc/bugs/Upgrade_impossible_om_Mac_OSX/comment_5_cd9b77e6670840a9902f5be80e1e658a._comment create mode 100644 doc/bugs/Upgrade_impossible_om_Mac_OSX/comment_6_4584393333d377532d8607b42319abd9._comment create mode 100644 doc/bugs/Upgrade_impossible_om_Mac_OSX/comment_7_d9d36ff62267dde98a27c5981951df7f._comment create mode 100644 doc/bugs/Upgrade_impossible_om_Mac_OSX/comment_8_5b26711c737eeb0b302060f098cb320b._comment create mode 100644 doc/bugs/Upgrade_impossible_om_Mac_OSX/comment_9_1bf050056dcac7c1e0f497ee6e87a95a._comment create mode 100644 doc/bugs/Upload_to_S3_fails_.mdwn create mode 100644 doc/bugs/Upload_to_S3_fails_/comment_10_b7e912bac673bdffa5775b71d5d39937._comment create mode 100644 doc/bugs/Upload_to_S3_fails_/comment_11_65cb9b1dd69cd657f2cfde036eb60417._comment create mode 100644 doc/bugs/Upload_to_S3_fails_/comment_1_398c014921f9af957fb5e9a92ed0ef4d._comment create mode 100644 doc/bugs/Upload_to_S3_fails_/comment_2_f33ce058c9460cf7d151e739bff0440a._comment create mode 100644 doc/bugs/Upload_to_S3_fails_/comment_3_cd1e768fe1e67daf08b5afd460620922._comment create mode 100644 doc/bugs/Upload_to_S3_fails_/comment_4_0cdd2e8d6e83c03de717ecd3253e753d._comment create mode 100644 doc/bugs/Upload_to_S3_fails_/comment_5_020c055f6c06860dda27c1debb123742._comment create mode 100644 doc/bugs/Upload_to_S3_fails_/comment_6_8bc023fca8cedfc517856cdcd20b7f10._comment create mode 100644 doc/bugs/Upload_to_S3_fails_/comment_7_32685258748a7cdd177e7af2105f128e._comment create mode 100644 doc/bugs/Upload_to_S3_fails_/comment_8_841fd94d0f599c71a76fd22b07944366._comment create mode 100644 doc/bugs/Upload_to_S3_fails_/comment_9_dd837a1cb2146224b9c000cbeea4f3b3._comment create mode 100644 doc/bugs/User-Agent_not_sent_with_S3_remote.mdwn create mode 100644 doc/bugs/User-Agent_not_sent_with_S3_remote/comment_1_68fd5b6a69d90bb9623740752a918657._comment create mode 100644 doc/bugs/Utility.Url.Parse_fails_to_build_on_Win___40__imports__41__.mdwn create mode 100644 doc/bugs/VFAT_crazy_limit_on_max_filenames_in_directory.mdwn create mode 100644 doc/bugs/Versioned_S3_tree_does_not_unexport_git_objects.mdwn create mode 100644 doc/bugs/Versioned_S3_tree_does_not_unexport_git_objects/comment_1_70428ebc4027538253edc483dc5cb971._comment create mode 100644 doc/bugs/Versioned_S3_tree_does_not_unexport_git_objects/comment_2_059b9beb31d9cbc97ea4a59f47d2e63d._comment create mode 100644 doc/bugs/Versioned_S3_tree_does_not_unexport_git_objects/comment_3_176cbc137afb5cf8841ff9114b111fef._comment create mode 100644 doc/bugs/Versioned_S3_tree_does_not_unexport_git_objects/comment_4_a6490af0427bbe4363bea824d55a7593._comment create mode 100644 doc/bugs/WSL1__58___git-annex-add_fails_in_DrvFs_filesystem.mdwn create mode 100644 doc/bugs/WSL1__58___git-annex-add_fails_in_DrvFs_filesystem/comment_1_6b54cc0a268885570170620222b774d7._comment create mode 100644 doc/bugs/WSL1__58___git-annex-add_fails_in_DrvFs_filesystem/comment_2_5634af4cef0d0fe0d2affe40d9c0d5ea._comment create mode 100644 doc/bugs/WSL1__58___git-annex-add_fails_in_DrvFs_filesystem/comment_3_816bae469b0341c6dae2316050a95ad5._comment create mode 100644 doc/bugs/WSL1__58___git-annex-add_fails_in_DrvFs_filesystem/comment_4_ab64e43330e466482f30487b8bd13bbf._comment create mode 100644 doc/bugs/WSL_adjusted_braches__58___smudge_fails_with_sqlite_thread_crashed_-_locking_protocol.mdwn create mode 100644 doc/bugs/WSL_adjusted_braches__58___smudge_fails_with_sqlite_thread_crashed_-_locking_protocol/comment_10_93c9d3ea6d7a1f2d035f8a52c81790ad._comment create mode 100644 doc/bugs/WSL_adjusted_braches__58___smudge_fails_with_sqlite_thread_crashed_-_locking_protocol/comment_11_94d00ed84dfebebd7889fa861172df61._comment create mode 100644 doc/bugs/WSL_adjusted_braches__58___smudge_fails_with_sqlite_thread_crashed_-_locking_protocol/comment_12_76f765e3befd5e263a8863b56cad139b._comment create mode 100644 doc/bugs/WSL_adjusted_braches__58___smudge_fails_with_sqlite_thread_crashed_-_locking_protocol/comment_13_5e08dcb7e40e7fbcb22425b3ff8b0610._comment create mode 100644 doc/bugs/WSL_adjusted_braches__58___smudge_fails_with_sqlite_thread_crashed_-_locking_protocol/comment_14_45b1da34ec60d6322477edfd6a3a2bba._comment create mode 100644 doc/bugs/WSL_adjusted_braches__58___smudge_fails_with_sqlite_thread_crashed_-_locking_protocol/comment_1_0bcbce94586ef96c2dcbe5ef9da4ac6f._comment create mode 100644 doc/bugs/WSL_adjusted_braches__58___smudge_fails_with_sqlite_thread_crashed_-_locking_protocol/comment_2_bdb3cadf29facd4729120a6cd057b8a8._comment create mode 100644 doc/bugs/WSL_adjusted_braches__58___smudge_fails_with_sqlite_thread_crashed_-_locking_protocol/comment_3_2a9f0396df93d9500306b3d7039803a2._comment create mode 100644 doc/bugs/WSL_adjusted_braches__58___smudge_fails_with_sqlite_thread_crashed_-_locking_protocol/comment_4_da42c839f96314ed8c5ad646b614b75d._comment create mode 100644 doc/bugs/WSL_adjusted_braches__58___smudge_fails_with_sqlite_thread_crashed_-_locking_protocol/comment_5_f8ee3d06a79bdc429a114b5256290206._comment create mode 100644 doc/bugs/WSL_adjusted_braches__58___smudge_fails_with_sqlite_thread_crashed_-_locking_protocol/comment_6_b7a3837fd6af236e9ecf6d5bae077fd0._comment create mode 100644 doc/bugs/WSL_adjusted_braches__58___smudge_fails_with_sqlite_thread_crashed_-_locking_protocol/comment_7_276be047d18b2e20a8e3114abe3132ee._comment create mode 100644 doc/bugs/WSL_adjusted_braches__58___smudge_fails_with_sqlite_thread_crashed_-_locking_protocol/comment_8_cb7ce88ae3d77b9ba0a4e33c2321a3e1._comment create mode 100644 doc/bugs/WSL_adjusted_braches__58___smudge_fails_with_sqlite_thread_crashed_-_locking_protocol/comment_9_b0700fdf101f6cc883857b293cd35267._comment create mode 100644 doc/bugs/Watcher_crashed__58___.git__92__annex__92__objects__92__...sha256....pdf__92____58___openTempFile__58___does_not_exist.mdwn create mode 100644 doc/bugs/Watcher_crashed__58___.git__92__annex__92__objects__92__...sha256....pdf__92____58___openTempFile__58___does_not_exist/comment_1_9892f6b80597f0b637aeb96d212164d9._comment create mode 100644 doc/bugs/Watcher_crashed__58___.git__92__annex__92__objects__92__...sha256....pdf__92____58___openTempFile__58___does_not_exist/comment_2_687a9fd1c0b760dd2bef9647cd16175c._comment create mode 100644 doc/bugs/Watcher_crashed__58___.git__92__annex__92__objects__92__...sha256....pdf__92____58___openTempFile__58___does_not_exist/comment_3_1ef917c10f944e6c874aa40affae7602._comment create mode 100644 doc/bugs/Watcher_crashed_in_Android_on___47__storage__47__sdcard1_-_bug__63__.mdwn create mode 100644 doc/bugs/Watcher_crashed_in_Android_on___47__storage__47__sdcard1_-_bug__63__/comment_1_71b052be40fbdaca09ca3ede8c59ac7a._comment create mode 100644 doc/bugs/Watcher_crashed_in_Android_on___47__storage__47__sdcard1_-_bug__63__/comment_3_0f7cc02e0193c969c9b6ceb27e71af8a._comment create mode 100644 doc/bugs/Watcher_crashed_in_Android_on___47__storage__47__sdcard1_-_bug__63__/comment_3_1a7542249b9c37507126e97441057c12._comment create mode 100644 doc/bugs/Webapp_won__180__t_start_on_MacOS.mdwn create mode 100644 doc/bugs/Webapp_won__180__t_start_on_MacOS/comment_1_0a8b46efd3f6b7c9f818fc64af9a5f4f._comment create mode 100644 doc/bugs/Webapp_won__180__t_start_on_MacOS/comment_2_7eb9cf2b8c7192ae654831cdc0c00253._comment create mode 100644 doc/bugs/Webapp_won__180__t_start_on_MacOS/comment_3_069b107437b6456d027c8d97bc708d48._comment create mode 100644 doc/bugs/Webapp_won__180__t_start_on_MacOS/comment_4_1e944c517796ca29f8870fcf76c9a0d4._comment create mode 100644 doc/bugs/Webapp_won__180__t_start_on_MacOS/comment_5_2c7d2e81cbe943fe9154830fdf958181._comment create mode 100644 doc/bugs/When_--git-dir_is_not_in_--work-tree.mdwn create mode 100644 doc/bugs/Windows__58___Doesn__39__t_want_to_handle_files_with_2_dots_in_filename.mdwn create mode 100644 doc/bugs/Windows__58___Doesn__39__t_want_to_handle_files_with_2_dots_in_filename/comment_1_43f6de166d1811e9f9bd6e6d8b152e05._comment create mode 100644 doc/bugs/Windows__58___The_process_cannot_access_the_file_because_it_is_being_used_by_another_process.mdwn create mode 100644 doc/bugs/Windows__58___The_process_cannot_access_the_file_because_it_is_being_used_by_another_process/comment_1_79c57a6a8c0b100c07d014d8d2b862cb._comment create mode 100644 doc/bugs/Windows__58___The_process_cannot_access_the_file_because_it_is_being_used_by_another_process/comment_2_6242b7aded8b221aba8a5e3e4374238a._comment create mode 100644 doc/bugs/Windows__58___git_annex_get_failed.mdwn create mode 100644 doc/bugs/Windows__58___git_annex_get_failed/comment_2_0866038e64aa20c3b9ba3b3190074293._comment create mode 100644 doc/bugs/Windows__58___git_annex_get_failed/comment_3_22809831226478bac7f9361ad8d0c79d._comment create mode 100644 doc/bugs/Windows__58___git_annex_get_failed/comment_3_8a19ca100d44ab8131e40932f1bcdf29._comment create mode 100644 doc/bugs/Windows__58___git_annex_get_failed/comment_4_b70fa3da7e776a6cd6d8467df30839c9._comment create mode 100644 doc/bugs/Windows__58___support_NTFS_symlinks.mdwn create mode 100644 doc/bugs/Windows___58___git-annex__58___failed_to_read_sha_from_git_write-tree.mdwn create mode 100644 doc/bugs/Windows___58___git-annex__58___failed_to_read_sha_from_git_write-tree/comment_1_5829b551f5e1413ee236055eb3345760._comment create mode 100644 doc/bugs/Windows___58___git-annex__58___failed_to_read_sha_from_git_write-tree/comment_2_535016130f3307c8104168e6bb8a583d._comment create mode 100644 doc/bugs/Windows___58___git-annex__58___failed_to_read_sha_from_git_write-tree/comment_3_79c66569c22a1280b807a3c21c2cdc4f._comment create mode 100644 doc/bugs/Windows___58___git-annex__58___failed_to_read_sha_from_git_write-tree/comment_4_2e5791aa8f568f86d0185a553227afa8._comment create mode 100644 doc/bugs/Windows_build_test_failures.mdwn create mode 100644 doc/bugs/Windows_build_test_failures/comment_1_ea7523fdbafdc8be2971df52d9038826._comment create mode 100644 doc/bugs/Windows_installer_includes_curl_and_wget__44___but_not_required_DLLs.mdwn create mode 100644 doc/bugs/Windows_installer_includes_curl_and_wget__44___but_not_required_DLLs/comment_1_a7bf0f027f2209e5632e292afd7214d0._comment create mode 100644 doc/bugs/Wrong_permission_when_using_shared_repository.mdwn create mode 100644 doc/bugs/Wrong_permission_when_using_shared_repository/comment_1_bfcb858bfd1c5377c2b15961b59a835a._comment create mode 100644 doc/bugs/Wrong_permission_when_using_shared_repository/comment_2_e3c9e3b9004f1fe964b23d955083089b._comment create mode 100644 doc/bugs/__34__.git__47__HEAD__58___openFile__58___resource_busy__34___after_copy.mdwn create mode 100644 doc/bugs/__34__.git__47__HEAD__58___openFile__58___resource_busy__34___after_copy/comment_1_b05e0060d503a1d58c972796c5be151b._comment create mode 100644 doc/bugs/__34__.git__47__HEAD__58___openFile__58___resource_busy__34___after_copy/comment_2_399dcbe7f3772526efbe13bd5b13156d._comment create mode 100644 doc/bugs/__34__.git__47__HEAD__58___openFile__58___resource_busy__34___after_copy/comment_3_201c7dcd0e809cb2c22ab4b621079c71._comment create mode 100644 doc/bugs/__34__Missing_location__34___with_partsize__39__d_uploads.mdwn create mode 100644 doc/bugs/__34__Missing_location__34___with_partsize__39__d_uploads/comment_1_b3b767b3ab4a73590bf7e2af8640f906._comment create mode 100644 doc/bugs/__34__Unsupported_url_scheme__34___message_when_trying_to_cconnect_to_ftp_server.mdwn create mode 100644 doc/bugs/__34__Unsupported_url_scheme__34___message_when_trying_to_cconnect_to_ftp_server/comment_1_db2b9e26bc01abbc3312731b95cf770f._comment create mode 100644 doc/bugs/__34__commitBuffer__58___invalid_argument___40__invalid_character__41____34___during___34__git_annex_sync__34__.mdwn create mode 100644 doc/bugs/__34__directory__34___special_remote_leaves_empty_dirs.mdwn create mode 100644 doc/bugs/__34__directory__34___special_remote_leaves_empty_dirs/comment_1_8cef8650103d118fbbe56d20a4f59f96._comment create mode 100644 doc/bugs/__34__error__58___invalid_object__34____44___after_add__59___cannot_commit.mdwn create mode 100644 doc/bugs/__34__error__58___invalid_object__34____44___after_add__59___cannot_commit/comment_10_8abfe7417167df54b686960319465a65._comment create mode 100644 doc/bugs/__34__error__58___invalid_object__34____44___after_add__59___cannot_commit/comment_11_7776659e257a97c9a3855c8ad008207a._comment create mode 100644 doc/bugs/__34__error__58___invalid_object__34____44___after_add__59___cannot_commit/comment_12_e8bbfb4eb26dae31f90a5fa53b4dc948._comment create mode 100644 doc/bugs/__34__error__58___invalid_object__34____44___after_add__59___cannot_commit/comment_13_aee32c53d2198ba1e82acd0c617d517c._comment create mode 100644 doc/bugs/__34__error__58___invalid_object__34____44___after_add__59___cannot_commit/comment_14_f41116524fb7b423ff03c9440b5f278b._comment create mode 100644 doc/bugs/__34__error__58___invalid_object__34____44___after_add__59___cannot_commit/comment_15_0f61544accba5002edef2bcd4131e69f._comment create mode 100644 doc/bugs/__34__error__58___invalid_object__34____44___after_add__59___cannot_commit/comment_16_9dc2f74dc69ccf867ac4e68cc502fda4._comment create mode 100644 doc/bugs/__34__error__58___invalid_object__34____44___after_add__59___cannot_commit/comment_17_0525b887cd75c183a34de0f486ec022c._comment create mode 100644 doc/bugs/__34__error__58___invalid_object__34____44___after_add__59___cannot_commit/comment_18_fd55979b686b5f83ba2b95300abd1852._comment create mode 100644 doc/bugs/__34__error__58___invalid_object__34____44___after_add__59___cannot_commit/comment_19_bdd9e29413f4407207efa01283ad68ad._comment create mode 100644 doc/bugs/__34__error__58___invalid_object__34____44___after_add__59___cannot_commit/comment_1_2a64a2da445a64149da7335f35142a08._comment create mode 100644 doc/bugs/__34__error__58___invalid_object__34____44___after_add__59___cannot_commit/comment_20_f12f7f14ef09fa765c78dbeef809da7d._comment create mode 100644 doc/bugs/__34__error__58___invalid_object__34____44___after_add__59___cannot_commit/comment_21_3f2ce7b851392ad5285e95f3857d0959._comment create mode 100644 doc/bugs/__34__error__58___invalid_object__34____44___after_add__59___cannot_commit/comment_22_94dc1d1485c3a380fe19dabe8f95aac2._comment create mode 100644 doc/bugs/__34__error__58___invalid_object__34____44___after_add__59___cannot_commit/comment_2_decb1689b8cc2541077e2d0ae273b5e7._comment create mode 100644 doc/bugs/__34__error__58___invalid_object__34____44___after_add__59___cannot_commit/comment_3_1f6443e495cc16a13e2e4175e73dc8f1._comment create mode 100644 doc/bugs/__34__error__58___invalid_object__34____44___after_add__59___cannot_commit/comment_4_522020e71393434834def6c80b82e39e._comment create mode 100644 doc/bugs/__34__error__58___invalid_object__34____44___after_add__59___cannot_commit/comment_5_cc4cba022869b32d298cdafed9545a34._comment create mode 100644 doc/bugs/__34__error__58___invalid_object__34____44___after_add__59___cannot_commit/comment_6_e71b251db2ff1f52a40fec40303cdefc._comment create mode 100644 doc/bugs/__34__error__58___invalid_object__34____44___after_add__59___cannot_commit/comment_7_0b6413f9ca403be3d83bb3306d1e7f8f._comment create mode 100644 doc/bugs/__34__error__58___invalid_object__34____44___after_add__59___cannot_commit/comment_8_f951981f0bf8cbaecfc46e7b9c903d70._comment create mode 100644 doc/bugs/__34__error__58___invalid_object__34____44___after_add__59___cannot_commit/comment_9_7c98c8b291fdf28a09ccb6c7e4001d5a._comment create mode 100644 doc/bugs/__34__git_annex_adjust__34___does_not_respect_utf8_in_the_commit_author_field.mdwn create mode 100644 doc/bugs/__34__git_annex_adjust__34___does_not_respect_utf8_in_the_commit_author_field/comment_1_6708d83b96b791e4cd829bb0a65cda6d._comment create mode 100644 doc/bugs/__34__git_annex_adjust__34___does_not_respect_utf8_in_the_commit_author_field/comment_2_d28894bc233987f68159e8d1a7a97096._comment create mode 100644 doc/bugs/__34__git_status__34___thread_blocked_indefinitely_in_an_MVar_operation.mdwn create mode 100644 doc/bugs/__34__git_status__34___thread_blocked_indefinitely_in_an_MVar_operation/comment_1_a63994b33b651dccfd4d4cf946ab7170._comment create mode 100644 doc/bugs/__34__git_status__34___thread_blocked_indefinitely_in_an_MVar_operation/comment_2_2166a985e48a31c1b86cb77263f72ce2._comment create mode 100644 doc/bugs/__34__git_status__34___thread_blocked_indefinitely_in_an_MVar_operation/comment_3_17b96f95f44a04063f5a52d690d96b32._comment create mode 100644 doc/bugs/__34__git_status__34___thread_blocked_indefinitely_in_an_MVar_operation/comment_4_df73b69e651c728943a404223f350ebf._comment create mode 100644 doc/bugs/__34__invalid_object__34___errors_cropping_up.mdwn create mode 100644 doc/bugs/__34__invalid_object__34___errors_cropping_up/comment_1_d146a64ef8d76c2a7e45bf85d8943456._comment create mode 100644 doc/bugs/__34__invalid_object__34___errors_cropping_up/comment_2_6585b15aa7ae63175482d08b2b5b79fc._comment create mode 100644 doc/bugs/__34__invalid_object__34___errors_cropping_up/comment_3_973d90a6fde1c6f26fcf594610693fad._comment create mode 100644 doc/bugs/__34__metadata_only__34___git-remote-gcrypt_syncing_files_anyway.mdwn create mode 100644 doc/bugs/__34__metadata_only__34___git-remote-gcrypt_syncing_files_anyway/comment_1_30a0a715fb9d8738e5ec53296375c1b3._comment create mode 100644 doc/bugs/__34__metadata_only__34___git-remote-gcrypt_syncing_files_anyway/comment_2_b91f9337b7ed536539bb3236b7552d82._comment create mode 100644 doc/bugs/__34__metadata_only__34___git-remote-gcrypt_syncing_files_anyway/comment_3_79268506a1653220ddfbb45f9c61d8a7._comment create mode 100644 doc/bugs/__34__no_such_file_or_directory__34___when_using_bundle/comment_1_9c2410c55154bc8d9f733377cde58eb9._comment create mode 100644 doc/bugs/__34__rename__58___permission_denied__34__.mdwn create mode 100644 doc/bugs/__34__rename__58___permission_denied__34__/comment_1_19de24208042d09572c114bca80f4854._comment create mode 100644 doc/bugs/__34__rename__58___permission_denied__34__/comment_2_e70c8b8192eb0f8868e52dc7a287e526._comment create mode 100644 doc/bugs/__39__Production__39___build_doesn__39__t_pass_testsuite_on_Win32.mdwn create mode 100644 doc/bugs/__39__Production__39___build_doesn__39__t_pass_testsuite_on_Win32/comment_1_7ac6938faef9111da701080a62c4d7e9._comment create mode 100644 doc/bugs/__39__add__39___results_in_max_cpu__44___long_run_and_huge_repo.mdwn create mode 100644 doc/bugs/__39__add__39___results_in_max_cpu__44___long_run_and_huge_repo/comment_1_3233c29405da296360d57af7d5eb418d._comment create mode 100644 doc/bugs/__39__git_annex_assist__39___doesn__39__t_honor_--jobs.mdwn create mode 100644 doc/bugs/__39__git_annex_assist__39___doesn__39__t_honor_--jobs/comment_1_96b3c705c7c83b153cde2e8bb16ed380._comment create mode 100644 doc/bugs/__47__exe__47__git-annex.mdwn create mode 100644 doc/bugs/__47__exe__47__git-annex/comment_1_8a9e9d83a3dcf07ed76a22f03636f6d1._comment create mode 100644 doc/bugs/__47__exe__47__git-annex/comment_2_381ac4e8b27343cdc470584c05edec76._comment create mode 100644 doc/bugs/__91__meta__93___ikiwiki_is___42__slow__42__.mdwn create mode 100644 doc/bugs/__91__meta__93___ikiwiki_is___42__slow__42__/comment_1_3afce2aadeb2221c66f397e631d0e4a6._comment create mode 100644 doc/bugs/__91__meta__93___ikiwiki_is___42__slow__42__/comment_2_220b3ed61dfcce4d6d33fa8516cd1ec1._comment create mode 100644 doc/bugs/__91__meta__93___ikiwiki_is___42__slow__42__/comment_3_8fb126d6583014d3e16137e9c18057e6._comment create mode 100644 doc/bugs/__91__meta__93___ikiwiki_is___42__slow__42__/comment_4_72204d0647ec808145b6838d5e621107._comment create mode 100644 doc/bugs/__96__git_add__96___adds_files_unlocked_instead_of_locked.mdwn create mode 100644 doc/bugs/__96__git_add__96___adds_files_unlocked_instead_of_locked/comment_1_58abf8693ed90fc8c6e3f750310c17e4._comment create mode 100644 doc/bugs/__96__git_annex_info__96___hangs_with_git_special_remote.mdwn create mode 100644 doc/bugs/__96__git_annex_info__96___hangs_with_git_special_remote/comment_1_e3bc14a173600b86c5875d90228aea8b._comment create mode 100644 doc/bugs/__96__git_annex_info__96___hangs_with_git_special_remote/comment_2_9274223b32601ead9a508aa9852e4933._comment create mode 100644 doc/bugs/__96__git_annex_info__96___hangs_with_git_special_remote/comment_3_8f46a9d4a7ceae80e378149d88dd1f19._comment create mode 100644 doc/bugs/__96__git_annex_info__96___hangs_with_git_special_remote/comment_4_c3130a2595fc35525dfdbcc6cec57713._comment create mode 100644 doc/bugs/__96__git_annex_info__96___hangs_with_git_special_remote/comment_5_eeb4f35b7609cb36fdcece9b8cb94430._comment create mode 100644 doc/bugs/__96__git_annex_info__96___hangs_with_git_special_remote/comment_6_ee21d4d8b276a32b227199175ea30721._comment create mode 100644 doc/bugs/__96__git_annex_info__96___hangs_with_git_special_remote/comment_7_9104e12c57bc47cfd0a6c109ad085de1._comment create mode 100644 doc/bugs/__96__git_annex_info__96___hangs_with_git_special_remote/comment_8_c5b96e6c35c8969062489d6e03066f34._comment create mode 100644 doc/bugs/__96__git_annex_sync___60__REMOTE__62____96___swallows_network_failure.mdwn create mode 100644 doc/bugs/__96__lookupkey__96___unexpectedly_slow.mdwn create mode 100644 doc/bugs/__96__lookupkey__96___unexpectedly_slow/comment_1_13003e3b46c5cfab60b6e34fb18731d7._comment create mode 100644 doc/bugs/__96__sync_-C__96___takes_longer_to_get_file_than___96__get__96__.mdwn create mode 100644 doc/bugs/__96__sync_-C__96___takes_longer_to_get_file_than___96__get__96__/comment_10_43f5ed4a319fcf63387395f32a345852._comment create mode 100644 doc/bugs/__96__sync_-C__96___takes_longer_to_get_file_than___96__get__96__/comment_11_d485bbc1c0f2fceaaa2e4142dccdc1f7._comment create mode 100644 doc/bugs/__96__sync_-C__96___takes_longer_to_get_file_than___96__get__96__/comment_12_b0132b0f846e4882a5511b53694a1fa2._comment create mode 100644 doc/bugs/__96__sync_-C__96___takes_longer_to_get_file_than___96__get__96__/comment_1_fa2fb2493ea1244f334b54e6af2b553b._comment create mode 100644 doc/bugs/__96__sync_-C__96___takes_longer_to_get_file_than___96__get__96__/comment_2_ccd90a2ad9cb9c896a47d62ecdfc5304._comment create mode 100644 doc/bugs/__96__sync_-C__96___takes_longer_to_get_file_than___96__get__96__/comment_3_c7e71722379431789f26b5e743e13d9c._comment create mode 100644 doc/bugs/__96__sync_-C__96___takes_longer_to_get_file_than___96__get__96__/comment_4_f730f3593ab5aeac34e74ec48f943949._comment create mode 100644 doc/bugs/__96__sync_-C__96___takes_longer_to_get_file_than___96__get__96__/comment_5_934ee22209920f8429c0ac71002bab1e._comment create mode 100644 doc/bugs/__96__sync_-C__96___takes_longer_to_get_file_than___96__get__96__/comment_6_1611ef71978eeb61da4c42cffcff2411._comment create mode 100644 doc/bugs/__96__sync_-C__96___takes_longer_to_get_file_than___96__get__96__/comment_7_6700aabc3b4cb02a5b370cf4c71c6a0c._comment create mode 100644 doc/bugs/__96__sync_-C__96___takes_longer_to_get_file_than___96__get__96__/comment_7_a0b287e187396b7072e4d7bab3664621._comment create mode 100644 doc/bugs/__96__sync_-C__96___takes_longer_to_get_file_than___96__get__96__/comment_8_0b4e0acecbcc6a8736849801446a189c._comment create mode 100644 doc/bugs/____adjusted_branch_subtree_regression__58___FAIL_.mdwn create mode 100644 doc/bugs/____adjusted_branch_subtree_regression__58___FAIL_/comment_1_2b2040240fe8f01a6348eb68959d9319._comment create mode 100644 doc/bugs/_git-annex__58___bad_url_ssh__58____47____47__git__64__gitlab.com__58____126____47__gitlabname__47__reponame.git.mdwn create mode 100644 doc/bugs/_git-annex__58___bad_url_ssh__58____47____47__git__64__gitlab.com__58____126____47__gitlabname__47__reponame.git/comment_1_60db0d6bfc71a62b3c1021527a8d2d60._comment create mode 100644 doc/bugs/_git-annex__58___bad_url_ssh__58____47____47__git__64__gitlab.com__58____126____47__gitlabname__47__reponame.git/comment_2_49682a91147990a578929678880bd226._comment create mode 100644 doc/bugs/_git-annex__58___bad_url_ssh__58____47____47__git__64__gitlab.com__58____126____47__gitlabname__47__reponame.git/comment_3_bf0fa06596338444a3772d1865b17e26._comment create mode 100644 doc/bugs/acl_not_honoured_in_rsync_remote.mdwn create mode 100644 doc/bugs/acl_not_honoured_in_rsync_remote/comment_1_aa6fe1d7b029eae7ee71c97e0f0937a6._comment create mode 100644 doc/bugs/acl_not_honoured_in_rsync_remote/comment_2_ffb9424e966ee10a4fe2d446b3042cb2._comment create mode 100644 doc/bugs/acl_not_honoured_in_rsync_remote/comment_3_f93177593a2d90627672647fd5f065c9._comment create mode 100644 doc/bugs/adb_creates_empty_commits_on_import__47__sync.mdwn create mode 100644 doc/bugs/adb_creates_empty_commits_on_import__47__sync/comment_10_87efdd2a9c7091f92a6bc96e87a59e18._comment create mode 100644 doc/bugs/adb_creates_empty_commits_on_import__47__sync/comment_11_206d98a17319292d4de4c475a7b8d091._comment create mode 100644 doc/bugs/adb_creates_empty_commits_on_import__47__sync/comment_1_522c68d019e5db592e140db9501435ba._comment create mode 100644 doc/bugs/adb_creates_empty_commits_on_import__47__sync/comment_2_5000af944e3a7917a97b65fb7d1c5c3e._comment create mode 100644 doc/bugs/adb_creates_empty_commits_on_import__47__sync/comment_3_a9b3e07f180ab97f5025d7ce9ca58c05._comment create mode 100644 doc/bugs/adb_creates_empty_commits_on_import__47__sync/comment_4_4e9e55d54d9afb2dbb48320156757f11._comment create mode 100644 doc/bugs/adb_creates_empty_commits_on_import__47__sync/comment_4_d500b9ae8e3f57a2f8dcd2314c0022dd._comment create mode 100644 doc/bugs/adb_creates_empty_commits_on_import__47__sync/comment_6_aafa4a00a9579e54c3080586c1b7bb3e._comment create mode 100644 doc/bugs/adb_creates_empty_commits_on_import__47__sync/comment_7_f1e37aa68778408629c53c09f0a0857f._comment create mode 100644 doc/bugs/adb_creates_empty_commits_on_import__47__sync/comment_8_0a7f24a4567ff934cee37a4c0224f000._comment create mode 100644 doc/bugs/adb_creates_empty_commits_on_import__47__sync/comment_9_9b4d104a7255a7618221f9dbb410fdcb._comment create mode 100644 doc/bugs/adb_pull_does_not_preserve_timestamp.mdwn create mode 100644 doc/bugs/adb_pull_does_not_preserve_timestamp/comment_1_b695826d1f948249b496c055b4d745df._comment create mode 100644 doc/bugs/adb_pull_does_not_preserve_timestamp/comment_2_2d49693c5f8d826f9a4b1cf2f8dca2c5._comment create mode 100644 doc/bugs/adb_pull_does_not_preserve_timestamp/comment_3_cf555d2f0f93248a913014f30ce513b2._comment create mode 100644 doc/bugs/adb_pull_does_not_preserve_timestamp/comment_4_9d5cbd2479a07d778bacfdfe0aaaa524._comment create mode 100644 doc/bugs/adb_pull_does_not_preserve_timestamp/comment_5_244a5803178b4e44f3ec4460c5daf258._comment create mode 100644 doc/bugs/adb_pull_does_not_preserve_timestamp/comment_6_77416807482416c552922d39a0319a65._comment create mode 100644 doc/bugs/adb_pull_does_not_preserve_timestamp/comment_7_216316d2db3a728837fd059587ad1928._comment create mode 100644 doc/bugs/adb_remote_fails_to_import_treeish.mdwn create mode 100644 doc/bugs/adb_remote_fails_to_import_treeish/comment_1_8012368012cf53e8552d7670b9b8315d._comment create mode 100644 doc/bugs/adb_remote_fails_to_import_treeish/comment_2_54867d63c04ee18c76b1d769db71bc00._comment create mode 100644 doc/bugs/adb_remote_fails_to_import_treeish/comment_3_5e819d0b5f3101e86f0f95a7ab725ad4._comment create mode 100644 doc/bugs/adb_replaces_symlinks_by_plain_text_files.mdwn create mode 100644 doc/bugs/adb_replaces_symlinks_by_plain_text_files/comment_1_bcc12b77c5069769ab04e448b23b3d85._comment create mode 100644 doc/bugs/adb_replaces_symlinks_by_plain_text_files/comment_2_f5db61aa7efb7a916d0ffebd563cc2c7._comment create mode 100644 doc/bugs/adb_replaces_symlinks_by_plain_text_files/comment_3_7346adcffb3d9056dc880dcf1e2ab03f._comment create mode 100644 doc/bugs/adb_special_remote_fetches_but_does_not_add_all_files.mdwn create mode 100644 doc/bugs/adb_special_remote_fetches_but_does_not_add_all_files/comment_1_31142cacafa0c975cd33a76c22f60bf3._comment create mode 100644 doc/bugs/adb_special_remote_fetches_but_does_not_add_all_files/comment_2_09f5982e930a04c25ea3ce8caac449c4._comment create mode 100644 doc/bugs/adb_special_remote_fetches_but_does_not_add_all_files/comment_3_3b4100037ee9180346ffc2240a34064e._comment create mode 100644 doc/bugs/add__58___inconsistently_treats_files_in_dotdirs_as_dotfiles.mdwn create mode 100644 doc/bugs/add__58___inconsistently_treats_files_in_dotdirs_as_dotfiles/comment_1_263bfea4cae5a612de1761b3c3fc32b8._comment create mode 100644 doc/bugs/add__58___inconsistently_treats_files_in_dotdirs_as_dotfiles/comment_2_6fbd20761f9388c04fa13b38af2354d9._comment create mode 100644 doc/bugs/add__58___inconsistently_treats_files_in_dotdirs_as_dotfiles/comment_3_e8636243a3c98b11e54b6fa8617f9e32._comment create mode 100644 doc/bugs/add__58___inconsistently_treats_files_in_dotdirs_as_dotfiles/comment_4_27bf6cfce4f73a1d29a753e33c1e871a._comment create mode 100644 doc/bugs/add_config_var_preventing_adjusted_branch_mode.mdwn create mode 100644 doc/bugs/add_config_var_preventing_adjusted_branch_mode/comment_1_d7ca1f4ccb4bc8a72788f6dcf8af9439._comment create mode 100644 doc/bugs/add_config_var_preventing_adjusted_branch_mode/comment_2_0c064717d0b85ff4b9df1bada7c6e7ad._comment create mode 100644 doc/bugs/add_config_var_preventing_adjusted_branch_mode/comment_3_1f4b1f2a32f11da4c9bba95f25dd45c1._comment create mode 100644 doc/bugs/add_config_var_preventing_adjusted_branch_mode/comment_4_0fb992fe4ef5ec14876d2d1912dca4c5._comment create mode 100644 doc/bugs/add_overwrite_race.mdwn create mode 100644 doc/bugs/added_branches_makes___39__git_annex_unused__39___slow.mdwn create mode 100644 doc/bugs/added_branches_makes___39__git_annex_unused__39___slow/comment_1_d350c39c67031c500e3224e92c0029ea._comment create mode 100644 doc/bugs/added_branches_makes___39__git_annex_unused__39___slow/comment_2_b2d2b1caa51ffec3d87c36b373cb8d4a._comment create mode 100644 doc/bugs/added_branches_makes___39__git_annex_unused__39___slow/comment_3_12b20cbbc2b4cd1ab8af7e3eec9589b4._comment create mode 100644 doc/bugs/added_branches_makes___39__git_annex_unused__39___slow/comment_4_a50b43c15d2650df90f0fa1ced47f532._comment create mode 100644 doc/bugs/added_branches_makes___39__git_annex_unused__39___slow/comment_5_7328bc51bd001f2b732a92a2ae175839._comment create mode 100644 doc/bugs/added_branches_makes___39__git_annex_unused__39___slow/comment_6_880ef2ee797221332dbb629b2d55522f._comment create mode 100644 doc/bugs/added_branches_makes___39__git_annex_unused__39___slow/comment_7_826fd82cdf9b1c79c9b555ca26c2c176._comment create mode 100644 doc/bugs/adding_a_remote_server_fails.mdwn create mode 100644 doc/bugs/adding_a_remote_server_fails/comment_1_cf7ea9171f002c5793a882b42d33a77d._comment create mode 100644 doc/bugs/addurl_+_metadata_on_Windows_doesn__39__t_work.mdwn create mode 100644 doc/bugs/addurl_+_metadata_on_Windows_doesn__39__t_work/comment_1_831dc2185919865d418b29cd06ef42be._comment create mode 100644 doc/bugs/addurl_+_metadata_on_Windows_doesn__39__t_work/comment_2_88b7db5434a56c25c75772caa37bc14a._comment create mode 100644 doc/bugs/addurl_--batch_errors_with__git-annex__58___user_error_.mdwn create mode 100644 doc/bugs/addurl_--batch_errors_with__git-annex__58___user_error_/comment_1_996a54315c21e1dcb94cca9576d1d5f7._comment create mode 100644 doc/bugs/addurl_--preserve-filename_still_modifies_file_names.mdwn create mode 100644 doc/bugs/addurl_--preserve-filename_still_modifies_file_names/comment_1_88c0a762e2a37f680f6a4419582eddac._comment create mode 100644 doc/bugs/addurl_--preserve-filename_still_modifies_file_names/comment_2_386891c1effda6cae17d88eacbfa0daf._comment create mode 100644 doc/bugs/addurl_fails_because_special_remote_is_not_available.mdwn create mode 100644 doc/bugs/addurl_fails_because_special_remote_is_not_available/comment_1_7caf2377477495c08378755cdf45dec8._comment create mode 100644 doc/bugs/addurl_fails_because_special_remote_is_not_available/comment_2_83a864a73f9c1c6bf86dc60b47a965fe._comment create mode 100644 doc/bugs/addurl_fails_because_special_remote_is_not_available/comment_3_b0e9f373c3439b15a28fd20e9b0e24a6._comment create mode 100644 doc/bugs/addurl_unittest_failing_under_windows.mdwn create mode 100644 doc/bugs/addurl_unittest_failing_under_windows/comment_1_8f723e986d80754a8b68308ab8b15c20._comment create mode 100644 doc/bugs/addurl_unittest_failing_under_windows/comment_2_e0bbb72af2852b2210bb1ce520e88f1d._comment create mode 100644 doc/bugs/adjusted__40__unlocked__41___does_not_honor_addunlocked.mdwn create mode 100644 doc/bugs/adjusted__47__main__40__unlocked__41___not_syncing_with_main.mdwn create mode 100644 doc/bugs/adjusted__47__main__40__unlocked__41___not_syncing_with_main/comment_1_e5ebc1cf8621761b559d53884731d0e3._comment create mode 100644 doc/bugs/adjusted__47__main__40__unlocked__41___not_syncing_with_main/comment_2_149502c4d8fa2c50507e7e6e312f9703._comment create mode 100644 doc/bugs/after_adjust_--unlock_implies__44___a_lot_of_files_are_reported_as_modified.mdwn create mode 100644 doc/bugs/after_adjust_--unlock_implies__44___a_lot_of_files_are_reported_as_modified/comment_10_8a355d509fb2005cfd9da8f2d4bb560e._comment create mode 100644 doc/bugs/after_adjust_--unlock_implies__44___a_lot_of_files_are_reported_as_modified/comment_11_ee707efce9c5537a1f7d0ffded952af8._comment create mode 100644 doc/bugs/after_adjust_--unlock_implies__44___a_lot_of_files_are_reported_as_modified/comment_1_0fcdba2f621c8c32f09b2633c11266ee._comment create mode 100644 doc/bugs/after_adjust_--unlock_implies__44___a_lot_of_files_are_reported_as_modified/comment_2_4719510b78d347f28a0fe8910c086982._comment create mode 100644 doc/bugs/after_adjust_--unlock_implies__44___a_lot_of_files_are_reported_as_modified/comment_3_05f178a19b8949efc5c6e189ff8fa5e0._comment create mode 100644 doc/bugs/after_adjust_--unlock_implies__44___a_lot_of_files_are_reported_as_modified/comment_4_ad4621b602e7632d74d58f1728b80cda._comment create mode 100644 doc/bugs/after_adjust_--unlock_implies__44___a_lot_of_files_are_reported_as_modified/comment_5_fcb259337b70b0d5c5e50c8facb845e4._comment create mode 100644 doc/bugs/after_adjust_--unlock_implies__44___a_lot_of_files_are_reported_as_modified/comment_6_1df979b8e222dd135a10046c51f0dc0b._comment create mode 100644 doc/bugs/after_adjust_--unlock_implies__44___a_lot_of_files_are_reported_as_modified/comment_7_5e3482024e20759f8d42e14598d4dc26._comment create mode 100644 doc/bugs/after_adjust_--unlock_implies__44___a_lot_of_files_are_reported_as_modified/comment_8_4e9f342281b01ecb9354a08200c04ab0._comment create mode 100644 doc/bugs/after_adjust_--unlock_implies__44___a_lot_of_files_are_reported_as_modified/comment_9_63af8f32512ce8ec07c48361317ce51d._comment create mode 100644 doc/bugs/android_sync_messes_tree.mdwn create mode 100644 doc/bugs/android_sync_messes_tree/comment_1_a90afb9011c760843836728d03353619._comment create mode 100644 doc/bugs/android_sync_messes_tree/comment_2_90d589053c4d1b646edd07978999d001._comment create mode 100644 doc/bugs/android_sync_messes_tree/comment_3_f964c18aced83ba02d3436941dbcbacc._comment create mode 100644 doc/bugs/android_sync_messes_tree/comment_4_1f819796ec13f83e56917332efffe54d._comment create mode 100644 doc/bugs/android_sync_messes_tree/comment_5_7fda943808cc1b7155c1223fea08e8df._comment create mode 100644 doc/bugs/annex.autocommit_seems_ignored_for_new_files.mdwn create mode 100644 doc/bugs/annex.thin_can_cause_corrupt___40__not_just_missing__41___data.mdwn create mode 100644 doc/bugs/annex.thin_can_cause_corrupt___40__not_just_missing__41___data/comment_1_d02a1e53cb95b0cb3c4330c668bcb15b._comment create mode 100644 doc/bugs/annex.thin_can_cause_corrupt___40__not_just_missing__41___data/comment_2_a6806787dc0163f67dc141415c951add._comment create mode 100644 doc/bugs/annex_add_freezes_before_moving__58___stopped_working.mdwn create mode 100644 doc/bugs/annex_add_freezes_before_moving__58___stopped_working/comment_1_b3c780a6f888c8afc3bd5cd7d436527c._comment create mode 100644 doc/bugs/annex_add_freezes_before_moving__58___stopped_working/comment_2_97df39b9fed0e9bb716b1940c0641140._comment create mode 100644 doc/bugs/annex_add_freezes_before_moving__58___stopped_working/comment_3_db0070d2b601e66aca3059248cc24bbb._comment create mode 100644 doc/bugs/annex_get__stalls_over_ssh.mdwn create mode 100644 doc/bugs/annex_get__stalls_over_ssh/comment_1_335a8901b7992c2041eabed3785a25e0._comment create mode 100644 doc/bugs/annex_import_does_not_account_for_versioning_on_S3.mdwn create mode 100644 doc/bugs/annex_import_does_not_account_for_versioning_on_S3/comment_1_a04fbb936785456ed99512ea4c29fd53._comment create mode 100644 doc/bugs/annex_import_does_not_account_for_versioning_on_S3/comment_2_6015c5488e69307424a3c0281b50a49e._comment create mode 100644 doc/bugs/annex_remotedaemon_100__37___cpu_hungry.mdwn create mode 100644 doc/bugs/annex_sync_silently_resets_master_to_previous_sync.mdwn create mode 100644 doc/bugs/annex_sync_silently_resets_master_to_previous_sync/comment_1_84346dcb210b86e86bd474820bb5f494._comment create mode 100644 doc/bugs/annex_sync_silently_resets_master_to_previous_sync/comment_2_c420c76e5aebb1339f4c478b4d56d5de._comment create mode 100644 doc/bugs/annex_sync_silently_resets_master_to_previous_sync/comment_3_80d241b2654856669d82d1ab5de40c00._comment create mode 100644 doc/bugs/annex_tries_to_start_old_binaray.mdwn create mode 100644 doc/bugs/annex_tries_to_start_old_binaray/comment_1_209c36b737a48a6136eeb85d1f3d01b3._comment create mode 100644 doc/bugs/annex_unannex__47__uninit_should_handle_copies.mdwn create mode 100644 doc/bugs/annex_unannex__47__uninit_should_handle_copies/comment_1_c896ff6589f62178b60e606771e4f2bf._comment create mode 100644 doc/bugs/annex_unannex__47__uninit_should_handle_copies/comment_2_9249609f83f8e9c7521cd2f007c1a39e._comment create mode 100644 doc/bugs/apparent_hang_in_git-annex-smudge.mdwn create mode 100644 doc/bugs/apparent_hang_in_git-annex-smudge/comment_1_80e24b74572d50f648d8aaae228b8827._comment create mode 100644 doc/bugs/aria2c_display_broken_in_git-annex.mdwn create mode 100644 doc/bugs/aria2c_display_broken_in_git-annex/comment_1_770e1d657bba2a3f5782eac2e8bdca57._comment create mode 100644 doc/bugs/aria2c_display_broken_in_git-annex/comment_2_2f26037c5a67f6f8928204ab0b7b7965._comment create mode 100644 doc/bugs/assistant_--autostop_stops_after_nonexistant_repo.mdwn create mode 100644 doc/bugs/assistant___40__webapp__41___commited_unlocked_link_to_annex.mdwn create mode 100644 doc/bugs/assistant_bails_when_adding_encrypted_usbdrive_repo_on_mac.mdwn create mode 100644 doc/bugs/assistant_bails_when_adding_encrypted_usbdrive_repo_on_mac/comment_1_4ea192e57f86a33087997746722e6acf._comment create mode 100644 doc/bugs/assistant_bails_when_adding_encrypted_usbdrive_repo_on_mac/comment_2_622ad5b34780fc8468c5c515ad9f27fa._comment create mode 100644 doc/bugs/assistant_cannot_sync_files_to_empty_indirect_repo.mdwn create mode 100644 doc/bugs/assistant_cannot_sync_files_to_empty_indirect_repo/comment_1_af9b44674bafb63de05b888b90878325._comment create mode 100644 doc/bugs/assistant_cannot_sync_files_to_empty_indirect_repo/comment_2_789149eb53162a11cbafde399215e40e._comment create mode 100644 doc/bugs/assistant_committer_crashes_due_to_missing_file.mdwn create mode 100644 doc/bugs/assistant_does_not_allow_adding_an_existing_repo.mdwn create mode 100644 doc/bugs/assistant_does_not_allow_adding_an_existing_repo/comment_1_87e84d56d56abefe8cac8a52b76c9003._comment create mode 100644 doc/bugs/assistant_does_not_allow_adding_an_existing_repo/comment_2_55fcf44eefe6abac3f61a14e9ce9206c._comment create mode 100644 doc/bugs/assistant_does_not_always_use_repo_cost_info_when_queueing_downloads.mdwn create mode 100644 doc/bugs/assistant_doesn__39__t_notice_changes_to_gitignore_files.mdwn create mode 100644 doc/bugs/assistant_doesn__39__t_sync_empty_directories.mdwn create mode 100644 doc/bugs/assistant_doesn__39__t_sync_empty_directories/comment_1_78a3bde607f43c0f518bd2d3d7196022._comment create mode 100644 doc/bugs/assistant_doesn__39__t_sync_empty_directories/comment_2_83777384b72732b1d0a19b32686d3d1f._comment create mode 100644 doc/bugs/assistant_doesn__39__t_sync_empty_directories/comment_3_f9b2a700c060707fae1bcb2ec0e4e4dc._comment create mode 100644 doc/bugs/assistant_doesn__39__t_sync_empty_directories/comment_4_014d213a959dd7993bdd247722a8817e._comment create mode 100644 doc/bugs/assistant_doesn__39__t_sync_empty_directories/comment_5_440f349781d7d9ca2d1ed81386f7dd26._comment create mode 100644 doc/bugs/assistant_doesn__39__t_sync_file_permissions.mdwn create mode 100644 doc/bugs/assistant_doesn__39__t_sync_file_permissions/comment_1_fc8d3ea209a2ab39c1aeff52452d4c58._comment create mode 100644 doc/bugs/assistant_doesn__39__t_sync_file_permissions/comment_2_1a364c422e0dd7418f74e1cc3d543a3c._comment create mode 100644 doc/bugs/assistant_doesn__39__t_sync_file_permissions/comment_3_4d5ae51b4c7e6177d934d7c9f21b912c._comment create mode 100644 doc/bugs/assistant_doesn__39__t_sync_file_permissions/comment_4_ec7b491ad3c9a1f253d886682bff8b82._comment create mode 100644 doc/bugs/assistant_doesn__39__t_sync_file_permissions/comment_5_e04ddcd7a3d260c1dac54e41911bb4bc._comment create mode 100644 doc/bugs/assistant_doesn__39__t_sync_file_permissions/comment_6_13db3474113b157b7431eb1c835e5814._comment create mode 100644 doc/bugs/assistant_doesn__39__t_sync_file_permissions/comment_7_3cc6eeb8eae14ac3727b1e420f96ee7d._comment create mode 100644 doc/bugs/assistant_expensive_scan_unnecessarily_queues_files.mdwn create mode 100644 doc/bugs/assistant_expensive_scan_unnecessarily_queues_files/comment_1_bc874e077009b81ab36a6d43d793030a._comment create mode 100644 doc/bugs/assistant_expensive_scan_unnecessarily_queues_files/comment_2_a7e9d8ec500399dd6794e168f85e6a5c._comment create mode 100644 doc/bugs/assistant_expensive_scan_unnecessarily_queues_files/comment_3_a0824e00f04f95c39823f29d6c76e7fe._comment create mode 100644 doc/bugs/assistant_locked_my_files.mdwn create mode 100644 doc/bugs/assistant_locked_my_files/comment_1_74ee7ea12df7bfbb44c9d0485f787b73._comment create mode 100644 doc/bugs/assistant_memory_leak.mdwn create mode 100644 doc/bugs/assistant_not_synching_with_content.mdwn create mode 100644 doc/bugs/assistant_should_set_up_dedicated_ssh_keys_for_remotes_using_the_standalone_tarball.mdwn create mode 100644 doc/bugs/assistant_sometimes_does_not_merge_changes_from_remote.mdwn create mode 100644 doc/bugs/assistant_sometimes_does_not_merge_changes_from_remote/comment_1_43bae1f11621232a9133cdef21d1f063._comment create mode 100644 doc/bugs/assistant_sometimes_removes_and_re-adds_whole_file.mdwn create mode 100644 doc/bugs/assistant_sometimes_removes_and_re-adds_whole_file/comment_1_52a4748fda6682e6e667501726fd05c6._comment create mode 100644 doc/bugs/available_space_miscomputed_on_large_macOS_volume.mdwn create mode 100644 doc/bugs/available_space_miscomputed_on_large_macOS_volume/comment_1_cb1e92ef1412e68c12f6a1c9a10a7414._comment create mode 100644 doc/bugs/backend_option_for_init_is_in_no_effect__63__.mdwn create mode 100644 doc/bugs/backend_option_for_init_is_in_no_effect__63__/comment_1_6b40b5ea277d8e28f0b632701a776587._comment create mode 100644 doc/bugs/bare_remote_is_not_automatically_synced_to_local_repo.mdwn create mode 100644 doc/bugs/bare_remote_is_not_automatically_synced_to_local_repo/comment_1_66ffaa679ba0fe86bba114fd9cdc5a53._comment create mode 100644 doc/bugs/bare_remote_is_not_automatically_synced_to_local_repo/comment_2_a7617cc63584dafb16bdc9373fb1e304._comment create mode 100644 doc/bugs/bare_remote_is_not_automatically_synced_to_local_repo/comment_3_ecb57e72c0bf583d1c3461313a83c4f2._comment create mode 100644 doc/bugs/bare_remote_is_not_automatically_synced_to_local_repo/comment_4_bf0e16f9181438c2050521c5ff5bb7d0._comment create mode 100644 doc/bugs/bare_remote_is_not_automatically_synced_to_local_repo/comment_5_aeea3ff59c8493c87c313fbaf7614f20._comment create mode 100644 doc/bugs/bare_remote_safe_directory.mdwn create mode 100644 doc/bugs/batch_commands_miss_journalled_changes_made_while_running.mdwn create mode 100644 doc/bugs/be_consistent_with_git_in_handling_http__58____47____47___with___58___.mdwn create mode 100644 doc/bugs/be_consistent_with_git_in_handling_http__58____47____47___with___58___/comment_1_c41e4999eb41846eb841b6ce9802b77b._comment create mode 100644 doc/bugs/bla__47__.git__47__annex__47__transfer__47__failed__47__download__47__...tmp__58___rename__58___resource_exhausted___40__No_space_left_on_device__41__.mdwn create mode 100644 doc/bugs/bla__47__.git__47__annex__47__transfer__47__failed__47__download__47__...tmp__58___rename__58___resource_exhausted___40__No_space_left_on_device__41__/comment_1_644835e95676da0aa38737b3419022e2._comment create mode 100644 doc/bugs/blake3_hash_support.mdwn create mode 100644 doc/bugs/blake3_hash_support/comment_1_723a531dad2df722514a7cbf1b8e0d8a._comment create mode 100644 doc/bugs/blake3_hash_support/comment_2_7be0932328ba4f49c33b0ab14429a283._comment create mode 100644 doc/bugs/blake3_hash_support/comment_3_a28c55a1d6158e301cc63d6087d8ab0e._comment create mode 100644 doc/bugs/blake3_hash_support/comment_4_3ef2af8eb62a81299e49a3b7dccd337e._comment create mode 100644 doc/bugs/broken_repo_when_inodes_exhausted.mdwn create mode 100644 doc/bugs/broken_repo_when_inodes_exhausted/comment_1_8ccfac4cea4c54029b96b436ac2114ed._comment create mode 100644 doc/bugs/broken_repo_when_inodes_exhausted/comment_2_4c6ced0d3163735c7f4bd5a4a7053159._comment create mode 100644 doc/bugs/build_for_OpenBSD_is_outdated.mdwn create mode 100644 doc/bugs/build_for_OpenBSD_is_outdated/comment_1_59d9f99747cd3ba93a87ba634824d4ca._comment create mode 100644 doc/bugs/build_for_OpenBSD_is_outdated/comment_2_cb4f3d710b0c46b27bebed48bd2e9a21._comment create mode 100644 doc/bugs/build_for_OpenBSD_is_outdated/comment_3_99e6c86785c91b8320ec1e7df1e02e2c._comment create mode 100644 doc/bugs/bup_often_errors_out_when_-J___62___1.mdwn create mode 100644 doc/bugs/bup_often_errors_out_when_-J___62___1/comment_1_1731cfb2662890299ca6daeacdd4bb47._comment create mode 100644 doc/bugs/bup_often_errors_out_when_-J___62___1/comment_2_f0f87b7a2c60afba609072566b0048ac._comment create mode 100644 doc/bugs/bup_often_errors_out_when_-J___62___1/comment_3_ca2b909c54a772e1eea58b7cbc07bf39._comment create mode 100644 doc/bugs/bup_often_errors_out_when_-J___62___1/comment_4_d7156224245542f5468783c1b5763154._comment create mode 100644 doc/bugs/bup_often_errors_out_when_-J___62___1/comment_5_90d280582d71f77d75aeedcd30c7c437._comment create mode 100644 doc/bugs/cabal_builds_without_assistant.mdwn create mode 100644 doc/bugs/can__39__t_build_without_assistant.mdwn create mode 100644 doc/bugs/can__39__t_build_without_assistant/comment_1_41b96b4e7f01b79a2e942b8098faa534._comment create mode 100644 doc/bugs/can__39__t_connect_jabber_with_custom_google_apps_domain.mdwn create mode 100644 doc/bugs/can__39__t_connect_jabber_with_custom_google_apps_domain/comment_1_6537e928a0d6d5c41b55370f112f4afb._comment create mode 100644 doc/bugs/can__39__t_connect_jabber_with_custom_google_apps_domain/comment_2_b639ad750a4635d95f6ad16a1aa39a3e._comment create mode 100644 doc/bugs/can__39__t_get.mdwn create mode 100644 doc/bugs/can__39__t_get/comment_1_ef32287828481c161bd913c9db9052a5._comment create mode 100644 doc/bugs/can__39__t_get/comment_2_31fe400f4bac516a5c1101612cb06a54._comment create mode 100644 doc/bugs/can__39__t_get/comment_3_87d123c04815d38abb92f967829c3a23._comment create mode 100644 doc/bugs/can__39__t_get/comment_4_b99cff87dbe38f08f888200dfe7e2436._comment create mode 100644 doc/bugs/cannot___40__or_how__63____41___to_pass_socket_path_with_a_space_in_its_path_via_annex-ssh-options.mdwn create mode 100644 doc/bugs/cannot___40__or_how__63____41___to_pass_socket_path_with_a_space_in_its_path_via_annex-ssh-options/comment_1_d773dee03276e9b0e0b75d0709b76278._comment create mode 100644 doc/bugs/cannot___40__or_how__63____41___to_pass_socket_path_with_a_space_in_its_path_via_annex-ssh-options/comment_2_01cb7ba7d3c19863d39f6fac0d45d235._comment create mode 100644 doc/bugs/cannot_add_a_files_with_an_accent_in_it.mdwn create mode 100644 doc/bugs/cannot_add_a_files_with_an_accent_in_it/comment_1_d465d7f88c8f11b4b636fba56711d745._comment create mode 100644 doc/bugs/cannot_add_a_files_with_an_accent_in_it/comment_2_b6886a5c38725d93630562a3172d1a5c._comment create mode 100644 doc/bugs/cannot_add_a_files_with_an_accent_in_it/comment_3_7c34ada3c7b413f2b622149b60757f6e._comment create mode 100644 doc/bugs/cannot_add_local_readonly_repo_through_the_webapp.mdwn create mode 100644 doc/bugs/cannot_ungroup_a_repository.mdwn create mode 100644 doc/bugs/cannot_ungroup_a_repository/comment_1_5476ceb9af2fa2d862a868824e5865e4._comment create mode 100644 doc/bugs/cannot_ungroup_a_repository/comment_2_0be32bc80e98c0e10b2eb949b20b18dc._comment create mode 100644 doc/bugs/cannot_ungroup_a_repository/comment_3_16f1b5ce3830f9d26df4b14ed666e189._comment create mode 100644 doc/bugs/cannot_ungroup_a_repository/comment_4_bc93a6cb01e7d5d43cccb0eca81b5f33._comment create mode 100644 doc/bugs/chunks_not_deduplicated.mdwn create mode 100644 doc/bugs/chunks_not_deduplicated/comment_1_3890af3669ac6b37b88dac938ed79d16._comment create mode 100644 doc/bugs/commitBuffer__58___invalid_argument___40__invalid_character__41__2.mdwn create mode 100644 doc/bugs/commitBuffer__58___invalid_argument___40__invalid_character__41__2/comment_1_b56c847c5eda432a4330b4d853a25519._comment create mode 100644 doc/bugs/concurrent_git-annex_processes_can_lead_to_locking_issues.mdwn create mode 100644 doc/bugs/confirmed.mdwn create mode 100644 doc/bugs/conflict_resolution___40____63____41___test_stalls_on_an_occasion.mdwn create mode 100644 doc/bugs/conflict_resolution___40____63____41___test_stalls_on_an_occasion/comment_1_ab2c1db51a42a146708b28f4cb3309a6._comment create mode 100644 doc/bugs/conflict_resolution___40____63____41___test_stalls_on_an_occasion/comment_2_e7da4a54b27f459d528a7651fd615913._comment create mode 100644 doc/bugs/copy+rename_of_file_on_windows_breaks_original.mdwn create mode 100644 doc/bugs/copy+rename_of_file_on_windows_breaks_original/comment_1_c6e8e3e76185b6ca25067c2a7e5cd8fc._comment create mode 100644 doc/bugs/copy+rename_of_file_on_windows_breaks_original/comment_2_7e2604bad32225682513b51c1be6f571._comment create mode 100644 doc/bugs/copy_--fast_--from_--to_checks_destination_files.mdwn create mode 100644 doc/bugs/copy_--fast_--from_--to_checks_destination_files/comment_1_2a2997e6f914afb0477f2baa69b174fc._comment create mode 100644 doc/bugs/copy_--fast_--from_--to_checks_destination_files/comment_2_f7bf30e8cc2d1995976bde723dfbfe01._comment create mode 100644 doc/bugs/copy_--from_--to_does_not_adjust_avail_info.mdwn create mode 100644 doc/bugs/copy_--from_--to_does_not_adjust_avail_info/comment_1_d6a1dd2e039dcb6dafcf4675b9244617._comment create mode 100644 doc/bugs/copy_--from_--to_does_not_copy_if_present_locally.mdwn create mode 100644 doc/bugs/copy_--from_--to_does_not_copy_if_present_locally/comment_1_ae76f27d9ef4ebac7ad57e6aef9a7586._comment create mode 100644 doc/bugs/copy_--from_--to_does_not_copy_if_present_locally/comment_2_e857c1d89b350517fcb9829e52d6c6db._comment create mode 100644 doc/bugs/copy_--from_--to_does_not_copy_if_present_locally/comment_3_492d7c932fe5663aab916aacc829fb5d._comment create mode 100644 doc/bugs/copy_--from_--to_does_not_copy_if_present_locally/comment_4_8cfb9f2c14559a7574edd29b161cf7c7._comment create mode 100644 doc/bugs/copy_--from_--to_does_not_copy_if_present_locally/comment_5_fd23d0559018c531595cd06f81290258._comment create mode 100644 doc/bugs/copy_--from_--to_does_not_copy_if_present_locally/comment_6_c374eb44ea08f220dbcce5ecb88403fb._comment create mode 100644 doc/bugs/copy_-J_--to_local_git_remote_does_not_run_concurrently.mdwn create mode 100644 doc/bugs/corrupt_backend_upon_sync__63__.mdwn create mode 100644 doc/bugs/corrupt_backend_upon_sync__63__/comment_1_9f248d82f93040b739b56515d18458c7._comment create mode 100644 doc/bugs/creating_a_plain_directory_where_a_mountpoint_should_have_been.mdwn create mode 100644 doc/bugs/creating_a_plain_directory_where_a_mountpoint_should_have_been/comment_1_41cfd5e48426a6ef52bef70a06a6f46a._comment create mode 100644 doc/bugs/creating_a_plain_directory_where_a_mountpoint_should_have_been/comment_2_bd584ccbe128427fca99e61d66d301c9._comment create mode 100644 doc/bugs/creating_a_plain_directory_where_a_mountpoint_should_have_been/comment_3_5bb0347215b321444643646f25a35759._comment create mode 100644 doc/bugs/creating_a_plain_directory_where_a_mountpoint_should_have_been/comment_4_73848a9c783ecf3d9fccdd41b20fbe36._comment create mode 100644 doc/bugs/creating_a_plain_directory_where_a_mountpoint_should_have_been/comment_5_64bf56f2b0ff206c3caf5cadebfd0cda._comment create mode 100644 doc/bugs/creating_a_remote_server_repository.mdwn create mode 100644 doc/bugs/creating_a_remote_server_repository/comment_1_de1a370347428245bcfca60eaca96779._comment create mode 100644 doc/bugs/creating_a_remote_server_repository/comment_2_482ac9b0f881099910f9bd9f7cda184d._comment create mode 100644 doc/bugs/creating_a_remote_server_repository/comment_3_b7c7f684d0eef14fcc00cb2ac0566703._comment create mode 100644 doc/bugs/creating_dot-git-as-symlink_workaround_drops_worktree_configuration_from_submodules.mdwn create mode 100644 doc/bugs/creating_dot-git-as-symlink_workaround_drops_worktree_configuration_from_submodules/comment_1_ca12be107b7a7dc36cb71595e347ce28._comment create mode 100644 doc/bugs/creating_dot-git-as-symlink_workaround_drops_worktree_configuration_from_submodules/comment_2_b7f03cbb85862ed294ecd0f8cbbd2086._comment create mode 100644 doc/bugs/crippled_fs___40__pidlock__41___leads_to_git-annex__58___SQLite3_error.mdwn create mode 100644 doc/bugs/crippled_fs___40__pidlock__41___leads_to_git-annex__58___SQLite3_error/comment_1_aaea812a8f2b04d9b17d1ba9c6fad39f._comment create mode 100644 doc/bugs/crippled_fs___40__pidlock__41___leads_to_git-annex__58___SQLite3_error/comment_2_c55f2d95f7f08e6f6439f36790e5a538._comment create mode 100644 doc/bugs/crippled_fs___40__pidlock__41___leads_to_git-annex__58___SQLite3_error/comment_3_b49a3df3b13f564e588824910a07bc43._comment create mode 100644 doc/bugs/crippled_fs___40__pidlock__41___leads_to_git-annex__58___SQLite3_error/comment_4_a9e6e37dbaa1664d825bdbd64de4fbdd._comment create mode 100644 doc/bugs/crippled_fs___40__pidlock__41___leads_to_git-annex__58___SQLite3_error/comment_5_3a5eaa2492e4c62a15b4fcee7f96d9dd._comment create mode 100644 doc/bugs/cygwin.mdwn create mode 100644 doc/bugs/cygwin/comment_1_88b6c7d1f50d0f17443ee74b5886649c._comment create mode 100644 doc/bugs/dead_with_no_params_can_mark_repo_with_empty_description_dead.mdwn create mode 100644 doc/bugs/describe_what_git-annex_actually_is.mdwn create mode 100644 doc/bugs/describe_what_git-annex_actually_is/comment_1_25fc9ffb24fc4c96b81a6393427bbe95._comment create mode 100644 doc/bugs/describe_what_git-annex_actually_is/comment_2_1f6ec7cedf56863b261bad0e3f3c80de._comment create mode 100644 doc/bugs/does_not_understand___34__yes__34___as_boolean_true_value_for_autoenable.mdwn create mode 100644 doc/bugs/does_not_understand___34__yes__34___as_boolean_true_value_for_autoenable/comment_1_2f13e023228fa4938dd314e040a8ec10._comment create mode 100644 doc/bugs/does_not_understand___34__yes__34___as_boolean_true_value_for_autoenable/comment_2_01985a25dbdcfe487e28aaeb5823fded._comment create mode 100644 doc/bugs/does_not_understand___34__yes__34___as_boolean_true_value_for_autoenable/comment_3_136e937bdeda3dec080b49d4755d1fba._comment create mode 100644 doc/bugs/does_not_understand___34__yes__34___as_boolean_true_value_for_autoenable/comment_4_aa4ae6db181b1261a36ad06f223ec28f._comment create mode 100644 doc/bugs/does_not_understand___34__yes__34___as_boolean_true_value_for_autoenable/comment_5_ea204e2190c5a34cfcb3dc0e0710a4e3._comment create mode 100644 doc/bugs/does_not_understand___34__yes__34___as_boolean_true_value_for_autoenable/comment_6_2f998fab7d88a9ade53354d1820248ea._comment create mode 100644 doc/bugs/does_not_understand___34__yes__34___as_boolean_true_value_for_autoenable/comment_7_bfbc9a9fbae3715fea0f4a11549ec8a9._comment create mode 100644 doc/bugs/done.mdwn create mode 100644 doc/bugs/drop_blows_on_lustre__58___SQLite3_returned_ErrorIO.mdwn create mode 100644 doc/bugs/drop_blows_on_lustre__58___SQLite3_returned_ErrorIO/comment_1_49e8920ad09ae71874686f50f566b77c._comment create mode 100644 doc/bugs/drop_blows_on_lustre__58___SQLite3_returned_ErrorIO/comment_2_5f5de9dc70bf61c8a369841b24a5ec2a._comment create mode 100644 doc/bugs/drop_from_special_hybrid_encryption_remote_fails.mdwn create mode 100644 doc/bugs/drop_from_special_hybrid_encryption_remote_fails/comment_1_09e26fdacfb5c159997671680dc95ab7._comment create mode 100644 doc/bugs/dropkey_-z_does_not_drop_etc.mdwn create mode 100644 doc/bugs/dropkey_-z_does_not_drop_etc/comment_1_278595e3bb8fe54357ea3ee78f780ccf._comment create mode 100644 doc/bugs/dropkey_-z_does_not_drop_etc/comment_2_d387dff8a99f9733db7856c4b216beff._comment create mode 100644 doc/bugs/dropkey_-z_does_not_drop_etc/comment_3_52f21e094853f787c18f4b9737d9771f._comment create mode 100644 doc/bugs/dropkey_-z_does_not_drop_etc/comment_4_a2f221d36d538c89fa5786a3ff12bbfa._comment create mode 100644 doc/bugs/dropkey_-z_does_not_drop_etc/comment_5_46d527889606595da1a6b00b631ee2b7._comment create mode 100644 doc/bugs/dropkey_-z_does_not_drop_etc/comment_6_d6377ddfb9d907d56c70141b0c3a8a32._comment create mode 100644 doc/bugs/dropkey_-z_does_not_drop_etc/comment_7_57b63abb8ccb7fbbd71afd599cb9ef5c._comment create mode 100644 doc/bugs/dropkey_-z_does_not_drop_etc/comment_8_c537d9ff75804fe4afc174791c427df4._comment create mode 100644 doc/bugs/dropkey_-z_does_not_drop_etc/comment_9_f3bcf33b3b3882073765250c2d113180._comment create mode 100644 doc/bugs/dropunused_returns_ok_but_doesn__39__t_delete_files.mdwn create mode 100644 doc/bugs/dropunused_returns_ok_but_doesn__39__t_delete_files/comment_1_61fc9ee219d3042e1e32e35b5086ef4e._comment create mode 100644 doc/bugs/duplicate.mdwn create mode 100644 doc/bugs/enable-tor_failing_on_Android.mdwn create mode 100644 doc/bugs/enable-tor_failing_on_Android/comment_1_7592b563c0ddb338e1f39ff6cf5fa1f0._comment create mode 100644 doc/bugs/enable-tor_unsupported_on_osx.mdwn create mode 100644 doc/bugs/enableremote_fails_with___34__wrong_reason__34___stated.mdwn create mode 100644 doc/bugs/enableremote_fails_with___34__wrong_reason__34___stated/comment_1_c23de4c4ff536a214c795a805957c9f1._comment create mode 100644 doc/bugs/enableremote_fails_with___34__wrong_reason__34___stated/comment_2_c75d3a033b1b8699e512df4641a38548._comment create mode 100644 doc/bugs/enableremote_fails_with___34__wrong_reason__34___stated/comment_3_39e13618336181485175dddc7185160a._comment create mode 100644 doc/bugs/enableremote_fails_with___34__wrong_reason__34___stated/comment_4_c7a5c3dfaca25fad2edf9575f65629e8._comment create mode 100644 doc/bugs/encountering_fatal_error_on_auto_annex_upgrade.mdwn create mode 100644 doc/bugs/encountering_fatal_error_on_auto_annex_upgrade/comment_1_041e664be0a5ae635cf5848d9fee380c._comment create mode 100644 doc/bugs/encountering_fatal_error_on_auto_annex_upgrade/comment_2_b0deace2dcadbd50c0e0cb155041b255._comment create mode 100644 doc/bugs/encountering_fatal_error_on_auto_annex_upgrade/comment_3_60f745051264fcacdce882eb8646b3fe._comment create mode 100644 doc/bugs/encountering_fatal_error_on_auto_annex_upgrade/comment_4_9e32aa105bbf11a6d2610a62bfa9517b._comment create mode 100644 doc/bugs/encountering_fatal_error_on_auto_annex_upgrade/comment_5_28d35ef30f76ec326363d86ab2948ad3._comment create mode 100644 doc/bugs/encryption__61__none_doesn__39__t_work_with_enableremote.mdwn create mode 100644 doc/bugs/encryption__61__none_doesn__39__t_work_with_enableremote/comment_1_ce62150a3bb8c6be05b9f2ddbe64ae8b._comment create mode 100644 doc/bugs/error__58___git-annex_filter-process_died_of_signal_15.mdwn create mode 100644 doc/bugs/error__58___git-annex_filter-process_died_of_signal_15/comment_1_02da33e41e4f4471d1ae08e9fede229a._comment create mode 100644 doc/bugs/error__58___git-annex_filter-process_died_of_signal_15/comment_2_5ebfc18008cf4bc21ffce57067314fc0._comment create mode 100644 doc/bugs/error__58___git-annex_filter-process_died_of_signal_15/comment_3_c74018853a4da8e609da1803051a6893._comment create mode 100644 doc/bugs/error__58___git-annex_filter-process_died_of_signal_15/comment_4_0a80393f055ead9a3a62da0aa4ec3298._comment create mode 100644 doc/bugs/error__58___git-annex_filter-process_died_of_signal_15/comment_5_8b27c6099afea7011717492f53fcdac4._comment create mode 100644 doc/bugs/error_creating_internet_archive_item_via_web_UI.mdwn create mode 100644 doc/bugs/error_creating_internet_archive_item_via_web_UI/comment_1_4047d926154b444f33674f4db52be04d._comment create mode 100644 doc/bugs/error_during_copy_to_S3.mdwn create mode 100644 doc/bugs/error_during_copy_to_S3/comment_1_14740dc386510409a8fbda5635eee831._comment create mode 100644 doc/bugs/error_during_copy_to_S3/comment_2_157d4bfcb593cf380445caae0523dbbb._comment create mode 100644 doc/bugs/error_during_copy_to_S3/comment_3_0e1ed01fc34a5a98c67dd290cb58481f._comment create mode 100644 doc/bugs/error_on_only_repository_copy_deletion.mdwn create mode 100644 doc/bugs/error_on_only_repository_copy_deletion/comment_1_af394ac0956ab33a77256bcb02ef2a0f._comment create mode 100644 doc/bugs/error_out_on_file_size_0_from_external_spec_remote.mdwn create mode 100644 doc/bugs/error_out_on_file_size_0_from_external_spec_remote/comment_1_6af7ba08e93349b2c6176f91ba25a06f._comment create mode 100644 doc/bugs/error_out_on_file_size_0_from_external_spec_remote/comment_2_1d78459554bc12d0423a317bd9f466d1._comment create mode 100644 doc/bugs/error_out_on_file_size_0_from_external_spec_remote/comment_3_aa083a54e0c77cdba9939a061b509488._comment create mode 100644 doc/bugs/export__95__import__95__subdir_started_to_fail_some_times.mdwn create mode 100644 doc/bugs/export__95__import__95__subdir_started_to_fail_some_times/comment_1_cae9d3f611a2b08d47466e5e5c6e80ed._comment create mode 100644 doc/bugs/export__95__import__95__subdir_started_to_fail_some_times/comment_2_8cfd20ada49f2441ad305b2225a738bb._comment create mode 100644 doc/bugs/export__95__import__95__subdir_started_to_fail_some_times/comment_3_6b3e21c80fd75d153282cd4170f4b9d2._comment create mode 100644 doc/bugs/export__95__import__95__subdir_started_to_fail_some_times/comment_4_e49f6175def95abcd353708acbfc3519._comment create mode 100644 doc/bugs/export__95__import__95__subdir_started_to_fail_some_times/comment_5_45a95910d34d602a916282e4e8ec9a08._comment create mode 100644 doc/bugs/export__95__import__95__subdir_started_to_fail_some_times/comment_6_78b6f81f900fb4d28808005d223a9da8._comment create mode 100644 doc/bugs/export_doesn__39__t_copy_from_adjusted_branch.mdwn create mode 100644 doc/bugs/export_doesn__39__t_copy_from_adjusted_branch/comment_1_5ff140be453458e84bd6072594e70d8a._comment create mode 100644 doc/bugs/exporttree_interaction_with_adjusted_branch.mdwn create mode 100644 doc/bugs/external_remote_export_sent_to_wrong_process.mdwn create mode 100644 doc/bugs/external_remote_export_sent_to_wrong_process/comment_1_831bdc33451de9ef5c54592a7455683f._comment create mode 100644 doc/bugs/external_remote_export_sent_to_wrong_process/comment_2_8ff0638891c38f423d792f5c3cbfb64f._comment create mode 100644 doc/bugs/external_remote_export_sent_to_wrong_process/comment_3_d774a7319bd1a1778adb2004229f057e._comment create mode 100644 doc/bugs/external_remote_export_sent_to_wrong_process/comment_4_db89603335995755d145141705ac4584._comment create mode 100644 doc/bugs/external_remote_export_sent_to_wrong_process/comment_5_48656a34262fce77ac50836d1d38b9fe._comment create mode 100644 doc/bugs/external_remote_export_sent_to_wrong_process/comment_6_e38b776c73affdbb06f3debdddb07e59._comment create mode 100644 doc/bugs/external_remote_export_sent_to_wrong_process/comment_7_6a85fcfa3eb0b4974733a62bcc0bbab2._comment create mode 100644 doc/bugs/external_remote_export_sent_to_wrong_process/comment_8_c4610009f691ce60940979b73bef4d78._comment create mode 100644 doc/bugs/external_remote_protocol_unable_to_parse_command.mdwn create mode 100644 doc/bugs/external_remote_protocol_unable_to_parse_command/comment_1_a10012aa7df76a2366ea40da8c37b798._comment create mode 100644 doc/bugs/external_remote_protocol_unable_to_parse_command/comment_2_a4556ce5c5f40ca022385cfb3a97ddac._comment create mode 100644 doc/bugs/fails_to_authenticate_into_S3_for_initremote__63__.mdwn create mode 100644 doc/bugs/fails_to_authenticate_into_S3_for_initremote__63__/comment_1_a7fcd34cf9376e900db832a8010df7d7._comment create mode 100644 doc/bugs/failure_getting__47__copying_on_git-lfs_remote___40__gcrypt__41__.mdwn create mode 100644 doc/bugs/failure_getting__47__copying_on_git-lfs_remote___40__gcrypt__41__/comment_1_ba5b0ed901c99a23ff72d68b83c0d2fa._comment create mode 100644 doc/bugs/fat_support.mdwn create mode 100644 doc/bugs/fat_support/comment_1_04bcc4795d431e8cb32293aab29bbfe2._comment create mode 100644 doc/bugs/fat_support/comment_2_bb4a97ebadb5c53809fc78431eabd7c8._comment create mode 100644 doc/bugs/fat_support/comment_3_df3b943bc1081a8f3f7434ae0c8e061e._comment create mode 100644 doc/bugs/fat_support/comment_4_90a8a15bedd94480945a374f9d706b86._comment create mode 100644 doc/bugs/fat_support/comment_5_64bbf89de0836673224b83fdefa0407b._comment create mode 100644 doc/bugs/fat_support/comment_6_a3b6000330c9c376611c228d746a1d55._comment create mode 100644 doc/bugs/fat_support/comment_7_a0ac7f2c44efc8116940c7b94b35e9d0._comment create mode 100644 doc/bugs/fat_support/comment_8_acc947643a635eb10a1bff92083a3506._comment create mode 100644 doc/bugs/fatal__58___Cannot_handle_files_this_big.mdwn create mode 100644 doc/bugs/fatal__58___Cannot_handle_files_this_big/comment_1_e4f03a86a7adc6c5421d1e70c37659e0._comment create mode 100644 doc/bugs/fatal__58___Cannot_handle_files_this_big/comment_2_546782c644230741470f9a9de23bd019._comment create mode 100644 doc/bugs/fatal__58___Cannot_handle_files_this_big/comment_3_151e7cf96c7d168e1397d111aa47f279._comment create mode 100644 doc/bugs/file_extension_not_used_for_URIs_from_special_remotes/comment_1_3b47ce467eee2b903c0ed40e251d4bc1._comment create mode 100644 doc/bugs/file_field_omitted_from_import_--json-progress.mdwn create mode 100644 doc/bugs/file_field_omitted_from_import_--json-progress/comment_1_bea5a95e6fe120e1ee8c87ce6c55f161._comment create mode 100644 doc/bugs/file_modification_time_should_be_stored_in_exactly_one_metadata_field.mdwn create mode 100644 doc/bugs/file_modification_time_should_be_stored_in_exactly_one_metadata_field/comment_1_7fef3484f3019539c0a305d5f4a801ce._comment create mode 100644 doc/bugs/file_modification_time_should_be_stored_in_exactly_one_metadata_field/comment_2_32285971869ec56460b3f0eee4edfa23._comment create mode 100644 doc/bugs/file_modification_time_should_be_stored_in_exactly_one_metadata_field/comment_3_7bf423111829ec6b358c6925d012a3e2._comment create mode 100644 doc/bugs/filemanager_integration_broken.mdwn create mode 100644 doc/bugs/filemanager_integration_broken/comment_1_aa5afe9af21e534a6c0683064296d9e6._comment create mode 100644 doc/bugs/find_by_metadata_is_slow.mdwn create mode 100644 doc/bugs/fix_git-annex_paths___47___objects___40__repository_not_available__41__.mdwn create mode 100644 doc/bugs/fix_git-annex_paths___47___objects___40__repository_not_available__41__/comment_1_70e050ef94ab57e74b45b18f3f9ca1f3._comment create mode 100644 doc/bugs/fix_git-annex_paths___47___objects___40__repository_not_available__41__/comment_2_35df3798ddb3424fb26e11df53420d2d._comment create mode 100644 doc/bugs/fix_git-annex_paths___47___objects___40__repository_not_available__41__/comment_3_584fce9a8a501e380426c123505bfdf9._comment create mode 100644 doc/bugs/forwarded.mdwn create mode 100644 doc/bugs/fresh_test_fails__58___hPut__58___invalid_argument_.mdwn create mode 100644 doc/bugs/fresh_test_fails__58___hPut__58___invalid_argument_/comment_1_6b2c645f9ca440f4707c671a94566bb7._comment create mode 100644 doc/bugs/fresh_test_fails__58___hPut__58___invalid_argument_/comment_2_52185ae4ebdfcb61840444e3ef1e0404._comment create mode 100644 doc/bugs/fsck_--json_incomplete_error_reporting.mdwn create mode 100644 doc/bugs/fsck_--json_incomplete_error_reporting/comment_1_979d52131fe94a9e800f939da88b369e._comment create mode 100644 doc/bugs/fsck_--json_incomplete_error_reporting/comment_2_71fd5ede0aa24fcc6522a03010ccec5c._comment create mode 100644 doc/bugs/fsck_does_not_detect_corruption_on_yt_vids.mdwn create mode 100644 doc/bugs/fsck_does_not_detect_corruption_on_yt_vids/comment_1_e7f61f04af8cc4c7ff9125fa37b90f4f._comment create mode 100644 doc/bugs/fsck_does_not_detect_corruption_on_yt_vids/comment_2_8f26d11cbfceb6928648fe40b890c49b._comment create mode 100644 doc/bugs/fsck_ignores_--json-error-messages_when_--quiet.mdwn create mode 100644 doc/bugs/fsck_ignores_--json-error-messages_when_--quiet/comment_1_a23d96af8c0e418350a73cbce5bc24be._comment create mode 100644 doc/bugs/fsck_says_ok_for_a_file_that_is_not_in_the_remote.mdwn create mode 100644 doc/bugs/fsck_says_ok_for_a_file_that_is_not_in_the_remote/comment_1_ce9085e6330625dabf479e6e3beeeb47._comment create mode 100644 doc/bugs/fsck_says_ok_for_a_file_that_is_not_in_the_remote/comment_2_59e89c065a3cd8f7c80cfdb3c2c2808d._comment create mode 100644 doc/bugs/fsck_says_ok_for_a_file_that_is_not_in_the_remote/comment_3_264a1b39c1677545af4c02901dd23d22._comment create mode 100644 doc/bugs/fsck_says_ok_for_a_file_that_is_not_in_the_remote/comment_4_f08e305e39953c5c1906df0fb2eb113b._comment create mode 100644 doc/bugs/fsck_tells___39__ok__39___also_if_no_file_present.mdwn create mode 100644 doc/bugs/gcrypt__58___WARNING__58___Remote_ID_has_changed__33__.mdwn create mode 100644 doc/bugs/gcrypt_remotes_using_relative_paths.mdwn create mode 100644 doc/bugs/gcrypt_remotes_using_relative_paths/comment_1_b4523baf0cdfc2ad70cded93b1629eca._comment create mode 100644 doc/bugs/gcrypt_remotes_using_relative_paths/comment_2_45281c947992c2ab124efd0f109255d6._comment create mode 100644 doc/bugs/get__58___no_passphrase_ask_for_the_2nd_ssh_invocation.mdwn create mode 100644 doc/bugs/get__58___no_passphrase_ask_for_the_2nd_ssh_invocation/comment_10_66386390af02c67c2e5bace223251f53._comment create mode 100644 doc/bugs/get__58___no_passphrase_ask_for_the_2nd_ssh_invocation/comment_11_f818dadfa541520ac7ad2409b9174776._comment create mode 100644 doc/bugs/get__58___no_passphrase_ask_for_the_2nd_ssh_invocation/comment_1_18e194d53646cb6049058635ad54fe1f._comment create mode 100644 doc/bugs/get__58___no_passphrase_ask_for_the_2nd_ssh_invocation/comment_2_2766d9082373c11628006f14262509ad._comment create mode 100644 doc/bugs/get__58___no_passphrase_ask_for_the_2nd_ssh_invocation/comment_3_a15a47b120c0c1c1c8ee5050d6105bb1._comment create mode 100644 doc/bugs/get__58___no_passphrase_ask_for_the_2nd_ssh_invocation/comment_4_72f08e454aad5092acc609a6597d9872._comment create mode 100644 doc/bugs/get__58___no_passphrase_ask_for_the_2nd_ssh_invocation/comment_5_81f23cf6fe835358c9b88af50eab22a5._comment create mode 100644 doc/bugs/get__58___no_passphrase_ask_for_the_2nd_ssh_invocation/comment_6_bbcf4c05813adc2239c1f6017425f1c9._comment create mode 100644 doc/bugs/get__58___no_passphrase_ask_for_the_2nd_ssh_invocation/comment_7_23715781fb5fd3ece5e042be069812ab._comment create mode 100644 doc/bugs/get__58___no_passphrase_ask_for_the_2nd_ssh_invocation/comment_8_a037b7da3c4f2e04b23706592f04b0ac._comment create mode 100644 doc/bugs/get__58___no_passphrase_ask_for_the_2nd_ssh_invocation/comment_9_6efb1a75b236b4384d1d2fccc3ab30b8._comment create mode 100644 doc/bugs/get_is_busy_doing_nothing.mdwn create mode 100644 doc/bugs/get_is_busy_doing_nothing/comment_10_10fea4ce67f5f9c6c33ba2a23a185f8a._comment create mode 100644 doc/bugs/get_is_busy_doing_nothing/comment_11_36dd4a0dba9e544d18376013e879b9c2._comment create mode 100644 doc/bugs/get_is_busy_doing_nothing/comment_13_795ffef1e6a9f1acbd4394c1fca3818e._comment create mode 100644 doc/bugs/get_is_busy_doing_nothing/comment_13_afae18b8b3a17f376b9a345059d9dbd4._comment create mode 100644 doc/bugs/get_is_busy_doing_nothing/comment_13_bdfbcb8b6052a3c904e46678fce6adeb._comment create mode 100644 doc/bugs/get_is_busy_doing_nothing/comment_14_9f6fde051e877638a56094d3179dc550._comment create mode 100644 doc/bugs/get_is_busy_doing_nothing/comment_16_4d375d35a0d05d99c7becf591823d6b8._comment create mode 100644 doc/bugs/get_is_busy_doing_nothing/comment_17_f687c46fb89009712247fe480f0f9566._comment create mode 100644 doc/bugs/get_is_busy_doing_nothing/comment_18_0e5796c55c76dc8b37f9fd875d87eff0._comment create mode 100644 doc/bugs/get_is_busy_doing_nothing/comment_19_216aefa4a78d13cc0c46780161921a36._comment create mode 100644 doc/bugs/get_is_busy_doing_nothing/comment_1_ea9363fac84619b72d6c9f2a3a5c2d6d._comment create mode 100644 doc/bugs/get_is_busy_doing_nothing/comment_20_981cc786be798a612046d207c0f85955._comment create mode 100644 doc/bugs/get_is_busy_doing_nothing/comment_21_eabe406ab0d6e71c3f5f30908016a592._comment create mode 100644 doc/bugs/get_is_busy_doing_nothing/comment_22_711bf1ba8688bdc3bf33e7103340bc11._comment create mode 100644 doc/bugs/get_is_busy_doing_nothing/comment_23_3671d133d18f6722901ed01a1fa38164._comment create mode 100644 doc/bugs/get_is_busy_doing_nothing/comment_24_054db0e62994590631737b9bd768d901._comment create mode 100644 doc/bugs/get_is_busy_doing_nothing/comment_25_4766362f74f135887d5b6103db9a8a06._comment create mode 100644 doc/bugs/get_is_busy_doing_nothing/comment_26_d02b310b007b304e0eda23bd5e565851._comment create mode 100644 doc/bugs/get_is_busy_doing_nothing/comment_27_45168f110bded2f8c8f9777e1edda945._comment create mode 100644 doc/bugs/get_is_busy_doing_nothing/comment_2_8b11e01481065814d2b35f9d728df9f7._comment create mode 100644 doc/bugs/get_is_busy_doing_nothing/comment_3_f06b9085e1d48298c6c1739afb17d2bb._comment create mode 100644 doc/bugs/get_is_busy_doing_nothing/comment_4_422aed4fc2729483e1479cadd54f45e1._comment create mode 100644 doc/bugs/get_is_busy_doing_nothing/comment_5_28da709b2152b1ce1d0c926b099febad._comment create mode 100644 doc/bugs/get_is_busy_doing_nothing/comment_6_c9594a39c44f7fd6649c418dbb5d2c59._comment create mode 100644 doc/bugs/get_is_busy_doing_nothing/comment_7_7a7f6e9793817884a309632e4ebaba1b._comment create mode 100644 doc/bugs/get_is_busy_doing_nothing/comment_8_0b507f49b6c23d9a9e1557fe96ad58b1._comment create mode 100644 doc/bugs/get_is_busy_doing_nothing/comment_9_6209db4f931bced0f6782d231aa45452._comment create mode 100644 doc/bugs/gets_stuck_in_Remote_Tests___40____63____41___while_running_on_OSX_with_HOME_on_crippled_FS.mdwn create mode 100644 doc/bugs/git-annex-copy_fails_with___34__thread_blocked_indefinitely_in_an_STM_transaction__34__.mdwn create mode 100644 doc/bugs/git-annex-copy_fails_with___34__thread_blocked_indefinitely_in_an_STM_transaction__34__/comment_1_c9d7057b9c7b7811a29dcc59b98f97d0._comment create mode 100644 doc/bugs/git-annex-enableremote_confusing_behavior_when_there_is_a_git_remote_with_same_name_as_special_remote.mdwn create mode 100644 doc/bugs/git-annex-enableremote_confusing_behavior_when_there_is_a_git_remote_with_same_name_as_special_remote/comment_1_7f28aecc6ecefd7d47979f73330759d2._comment create mode 100644 doc/bugs/git-annex-import_imports_outside_of_directory.mdwn create mode 100644 doc/bugs/git-annex-import_imports_outside_of_directory/comment_10_30dab036949bd35e026a31974c4e5164._comment create mode 100644 doc/bugs/git-annex-import_imports_outside_of_directory/comment_1_376302b0bac94ee81c0dfdcb647f3b3b._comment create mode 100644 doc/bugs/git-annex-import_imports_outside_of_directory/comment_2_e74c71a5574a8e99503ac83a27d48533._comment create mode 100644 doc/bugs/git-annex-import_imports_outside_of_directory/comment_3_778e176a44aa57e9223aab1a45c931f3._comment create mode 100644 doc/bugs/git-annex-import_imports_outside_of_directory/comment_4_3406ba56525cb59b8b1b366e2b3dc291._comment create mode 100644 doc/bugs/git-annex-import_imports_outside_of_directory/comment_5_5b41c061786fd49c75d49aa2cc70bb9f._comment create mode 100644 doc/bugs/git-annex-import_imports_outside_of_directory/comment_6_6d559ba943ef2a8fed285c463eb2a641._comment create mode 100644 doc/bugs/git-annex-import_imports_outside_of_directory/comment_6_d6aaa0519faa596fa42d22fba405cbff._comment create mode 100644 doc/bugs/git-annex-import_imports_outside_of_directory/comment_7_4f9816f7c9a61289bef98820b1ec25cc._comment create mode 100644 doc/bugs/git-annex-import_imports_outside_of_directory/comment_9_372c44296c1a03778e201a47ec45bee6._comment create mode 100644 doc/bugs/git-annex-import_stalls_and_uses_all_ram_available.mdwn create mode 100644 doc/bugs/git-annex-import_stalls_and_uses_all_ram_available/comment_1_ca22165fc77a57979ad6e19c60693b21._comment create mode 100644 doc/bugs/git-annex-import_stalls_and_uses_all_ram_available/comment_2_2025b1662067bbfaab14576d9e20a6ab._comment create mode 100644 doc/bugs/git-annex-import_stalls_and_uses_all_ram_available/comment_3_5943379450c860b2885121e7f0abd42a._comment create mode 100644 doc/bugs/git-annex-install_for_Android_crashes_on___34__arm7el__34__.mdwn create mode 100644 doc/bugs/git-annex-install_for_Android_crashes_on___34__arm7el__34__/comment_1_af1de40a3c83f8632f98ecde5a5271f5._comment create mode 100644 doc/bugs/git-annex-move_not_using_parallelism__63__.mdwn create mode 100644 doc/bugs/git-annex-move_not_using_parallelism__63__/comment_1_1080a771213dc524cbd072591030c98c._comment create mode 100644 doc/bugs/git-annex-move_not_using_parallelism__63__/comment_2_a83e833b329df094e1bc7945db9686b0._comment create mode 100644 doc/bugs/git-annex-move_not_using_parallelism__63__/comment_3_bdd1aabe7120c4e6b5999aaf396067bc._comment create mode 100644 doc/bugs/git-annex-repair_claims_success_then_failure.mdwn create mode 100644 doc/bugs/git-annex-repair_claims_success_then_failure/comment_1_de8dfda0bc321e573ab9d17aec1ecb84._comment create mode 100644 doc/bugs/git-annex-shell/comment_1_3d2c3827de34509c0a5595eda07dd18f._comment create mode 100644 doc/bugs/git-annex-shell_-c_git-annex-shell_doesn__39__t_work__44___while_git-annex_expects_it_to.mdwn create mode 100644 doc/bugs/git-annex-shell_-c_git-annex-shell_doesn__39__t_work__44___while_git-annex_expects_it_to/comment_1_b0a4f459d40bca7a0b24d1bec1e0f4a8._comment create mode 100644 doc/bugs/git-annex-shell_-c_git-annex-shell_doesn__39__t_work__44___while_git-annex_expects_it_to/comment_3_335fea47cef83b6dfad7ce8c53193f82._comment create mode 100644 doc/bugs/git-annex-shell_-c_git-annex-shell_doesn__39__t_work__44___while_git-annex_expects_it_to/comment_3_abaeb3d5c0322deeec790d80b2948549._comment create mode 100644 doc/bugs/git-annex-shell_fails_to_run_true.mdwn create mode 100644 doc/bugs/git-annex-shell_fails_to_run_true/comment_1_7573eb95bdecc3ecc9b31599bd309d3d._comment create mode 100644 doc/bugs/git-annex-shell_fails_to_run_true/comment_2_5be34b5ffaee39013d24daf83a8dd437._comment create mode 100644 doc/bugs/git-annex-sync_not_quite_idempotent__63__.mdwn create mode 100644 doc/bugs/git-annex-sync_not_quite_idempotent__63__/comment_1_d90a0f326840137872f551e54c2d2a53._comment create mode 100644 doc/bugs/git-annex-sync_not_quite_idempotent__63__/comment_2_ba60267d8b34ae9e277ae992dcfcde96._comment create mode 100644 doc/bugs/git-annex-sync_not_quite_idempotent__63__/comment_3_2381583c924561cbe46186fbd8fbf654._comment create mode 100644 doc/bugs/git-annex-sync_not_quite_idempotent__63__/comment_4_44c082a9321806ca2a60debf829f9c39._comment create mode 100644 doc/bugs/git-annex-sync_not_quite_idempotent__63__/comment_5_86187583d3128f2d64d1c5d58b31283c._comment create mode 100644 doc/bugs/git-annex.linux.6.20180914_-__62___assistant_requires_s3_bucket.mdwn create mode 100644 doc/bugs/git-annex.linux.6.20180914_-__62___assistant_requires_s3_bucket/comment_1_5ec1d63e8f2896876fc88d53b6170b74._comment create mode 100644 doc/bugs/git-annex__58___.git__47__annex__47__keys.tmp__47__db__58___setFileMode__58___permission_denied___40__Operation_not_permitted__41__.mdwn create mode 100644 doc/bugs/git-annex__58___.git__47__annex__47__keys.tmp__47__db__58___setFileMode__58___permission_denied___40__Operation_not_permitted__41__/comment_1_2d68f1f5019621bccfd59be5066fdcbe._comment create mode 100644 doc/bugs/git-annex__58___.git__47__annex__47__keys.tmp__47__db__58___setFileMode__58___permission_denied___40__Operation_not_permitted__41__/comment_2_89b9f0cabdfac72ce6b0b9461672705f._comment create mode 100644 doc/bugs/git-annex__58_____60__socket__58___16__62____58___hPutBuf__58___resource_vanished___40__Broken_pipe__41__.mdwn create mode 100644 doc/bugs/git-annex__58_____60__socket__58___16__62____58___hPutBuf__58___resource_vanished___40__Broken_pipe__41__/comment_1_e962317a939bf76097ae1a3b53b146e6._comment create mode 100644 doc/bugs/git-annex__58_____60__socket__58___16__62____58___hPutBuf__58___resource_vanished___40__Broken_pipe__41__/comment_2_b32472b4c9b61e7a33dca802ecafb05b._comment create mode 100644 doc/bugs/git-annex__58_____60__socket__58___16__62____58___hPutBuf__58___resource_vanished___40__Broken_pipe__41__/comment_3_fcfea3216831df9afbd855fbd842c27e._comment create mode 100644 doc/bugs/git-annex__58_____60__socket__58___16__62____58___hPutBuf__58___resource_vanished___40__Broken_pipe__41__/comment_4_30d0b40efa59eeecb8a4be6d1baa1520._comment create mode 100644 doc/bugs/git-annex__58_____60__socket__58___16__62____58___hPutBuf__58___resource_vanished___40__Broken_pipe__41__/comment_5_4af107f3184bc2abd2c9693167018628._comment create mode 100644 doc/bugs/git-annex__58_____60__socket__58___16__62____58___hPutBuf__58___resource_vanished___40__Broken_pipe__41__/comment_6_f96027f1e3c405809fae42ce8533c6d1._comment create mode 100644 doc/bugs/git-annex__58_____60__socket__58___16__62____58___hPutBuf__58___resource_vanished___40__Broken_pipe__41__/comment_7_b6fe89deb468a7e4f63f7faab147e3fb._comment create mode 100644 doc/bugs/git-annex__58_____60__socket__58___16__62____58___hPutBuf__58___resource_vanished___40__Broken_pipe__41__/comment_8_ebec5d9266604f03959dc16d933ff4a4._comment create mode 100644 doc/bugs/git-annex__58___fd__58__14__58___hGetLine__58___end_of_file.mdwn create mode 100644 doc/bugs/git-annex__58___fd__58__14__58___hGetLine__58___end_of_file/comment_1_36756f5d9d591cc52113c5cc0c1eae91._comment create mode 100644 doc/bugs/git-annex__58___readDirStream__58___inappropriate_type.mdwn create mode 100644 doc/bugs/git-annex__58___readDirStream__58___inappropriate_type/comment_1_1b988c92ae79e6d9ddc487bea358dec1._comment create mode 100644 doc/bugs/git-annex_branch_not_being_pushed_after_git-annex_forget.mdwn create mode 100644 doc/bugs/git-annex_branch_not_being_pushed_after_git-annex_forget/comment_1_babea9a16f25b471026732ea63dd78a8._comment create mode 100644 doc/bugs/git-annex_branch_not_being_pushed_after_git-annex_forget/comment_2_dd24434631ae3898e8f5c1f878d1965f._comment create mode 100644 doc/bugs/git-annex_branch_not_being_pushed_after_git-annex_forget/comment_3_70f2b9e61e90528fdbef4d8a6e8dd972._comment create mode 100644 doc/bugs/git-annex_branch_not_being_pushed_after_git-annex_forget/comment_4_11e9ceb40aa5492a1a3e9ebfbd246832._comment create mode 100644 doc/bugs/git-annex_branch_not_being_pushed_after_git-annex_forget/comment_5_20ee285d62c35e18b78b121d8e4de81b._comment create mode 100644 doc/bugs/git-annex_branch_shows_commit_with_looong_commitlog.mdwn create mode 100644 doc/bugs/git-annex_branch_shows_commit_with_looong_commitlog/comment_1_b83888a98075125dd043f323c99da03b._comment create mode 100644 doc/bugs/git-annex_branch_shows_commit_with_looong_commitlog/comment_2_4a7d824b6e75693cf47f6efbf2c99e2e._comment create mode 100644 doc/bugs/git-annex_branch_shows_commit_with_looong_commitlog/comment_3_cbbeaa691d102bd7d29f5e9bad9d6f53._comment create mode 100644 doc/bugs/git-annex_branch_shows_commit_with_looong_commitlog/comment_4_094191b806ac76b2aef325733fe37136._comment create mode 100644 doc/bugs/git-annex_branch_shows_commit_with_looong_commitlog/comment_5_c97926b15ba320f57a6441f9844cb139._comment create mode 100644 doc/bugs/git-annex_branch_shows_commit_with_looong_commitlog/comment_6_3b70a60ef1c47871a3933176eac38174._comment create mode 100644 doc/bugs/git-annex_branch_shows_commit_with_looong_commitlog/comment_7_fc56ec87725c7427794b70ee2ba2822a._comment create mode 100644 doc/bugs/git-annex_cannot_connect_to_freenet_cloud___40__webdav__41__.mdwn create mode 100644 doc/bugs/git-annex_cannot_connect_to_freenet_cloud___40__webdav__41__/comment_1_db7b584c1e932d24e0dcf464b023a659._comment create mode 100644 doc/bugs/git-annex_cannot_connect_to_freenet_cloud___40__webdav__41__/comment_2_72e9ecc6acdc555e36f5588120d070fa._comment create mode 100644 doc/bugs/git-annex_cannot_connect_to_freenet_cloud___40__webdav__41__/comment_3_b2ef283a3933e22542e05ce9a1acef7d._comment create mode 100644 doc/bugs/git-annex_cannot_connect_to_freenet_cloud___40__webdav__41__/comment_4_7a139eb2c11ab2e32d22ca0f8bb648a5._comment create mode 100644 doc/bugs/git-annex_died_of_signal_11_when_syncing_content.mdwn create mode 100644 doc/bugs/git-annex_died_of_signal_11_when_syncing_content/comment_1_e982f985e5ca57454725e9e9a482e30c._comment create mode 100644 doc/bugs/git-annex_died_of_signal_11_when_syncing_content/comment_2_e920f624ccf2e3a9c71a00105ebc3595._comment create mode 100644 doc/bugs/git-annex_died_of_signal_11_when_syncing_content/comment_3_373e63d55e07cb5cdecc4e01d5d52b79._comment create mode 100644 doc/bugs/git-annex_died_of_signal_11_when_syncing_content/comment_4_678a0136f143d2d7874226b3fc744eb2._comment create mode 100644 doc/bugs/git-annex_does_not_install_on_windows_without_admin_rights.mdwn create mode 100644 doc/bugs/git-annex_does_not_install_on_windows_without_admin_rights/comment_1_2533800ab5a95c5d71c3b47a630e751a._comment create mode 100644 doc/bugs/git-annex_does_not_install_on_windows_without_admin_rights/comment_2_5b71785acf16a8d9ea457726599daef3._comment create mode 100644 doc/bugs/git-annex_does_not_install_on_windows_without_admin_rights/comment_3_63e4ff79bc683a70dd9a85c66e26e56a._comment create mode 100644 doc/bugs/git-annex_drop_fails_to_access_file__58____47____47____47___target_URL_on_Windows.mdwn create mode 100644 doc/bugs/git-annex_drop_fails_to_access_file__58____47____47____47___target_URL_on_Windows/comment_1_f0d30a953f072f8d9a929a4a6ba69914._comment create mode 100644 doc/bugs/git-annex_drop_fails_to_access_file__58____47____47____47___target_URL_on_Windows/comment_2_504ea07f798838710cdbf6133135c815._comment create mode 100644 doc/bugs/git-annex_drop_fails_to_access_file__58____47____47____47___target_URL_on_Windows/comment_3_a9bd50ebe805afefab103da31b88cf89._comment create mode 100644 doc/bugs/git-annex_drop_fails_to_access_file__58____47____47____47___target_URL_on_Windows/comment_4_f2bd555ca36b42dac6a213e7c947f1f9._comment create mode 100644 doc/bugs/git-annex_drop_fails_to_access_file__58____47____47____47___target_URL_on_Windows/comment_5_e00d70ba6b88d9cf60fcb183f7ea4980._comment create mode 100644 doc/bugs/git-annex_findkeys_does_not_know_--largerthan.mdwn create mode 100644 doc/bugs/git-annex_findkeys_does_not_know_--largerthan/comment_1_f6484f69669439ef49513b84d3bd91cf._comment create mode 100644 doc/bugs/git-annex_fsck_in_quiet_mode_don__39__t_report_the_files_it_failed_to_download.mdwn create mode 100644 doc/bugs/git-annex_fsck_in_quiet_mode_don__39__t_report_the_files_it_failed_to_download/comment_1_074e49431bd18c43164872de3733b0e8._comment create mode 100644 doc/bugs/git-annex_get_with_umlaut_characters_in_filenames.mdwn create mode 100644 doc/bugs/git-annex_get_with_umlaut_characters_in_filenames/comment_1_0724d70364f7067d864a80a39e2e609a._comment create mode 100644 doc/bugs/git-annex_is_slow_at_reading_file_content.mdwn create mode 100644 doc/bugs/git-annex_is_slow_at_reading_file_content/comment_10_d04b5bc031f73363d44b81f436b59781._comment create mode 100644 doc/bugs/git-annex_is_slow_at_reading_file_content/comment_11_cab37d851237a7798f74867e08aaafb9._comment create mode 100644 doc/bugs/git-annex_is_slow_at_reading_file_content/comment_12_466a365bca48065cc6b9e280b5c385a5._comment create mode 100644 doc/bugs/git-annex_is_slow_at_reading_file_content/comment_13_0eb12582a3e182b697a07b833cfbe384._comment create mode 100644 doc/bugs/git-annex_is_slow_at_reading_file_content/comment_1_ed54af250541e2add89938b939016659._comment create mode 100644 doc/bugs/git-annex_is_slow_at_reading_file_content/comment_2_786b21544854ad719eac07d08ba8d206._comment create mode 100644 doc/bugs/git-annex_is_slow_at_reading_file_content/comment_3_190a153449f7bb07fb4aca89db236881._comment create mode 100644 doc/bugs/git-annex_is_slow_at_reading_file_content/comment_4_492a11bcabc20b02239bc3b12438a51a._comment create mode 100644 doc/bugs/git-annex_is_slow_at_reading_file_content/comment_5_1367e6e461a9a049527197c262635c2f._comment create mode 100644 doc/bugs/git-annex_is_slow_at_reading_file_content/comment_6_123c81ad10aef15814f1c831e18c0a23._comment create mode 100644 doc/bugs/git-annex_is_slow_at_reading_file_content/comment_7_2885c2f164dbe59234568966e901bdd7._comment create mode 100644 doc/bugs/git-annex_is_slow_at_reading_file_content/comment_8_559e5c3b5ea9c166b3aa4a2e975643c6._comment create mode 100644 doc/bugs/git-annex_is_slow_at_reading_file_content/comment_9_c8b4c2e955b4ef5caaaaf2f834fb37f8._comment create mode 100644 doc/bugs/git-annex_merge_stalls.mdwn create mode 100644 doc/bugs/git-annex_merge_stalls/comment_1_31578a754945bdcb902c62ff58704bcb._comment create mode 100644 doc/bugs/git-annex_merge_stalls/comment_2_f3b6bf180466b5931bfd20b2f0229422._comment create mode 100644 doc/bugs/git-annex_merge_stalls/comment_3_ced9b0d724fb55c756106b64c3721003._comment create mode 100644 doc/bugs/git-annex_remotedaemon_--foreground_exits_immediately_if_run_as_systemd_service.mdwn create mode 100644 doc/bugs/git-annex_remotedaemon_--foreground_exits_immediately_if_run_as_systemd_service/comment_1_8573d3bb5ae9f3490265767128027ed1._comment create mode 100644 doc/bugs/git-annex_remotedaemon_--foreground_exits_immediately_if_run_as_systemd_service/comment_2_34fa48bba13bf896e6b3809ec22fc58e._comment create mode 100644 doc/bugs/git-annex_remotedaemon_--foreground_exits_immediately_if_run_as_systemd_service/comment_3_9b3040c521ec1992ec03c06a579dd627._comment create mode 100644 doc/bugs/git-annex_sometimes_messes_up___126____47__.git-credentials.mdwn create mode 100644 doc/bugs/git-annex_sometimes_messes_up___126____47__.git-credentials/comment_1_5fafcc62656bdec4eecdf35cee4c6a8f._comment create mode 100644 doc/bugs/git-annex_sometimes_messes_up___126____47__.git-credentials/comment_2_f8435628336b472107b478fe11628186._comment create mode 100644 doc/bugs/git-annex_stack.yml_misses_extra-deps..mdwn create mode 100644 doc/bugs/git-annex_sucking_up_all_available_RAM_after_startup.mdwn create mode 100644 doc/bugs/git-annex_sucking_up_all_available_RAM_after_startup/comment_1_b550f292359b44977481bf69abad4012._comment create mode 100644 doc/bugs/git-annex_sucking_up_all_available_RAM_after_startup/comment_2_76e6c1d4db27bcc1767ba34e13e8211c._comment create mode 100644 doc/bugs/git-annex_sucking_up_all_available_RAM_after_startup/comment_3_14007c8e927b75c5706e80cc4242fae4._comment create mode 100644 doc/bugs/git-annex_sucking_up_all_available_RAM_after_startup/comment_4_f3266b74517b421e5310e67818fe3969._comment create mode 100644 doc/bugs/git-annex_sucking_up_all_available_RAM_after_startup/comment_5_1a07f15eb0353768c1e67a1e47e2e494._comment create mode 100644 doc/bugs/git-annex_sucking_up_all_available_RAM_after_startup/comment_6_7d0d49fd165af5e30606982e05335d34._comment create mode 100644 doc/bugs/git-annex_sucking_up_all_available_RAM_after_startup/comment_7_2b0ba2a15af04731a966a029be9b81aa._comment create mode 100644 doc/bugs/git-annex_won__39__t_execute_on_WD_My_Cloud_NAS.mdwn create mode 100644 doc/bugs/git-annex_won__39__t_execute_on_WD_My_Cloud_NAS/comment_1_b87b50ca08bf90ecb7d741a6baa1dc4d._comment create mode 100644 doc/bugs/git-annex_won__39__t_execute_on_WD_My_Cloud_NAS/comment_2_6c95d0fd70fbf41eea4e6575486af3f5._comment create mode 100644 doc/bugs/git-annex_won__39__t_execute_on_WD_My_Cloud_NAS/comment_3_6dd54179aad379bb22638db518bd377f._comment create mode 100644 doc/bugs/git-annex_won__39__t_execute_on_WD_My_Cloud_NAS/comment_4_614da8cad46df5c71539cc5a8ed11831._comment create mode 100644 doc/bugs/git-annex_won__39__t_execute_on_WD_My_Cloud_NAS/comment_5_5fa9d10ebd639eb1a836866b99e90aab._comment create mode 100644 doc/bugs/git-annex_won__39__t_execute_on_WD_My_Cloud_NAS/comment_6_8e05f8769870b3f1aec77fca06f37284._comment create mode 100644 doc/bugs/git-annex_won__39__t_execute_on_WD_My_Cloud_NAS/comment_7_8da1f5fc6656e92dc2e3dabd9808f2d1._comment create mode 100644 doc/bugs/git-annex_won__39__t_execute_on_WD_My_Cloud_NAS/comment_8_48026cf7c187e97d53d15d35ed2c3670._comment create mode 100644 doc/bugs/git_annex_add_out_of_memory__63___mmap_failed__58___No_such_file_or_directory.mdwn create mode 100644 doc/bugs/git_annex_add_out_of_memory__63___mmap_failed__58___No_such_file_or_directory/comment_1_984f75d8078f2809486f38ecb3b16be3._comment create mode 100644 doc/bugs/git_annex_add_out_of_memory__63___mmap_failed__58___No_such_file_or_directory/comment_2_c0f07e2d4bb142389629050479dd1465._comment create mode 100644 doc/bugs/git_annex_add_out_of_memory__63___mmap_failed__58___No_such_file_or_directory/comment_3_7a58a884aaacedca9697b17cd5248214._comment create mode 100644 doc/bugs/git_annex_add_out_of_memory__63___mmap_failed__58___No_such_file_or_directory/comment_4_aa4f1806207138115d2a95935bb0546b._comment create mode 100644 doc/bugs/git_annex_add_out_of_memory__63___mmap_failed__58___No_such_file_or_directory/comment_5_fa95f93416e3d6e66af557df6562f1e5._comment create mode 100644 doc/bugs/git_annex_assist_adds_gitignored_files.mdwn create mode 100644 doc/bugs/git_annex_assistant_adds_dotfiles_to_the_annex.mdwn create mode 100644 doc/bugs/git_annex_assistant_exits_with_failure.mdwn create mode 100644 doc/bugs/git_annex_assistant_exits_with_failure/comment_1_247d4da208cd700851d48f13534d5f7c._comment create mode 100644 doc/bugs/git_annex_assistant_exits_with_failure/comment_2_c6c04006b1d9aa6be92f5a970ba60618._comment create mode 100644 doc/bugs/git_annex_assistant_exits_with_failure/comment_3_eabad530a55adfa4be3eae0f743d3309._comment create mode 100644 doc/bugs/git_annex_assistant_exits_with_failure/comment_4_204764bb40509d8650386227ea166a6e._comment create mode 100644 doc/bugs/git_annex_assistant_exits_with_failure/comment_5_0453ae9123b359757e63c6eb5f12811b._comment create mode 100644 doc/bugs/git_annex_assistant_exits_with_failure/comment_6_5b0310038a8b45d2083f39ea75c1a979._comment create mode 100644 doc/bugs/git_annex_assistant_exits_with_failure/comment_7_63b3ec113d52501237abbe6ee1ef5fa5._comment create mode 100644 doc/bugs/git_annex_assistant_failing_with_ARM_NAS.mdwn create mode 100644 doc/bugs/git_annex_assistant_failing_with_ARM_NAS/comment_1_00ca17dca9da3ddb81514d319cae0ef4._comment create mode 100644 doc/bugs/git_annex_assistant_leaks_a_lot_of_memory.mdwn create mode 100644 doc/bugs/git_annex_assistant_leaks_a_lot_of_memory/comment_1_a4805854c448e4bc70a47f5555e0f73c._comment create mode 100644 doc/bugs/git_annex_assistant_leaks_a_lot_of_memory/comment_2_e9dca04e0456ca7356996365a4b87d59._comment create mode 100644 doc/bugs/git_annex_assistant_leaks_a_lot_of_memory/comment_3_45ae862d4f940341d48d179583e65d66._comment create mode 100644 doc/bugs/git_annex_assistant_leaks_a_lot_of_memory/comment_4_d597e15e9693ce6e8c1ca80cb225b044._comment create mode 100644 doc/bugs/git_annex_cannot_get_my_files_after_clone.mdwn create mode 100644 doc/bugs/git_annex_cannot_get_my_files_after_clone/comment_1_52c91f8d2e8086b26a078a02d036c197._comment create mode 100644 doc/bugs/git_annex_cannot_get_my_files_after_clone/comment_2_545c9daafc63c5cdb80763b929c8d622._comment create mode 100644 doc/bugs/git_annex_cannot_get_my_files_after_clone/comment_3_ef9b32d9ba1b80c313db48be36cc90d1._comment create mode 100644 doc/bugs/git_annex_cannot_get_my_files_after_clone/comment_4_d1d13d1f3366026957d572b930cafa4b._comment create mode 100644 doc/bugs/git_annex_cannot_get_my_files_after_clone/comment_5_f8b58f9c5acb509871cc4a64b66de6f3._comment create mode 100644 doc/bugs/git_annex_connecting_over_tor_does_not_work.mdwn create mode 100644 doc/bugs/git_annex_connecting_over_tor_does_not_work/comment_1_35c33ae1d69382a03c94f4a20ec22f7e._comment create mode 100644 doc/bugs/git_annex_connecting_over_tor_does_not_work/comment_2_5df90e5ffbd3f089a0f640d4a5b85a1c._comment create mode 100644 doc/bugs/git_annex_connecting_over_tor_does_not_work/comment_3_9fa2fb82ae3d17a77a9645870e1e12e5._comment create mode 100644 doc/bugs/git_annex_copy_fails_without_error_message_on_macOS___40__but_works_on_Linux__41__.mdwn create mode 100644 doc/bugs/git_annex_copy_fails_without_error_message_on_macOS___40__but_works_on_Linux__41__/comment_1_6c044f007e66b951cf08b86f9be49ed3._comment create mode 100644 doc/bugs/git_annex_copy_to_s3_out_of_memory.mdwn create mode 100644 doc/bugs/git_annex_copy_to_s3_out_of_memory/comment_1_5c0b73214c8f0ecb197cf0e109ff2729._comment create mode 100644 doc/bugs/git_annex_daemon_crashes_when_authenticating_with_jabber.de.mdwn create mode 100644 doc/bugs/git_annex_daemon_crashes_when_authenticating_with_jabber.de/comment_1_5ba4f22bda2f5438fb08753cf149b649._comment create mode 100644 doc/bugs/git_annex_daemon_crashes_when_authenticating_with_jabber.de/comment_2_b096cfdf26bfedfff16d882d7b2e060d._comment create mode 100644 doc/bugs/git_annex_daemon_crashes_when_authenticating_with_jabber.de/comment_3_210be77aabb0ef5b85865cd08c51861e._comment create mode 100644 doc/bugs/git_annex_daemon_crashes_when_authenticating_with_jabber.de/comment_4_bb974d882fbb31aa54e6de38410a2318._comment create mode 100644 doc/bugs/git_annex_daemon_crashes_when_authenticating_with_jabber.de/comment_5_be655cbea27b6c87d298a75e1697a87d._comment create mode 100644 doc/bugs/git_annex_daemon_crashes_when_authenticating_with_jabber.de/comment_6_72d1dac6627bbe22d5bd140215d82c47._comment create mode 100644 doc/bugs/git_annex_daemon_crashes_when_authenticating_with_jabber.de/comment_7_8a8dfb15684525e156d6334e9f67a55c._comment create mode 100644 doc/bugs/git_annex_daemon_crashes_when_authenticating_with_jabber.de/comment_8_f1a6e413756066659020e20147373a11._comment create mode 100644 doc/bugs/git_annex_enableremote_gcrypt_failure_leaves_a_remote.mdwn create mode 100644 doc/bugs/git_annex_enableremote_locking_issue.mdwn create mode 100644 doc/bugs/git_annex_forget_does_not_propagate.mdwn create mode 100644 doc/bugs/git_annex_forget_does_not_propagate/comment_1_591c3c59d831ed94268f90505a8baaee._comment create mode 100644 doc/bugs/git_annex_forget_does_not_propagate/comment_2_9026452178c82d0661acc96d009e3764._comment create mode 100644 doc/bugs/git_annex_get_--batch_does_not_work.mdwn create mode 100644 doc/bugs/git_annex_get_--batch_does_not_work/comment_1_52311b95bf29706d2b1afb3904428047._comment create mode 100644 doc/bugs/git_annex_get_--batch_does_not_work/comment_2_b4fa614626393e01c51b937401bbaa23._comment create mode 100644 doc/bugs/git_annex_get_--batch_does_not_work/comment_3_e972b9fb5c6af4ecd295dc954bb2f55a._comment create mode 100644 doc/bugs/git_annex_get_--batch_does_not_work/comment_4_f0c498dad3f4d51e33de863165f29410._comment create mode 100644 doc/bugs/git_annex_get_--batch_does_not_work/comment_5_603adcb0b5091ac2fb3c9225d2925dc3._comment create mode 100644 doc/bugs/git_annex_get_--batch_does_not_work/comment_6_56716644ee1534b8fe90ba502856455c._comment create mode 100644 doc/bugs/git_annex_get_--batch_does_not_work/comment_7_b0588132d02f982da7c7208087b0afe2._comment create mode 100644 doc/bugs/git_annex_get_--batch_does_not_work/comment_8_0e776c598c5e0f4f51f5e9ade8c3f0e2._comment create mode 100644 doc/bugs/git_annex_get_--batch_does_not_work/comment_9_0c802c9c5734e7dfc8cd72962fcf2983._comment create mode 100644 doc/bugs/git_annex_import_is_dangerous_if_you_have_unused_objects.mdwn create mode 100644 doc/bugs/git_annex_import_is_dangerous_if_you_have_unused_objects/comment_1_9f9d5c18c27dfd33a5bf2c593ee65b58._comment create mode 100644 doc/bugs/git_annex_import_is_dangerous_if_you_have_unused_objects/comment_2_f64891ff6fe0cd0be6a356ab8fe42817._comment create mode 100644 doc/bugs/git_annex_import_is_dangerous_if_you_have_unused_objects/comment_3_d980c1e2d788324049475e468a0d6fab._comment create mode 100644 doc/bugs/git_annex_import_is_dangerous_if_you_have_unused_objects/comment_4_09b860a14bb8bd49f2067e8ddb0aacfc._comment create mode 100644 doc/bugs/git_annex_import_is_dangerous_if_you_have_unused_objects/comment_5_1e737b740bc7d95f3329e3481d55fd35._comment create mode 100644 doc/bugs/git_annex_import_is_dangerous_if_you_have_unused_objects/comment_6_6def3c88ced56753e4b12ce221d33769._comment create mode 100644 doc/bugs/git_annex_move_--unused_not_moving_some_files.mdwn create mode 100644 doc/bugs/git_annex_move_--unused_not_moving_some_files/comment_1_3fe94ad69d28f16598fdb8f98d7ffa54._comment create mode 100644 doc/bugs/git_annex_move_--unused_not_moving_some_files/comment_2_91cdee93a29eefca78c1e49878b71574._comment create mode 100644 doc/bugs/git_annex_move_--unused_not_moving_some_files/comment_3_40d839105047f4ac2996b53705601cc4._comment create mode 100644 doc/bugs/git_annex_move_--unused_not_moving_some_files/comment_4_023fb25740f8363f8e72c12f020aa0f4._comment create mode 100644 doc/bugs/git_annex_move_--unused_not_moving_some_files/comment_5_85ef3d6a4f2e67f16ee4bd30e58ef4fc._comment create mode 100644 doc/bugs/git_annex_push_fails_on_Windows.mdwn create mode 100644 doc/bugs/git_annex_push_fails_on_Windows/comment_1_a7866c2131df8132e9aecebda085294c._comment create mode 100644 doc/bugs/git_annex_push_fails_on_Windows/comment_2_d5c9fd2acdd5b320563a708889e82852._comment create mode 100644 doc/bugs/git_annex_push_fails_on_Windows/comment_3_fe3818a184e723f86d094253461d8f44._comment create mode 100644 doc/bugs/git_annex_repair_failed__58___missing_objects.mdwn create mode 100644 doc/bugs/git_annex_repair_failed__58___missing_objects/comment_1_9f2166545159890b05ea061e2ab21a4f._comment create mode 100644 doc/bugs/git_annex_repair_failed__58___missing_objects/comment_2_7571de4a3ab7030a877fa198fe4810b1._comment create mode 100644 doc/bugs/git_annex_repair_failed__58___missing_objects/comment_3_317bee33fe675a5abb6fe65540a33d25._comment create mode 100644 doc/bugs/git_annex_should_check_that_stdout_isatty_when_reporting_progress.mdwn create mode 100644 doc/bugs/git_annex_should_check_that_stdout_isatty_when_reporting_progress/comment_1_6c7f745ee77e9b7502cb13d3babf211b._comment create mode 100644 doc/bugs/git_annex_should_check_that_stdout_isatty_when_reporting_progress/comment_2_e2139a3d1d06772d06992a38140e51d3._comment create mode 100644 doc/bugs/git_annex_still_deleting_content_when_merging.mdwn create mode 100644 doc/bugs/git_annex_still_deleting_content_when_merging/comment_1_cb51e25c5e1656dcbb73b3ff680341f0._comment create mode 100644 doc/bugs/git_annex_still_deleting_content_when_merging/comment_2_bbbcce7fc5f34d733126c42be8ec0a1d._comment create mode 100644 doc/bugs/git_annex_still_deleting_content_when_merging/comment_3_f31a73e0e2c43f6a7f158455eadaa56c._comment create mode 100644 doc/bugs/git_annex_sync_remove_all_recently_added_files.mdwn create mode 100644 doc/bugs/git_annex_sync_remove_all_recently_added_files/comment_1_58faf8b37bb276e6176233d3daa24db9._comment create mode 100644 doc/bugs/git_annex_sync_remove_all_recently_added_files/comment_2_a39ce4a60c1dc7817c84f90eac7251a6._comment create mode 100644 doc/bugs/git_annex_sync_remove_all_recently_added_files/comment_3_3cb07eabd0e1802dbe477bdc88f647fb._comment create mode 100644 doc/bugs/git_annex_sync_remove_all_recently_added_files/comment_4_65c5f5f34eb8535d244d6075caf57c21._comment create mode 100644 doc/bugs/git_annex_test_fails_when_run_through_powershell.mdwn create mode 100644 doc/bugs/git_annex_test_fails_when_run_through_powershell/comment_1_014466c5da1922d34a498648baeeba26._comment create mode 100644 doc/bugs/git_annex_test_fails_when_run_through_powershell/comment_2_241ab999007eecaa2cd5a854e722e315._comment create mode 100644 doc/bugs/git_annex_upgrade_fails.mdwn create mode 100644 doc/bugs/git_annex_upgrade_fails/comment_1_26e3224b9aad57837969c309ae4bdcd2._comment create mode 100644 doc/bugs/git_annex_upgrade_loses_track_of_files_with___34____38____34___character___40__and_probably_others__41__.mdwn create mode 100644 doc/bugs/git_annex_upgrade_loses_track_of_files_with___34____38____34___character___40__and_probably_others__41__/comment_1_861506e40e0d04d2be98bbfe9188be89._comment create mode 100644 doc/bugs/git_annex_wont_work_with_git-dir_and_work-tree.mdwn create mode 100644 doc/bugs/git_annex_wont_work_with_git-dir_and_work-tree/comment_1_cc3ea43301cd17b55794f9b9dd1e91cf._comment create mode 100644 doc/bugs/git_annex_wont_work_with_git-dir_and_work-tree/comment_2_fb75f5941d355947b3f06165825dd012._comment create mode 100644 doc/bugs/git_annex_wont_work_with_git-dir_and_work-tree/comment_3_8c7b21c8e500de719fc2909d0c9027e0._comment create mode 100644 doc/bugs/git_annex_wont_work_with_git-dir_and_work-tree/comment_4_423126c9884267b3466470d4ec7301ce._comment create mode 100644 doc/bugs/git_checkout_slow_with_unlocked_files/comment_1_80d9a46c608117fb9a381c59d4605ff4._comment create mode 100644 doc/bugs/git_commit_smudges_unncessarily.mdwn create mode 100644 doc/bugs/git_commit_smudges_unncessarily/comment_1_202cb8adc7a7b1119f5b4c1f5c6e9c7e._comment create mode 100644 doc/bugs/git_commit_smudges_unncessarily/comment_2_5b230c4b74da48099e8be0e264bbf3e6._comment create mode 100644 doc/bugs/git_commit_smudges_unncessarily/comment_3_c30e84ae438810cbab70c401fd5125c0._comment create mode 100644 doc/bugs/git_error___34__update__95__ref_failed_for_ref__34__.mdwn create mode 100644 doc/bugs/git_error___34__update__95__ref_failed_for_ref__34__/comment_1_60ea64baccef82dc03ab300ca9b5e2b5._comment create mode 100644 doc/bugs/git_fsck_duplicateEntries_errors_when_using_adjusted_branch.mdwn create mode 100644 doc/bugs/git_fsck_duplicateEntries_errors_when_using_adjusted_branch/comment_1_1a6674245aed0c325361043d1100daec._comment create mode 100644 doc/bugs/git_fsck_duplicateEntries_errors_when_using_adjusted_branch/comment_2_ccadd646ec0fe7abec461c110bfb7ae7._comment create mode 100644 doc/bugs/git_fsck_duplicateEntries_errors_when_using_adjusted_branch/comment_3_2a6ef51c96a914be5d248b526ad37394._comment create mode 100644 doc/bugs/git_fsck_duplicateEntries_errors_when_using_adjusted_branch/comment_4_f9588887f75c0d17b87f2718b0584a94._comment create mode 100644 doc/bugs/git_fsck_duplicateEntries_errors_when_using_adjusted_branch/comment_5_a9d6cf6cd38bfa6f391beaf6831b0ef4._comment create mode 100644 doc/bugs/git_fsck_duplicateEntries_errors_when_using_adjusted_branch/comment_6_cfefa7ac1f538566ee028aa3996e22cd._comment create mode 100644 doc/bugs/git_init_fails_on_a_worktree_branch.mdwn create mode 100644 doc/bugs/git_init_fails_on_a_worktree_branch/comment_1_6614fc4b8f191702c1b78c5a3ce5de50._comment create mode 100644 doc/bugs/git_keeps_refreshing_index.mdwn create mode 100644 doc/bugs/git_keeps_refreshing_index/comment_1_bc76561ae4aaf932217c40109a8d04bd._comment create mode 100644 doc/bugs/git_keeps_refreshing_index/comment_2_a4c9ccb93a809aff61ae208d31ba0363._comment create mode 100644 doc/bugs/git_keeps_refreshing_index/comment_3_919fb06b3fc7fe9b54797a805873e3c8._comment create mode 100644 doc/bugs/git_keeps_refreshing_index/comment_4_b73f9c5603bc69867e1619d871a8abb7._comment create mode 100644 doc/bugs/git_keeps_refreshing_index/comment_5_f1b07147627b087231c776522ddc2826._comment create mode 100644 doc/bugs/git_keeps_refreshing_index/comment_6_e0bfde0d53042ce8d310f356f88c610b._comment create mode 100644 doc/bugs/git_keeps_refreshing_index/comment_7_35dff672dfd3c6fdc2b9fcdb9a58e154._comment create mode 100644 doc/bugs/git_proxy_uses_ls-files_without_--exclude-standard.mdwn create mode 100644 doc/bugs/git_proxy_uses_ls-files_without_--exclude-standard/comment_1_81383cf73102346fa8d537e1dde30353._comment create mode 100644 doc/bugs/git_rename_detection_on_file_move.mdwn create mode 100644 doc/bugs/git_rename_detection_on_file_move/comment_10_5ec2f965c80cc5dd31ee3c4edb695664._comment create mode 100644 doc/bugs/git_rename_detection_on_file_move/comment_1_0531dcfa833b0321a7009526efe3df33._comment create mode 100644 doc/bugs/git_rename_detection_on_file_move/comment_2_7101d07400ad5935f880dc00d89bf90e._comment create mode 100644 doc/bugs/git_rename_detection_on_file_move/comment_3_57010bcaca42089b451ad8659a1e018e._comment create mode 100644 doc/bugs/git_rename_detection_on_file_move/comment_4_79d96599f757757f34d7b784e6c0e81c._comment create mode 100644 doc/bugs/git_rename_detection_on_file_move/comment_5_d61f5693d947b9736b29fca1dbc7ad76._comment create mode 100644 doc/bugs/git_rename_detection_on_file_move/comment_6_f63de6fe2f7189c8c2908cc41c4bc963._comment create mode 100644 doc/bugs/git_rename_detection_on_file_move/comment_7_7f20d0b2f6ed1c34021a135438037306._comment create mode 100644 doc/bugs/git_rename_detection_on_file_move/comment_8_6a00500b24ba53248c78e1ffc8d1a591._comment create mode 100644 doc/bugs/git_rename_detection_on_file_move/comment_9_75e0973f6d573df615e01005ebcea87d._comment create mode 100644 doc/bugs/git_worktree_remove_fails.mdwn create mode 100644 doc/bugs/git_worktree_remove_fails/comment_1_e980c49fb53a785337e206feae34d032._comment create mode 100644 doc/bugs/git_worktree_remove_fails/comment_2_2c6ce2244c885bb21ca82a841987dd47._comment create mode 100644 doc/bugs/glacier_from_multiple_repos.mdwn create mode 100644 doc/bugs/gpg-agent.mdwn create mode 100644 doc/bugs/gpg-agent/comment_1_86860841aaa38541968693ec02f6a506._comment create mode 100644 doc/bugs/gpg-agent/comment_2_de6f9b8f20e44e93759b9bf0db695def._comment create mode 100644 doc/bugs/gpg_goes_to_100__37___cpu_on_bad_input_data.mdwn create mode 100644 doc/bugs/gpg_goes_to_100__37___cpu_on_bad_input_data/comment_1_889218fb7c0115b03d9bad0c07296097._comment create mode 100644 doc/bugs/high_cpu_usage_in_cat-file_and_webapp.mdwn create mode 100644 doc/bugs/high_cpu_usage_in_cat-file_and_webapp/comment_1_7fee933eb54272a0447851279d31825b._comment create mode 100644 doc/bugs/high_cpu_usage_in_cat-file_and_webapp/comment_2_f26b8846e1651c507d259b9891d26136._comment create mode 100644 doc/bugs/high_cpu_usage_in_cat-file_and_webapp/comment_3_89dbc16c9c1b74ccb3f46d3c558e0c8d._comment create mode 100644 doc/bugs/how_to_copy_tp_multiple_remotes_simultaneously__63__.mdwn create mode 100644 doc/bugs/how_to_copy_tp_multiple_remotes_simultaneously__63__/comment_1_311a8a43d360074abd522fff14bfcb45._comment create mode 100644 doc/bugs/http_remotes_ignore_annex.web-options_--netrc.mdwn create mode 100644 doc/bugs/http_remotes_ignore_annex.web-options_--netrc/comment_1_314bf6c825c8b4cd49de210f20f6cde2._comment create mode 100644 doc/bugs/http_remotes_ignore_annex.web-options_--netrc/comment_2_599a66a1833000dc0e54a33511891b36._comment create mode 100644 doc/bugs/http_remotes_ignore_annex.web-options_--netrc/comment_3_bed5008a429dd85dbb3389994f6d6295._comment create mode 100644 doc/bugs/http_remotes_ignore_annex.web-options_--netrc/comment_4_a67253e52fa4510073d7df60d2bd4adb._comment create mode 100644 doc/bugs/http_remotes_ignore_annex.web-options_--netrc/comment_5_d81762737f3854c75e804bad1697b517._comment create mode 100644 doc/bugs/http_remotes_ignore_annex.web-options_--netrc/comment_6_e13932ead5920c7599031e85127317bb._comment create mode 100644 doc/bugs/identically_configured_remotes_behave_differently.mdwn create mode 100644 doc/bugs/identically_configured_remotes_behave_differently/comment_1_14fa5263ee9feedff8c36f86e4c33fd8._comment create mode 100644 doc/bugs/import_tree_on_adjusted_unlocked_branch_issues.mdwn create mode 100644 doc/bugs/import_tree_on_adjusted_unlocked_branch_issues/comment_1_a6aed4a1d1958e4734684b78b0f0a3de._comment create mode 100644 doc/bugs/import_tree_on_adjusted_unlocked_branch_issues/comment_2_7fc16d6ff0f1a61907bc34e8f8b71add._comment create mode 100644 doc/bugs/import_tree_on_adjusted_unlocked_branch_issues/comment_3_c75eee397fc6a53aa0ff55f993b790a7._comment create mode 100644 doc/bugs/importtree_replaces_files_with_identical_size.mdwn create mode 100644 doc/bugs/importtree_replaces_files_with_identical_size/comment_1_2742c2cbde12aa85b8254dd6907fcfc1._comment create mode 100644 doc/bugs/importtree_replaces_files_with_identical_size/comment_2_46336dc995a7cefb8ebbfe98f098e258._comment create mode 100644 doc/bugs/importtree_replaces_files_with_identical_size/comment_3_2b9bdb906043aa84ea6cf0d74a685769._comment create mode 100644 doc/bugs/importtree_replaces_files_with_identical_size/comment_4_9363ed782b5dc8d70a323fbc2574e7c7._comment create mode 100644 doc/bugs/importtree_spends_hours_reading_cidsdb.mdwn create mode 100644 doc/bugs/importtree_spends_hours_reading_cidsdb/comment_10_a2724ab85bc91fba3bb6e55d2b1e3878._comment create mode 100644 doc/bugs/importtree_spends_hours_reading_cidsdb/comment_11_a3fc6b67529ddce9e79c0e72996259ad._comment create mode 100644 doc/bugs/importtree_spends_hours_reading_cidsdb/comment_12_c1865c88d23873eb4b32489fc387f40c._comment create mode 100644 doc/bugs/importtree_spends_hours_reading_cidsdb/comment_13_6043be5152ba2d44fb9aac4063060b56._comment create mode 100644 doc/bugs/importtree_spends_hours_reading_cidsdb/comment_14_e961d2b508e3260670bb61a5ae51d109._comment create mode 100644 doc/bugs/importtree_spends_hours_reading_cidsdb/comment_15_35d233db5f7410048bd0cf9f5b4fd5cc._comment create mode 100644 doc/bugs/importtree_spends_hours_reading_cidsdb/comment_16_d0a7af6aecf8cb070c34edec1b3e2ecb._comment create mode 100644 doc/bugs/importtree_spends_hours_reading_cidsdb/comment_17_8fe8c0747a69ea977942a399ac929e77._comment create mode 100644 doc/bugs/importtree_spends_hours_reading_cidsdb/comment_18_b5ea8e5a761b254672171c3ab41e09f9._comment create mode 100644 doc/bugs/importtree_spends_hours_reading_cidsdb/comment_19_238c26c1a3f4ab7dd6ea3b2f26febaef._comment create mode 100644 doc/bugs/importtree_spends_hours_reading_cidsdb/comment_1_41ca70e65a59d620cedc7cf46a8305fc._comment create mode 100644 doc/bugs/importtree_spends_hours_reading_cidsdb/comment_20_d6d3db42bda1fe094140d54a458157b1._comment create mode 100644 doc/bugs/importtree_spends_hours_reading_cidsdb/comment_21_9320fcfb8bd47d4ee547e81fb9e01f38._comment create mode 100644 doc/bugs/importtree_spends_hours_reading_cidsdb/comment_22_333907125ccf24c2ad8286cd40a35b16._comment create mode 100644 doc/bugs/importtree_spends_hours_reading_cidsdb/comment_2_8f609e231fdf315d2b658d30d708d471._comment create mode 100644 doc/bugs/importtree_spends_hours_reading_cidsdb/comment_3_d54f2c81763b4119c881e283cff80d44._comment create mode 100644 doc/bugs/importtree_spends_hours_reading_cidsdb/comment_4_76fe32e5ecbf37b0f173de987c59e39f._comment create mode 100644 doc/bugs/importtree_spends_hours_reading_cidsdb/comment_5_512996afefabc75a0b2258fc05ccbfdd._comment create mode 100644 doc/bugs/importtree_spends_hours_reading_cidsdb/comment_6_1b6ff858daf39dd84d4ef39a162ca914._comment create mode 100644 doc/bugs/importtree_spends_hours_reading_cidsdb/comment_6_b8b3eb5fff4ad3478dfbbd2120d4b00a._comment create mode 100644 doc/bugs/importtree_spends_hours_reading_cidsdb/comment_8_1389db945973ed42b8ddd0de3cc8889c._comment create mode 100644 doc/bugs/importtree_spends_hours_reading_cidsdb/comment_8_58155dba65976fd92cd212e13f87b888._comment create mode 100644 doc/bugs/in_case_of___34__incomplete__34_____40__no_rmets__41___export_to_versioned_S3__44___fails_on_initial___96__get_-J__96___call__44___but_then___34__succeeds__34___on_subsequent.mdwn create mode 100644 doc/bugs/infinite_hang_on_git_status_with_v10___38___nfs.mdwn create mode 100644 doc/bugs/infinite_hang_on_git_status_with_v10___38___nfs/comment_1_be44453dee893cc99759f90e660c0a66._comment create mode 100644 doc/bugs/infinite_hang_on_git_status_with_v10___38___nfs/comment_2_e262ec0e438557b8d70a6adc50545ac1._comment create mode 100644 doc/bugs/infinite_hang_on_git_status_with_v10___38___nfs/comment_3_c863d6940528fcc543815da44e7997d5._comment create mode 100644 doc/bugs/infinite_hang_on_git_status_with_v10___38___nfs/comment_4_d54eb28d30d91088de019b761a340fd3._comment create mode 100644 doc/bugs/infinite_hang_on_git_status_with_v10___38___nfs/comment_5_6439cb8500ad225fc4ef43a18582b18a._comment create mode 100644 doc/bugs/infinite_hang_on_git_status_with_v10___38___nfs/comment_6_a959fa6cb5b4cda423b7e75aeec2eb1c._comment create mode 100644 doc/bugs/info_regression__58___exits_on_first_bad_path.mdwn create mode 100644 doc/bugs/info_regression__58___exits_on_first_bad_path/comment_1_360a45c65c76e71c967afee1e3d355a1._comment create mode 100644 doc/bugs/info_tries_to_scan_ignored_dirs_without_permission.mdwn create mode 100644 doc/bugs/info_tries_to_scan_ignored_dirs_without_permission/comment_1_621066a2d1e8ff9f5edc41001dc4072f._comment create mode 100644 doc/bugs/init__58___autoupgrade___60__8_annex_version_to_8_not_10.mdwn create mode 100644 doc/bugs/init__58___autoupgrade___60__8_annex_version_to_8_not_10/comment_1_5b9ba56f682a991a57872d021f2ff08e._comment create mode 100644 doc/bugs/init__58___autoupgrade___60__8_annex_version_to_8_not_10/comment_2_419bf4e6ebce4bcaae3afc6420da80b8._comment create mode 100644 doc/bugs/init__58___autoupgrade___60__8_annex_version_to_8_not_10/comment_3_425e81639f39d723b390d114a6d9e24b._comment create mode 100644 doc/bugs/init__58___autoupgrade___60__8_annex_version_to_8_not_10/comment_4_a24860bb39cf920e34fac9ee6154b69e._comment create mode 100644 doc/bugs/init__58___autoupgrade___60__8_annex_version_to_8_not_10/comment_5_3293f29b78d10aaf9254ddba1af6731d._comment create mode 100644 doc/bugs/init__58___autoupgrade___60__8_annex_version_to_8_not_10/comment_6_f09aa0ebe68b5db72d466ae802ce20d5._comment create mode 100644 doc/bugs/init__58___autoupgrade___60__8_annex_version_to_8_not_10/comment_7_2d354e2c1fc2f1f6397fd89f71bf29ca._comment create mode 100644 doc/bugs/init_fails_in_a_folder_with_newline_in_its_name.mdwn create mode 100644 doc/bugs/init_fails_in_a_folder_with_newline_in_its_name/comment_1_2690ed9441685068c291a182d39c2616._comment create mode 100644 doc/bugs/introduction_of_aws-0.23_causes_stack_bld_to_fail.mdwn create mode 100644 doc/bugs/keeps_demanding_ssh_key_even_if_all_sync__39__s_turned_down.mdwn create mode 100644 doc/bugs/keeps_demanding_ssh_key_even_if_all_sync__39__s_turned_down/comment_1_e4b110f61502b5d37117ec65ec39896b._comment create mode 100644 doc/bugs/leaves_many_stray_processes_on_remote_server.mdwn create mode 100644 doc/bugs/leaves_many_stray_processes_on_remote_server/comment_1_b66015587ccd3ca81de52271979bd026._comment create mode 100644 doc/bugs/leaves_many_stray_processes_on_remote_server/comment_2_4f417206d5d83bd456c8e501ae272cba._comment create mode 100644 doc/bugs/list__58___escaped_characters_not_accepted_as_input.mdwn create mode 100644 doc/bugs/list__58___escaped_characters_not_accepted_as_input/comment_1_823458893eb87f1331da050d68486209._comment create mode 100644 doc/bugs/list__58___escaped_characters_not_accepted_as_input/comment_2_bc1f89afe38c5136beb74160ff26e519._comment create mode 100644 doc/bugs/list__58___escaped_characters_not_accepted_as_input/comment_3_3aafdcc1b32439ec577fb090b94c6ac1._comment create mode 100644 doc/bugs/list__58___escaped_characters_not_accepted_as_input/comment_4_73c1495abff5284c42a8cf0537b19df4._comment create mode 100644 doc/bugs/loadlocale_error_with_standalone_build.mdwn create mode 100644 doc/bugs/loadlocale_error_with_standalone_build/comment_1_96a809060ed05100b6f8e5198ec699be._comment create mode 100644 doc/bugs/loadlocale_error_with_standalone_build/comment_2_e1c443ba943a5883ca63fbf05d3e5b41._comment create mode 100644 doc/bugs/loadlocale_error_with_standalone_build/comment_3_acb934b9e7d91aa59f49926e658c4bbe._comment create mode 100644 doc/bugs/loadlocale_error_with_standalone_build/comment_4_39366d601e4200a953fe375c7c96f106._comment create mode 100644 doc/bugs/loadlocale_error_with_standalone_build/comment_5_ce08bf5b13ae0db7fa06196f56a26e8a._comment create mode 100644 doc/bugs/loadlocale_error_with_standalone_build/comment_6_a852f4b40506edf9948c7953b01aa340._comment create mode 100644 doc/bugs/loadlocale_error_with_standalone_build/comment_6_b387cdacf97c476284640195e9fd03c9._comment create mode 100644 doc/bugs/loadlocale_error_with_standalone_build/comment_8_7820a310f6bf5f6f4c6c58fbfea8c85f._comment create mode 100644 doc/bugs/long_file_extensions___40__e.g._.numbers__41___dropped.mdwn create mode 100644 doc/bugs/long_file_extensions___40__e.g._.numbers__41___dropped/comment_1_0e3e0966f06ded18ecfd41f8084b4658._comment create mode 100644 doc/bugs/long_file_extensions___40__e.g._.numbers__41___dropped/comment_2_2836fe9dfa7b5140df1ce893044c254b._comment create mode 100644 doc/bugs/long_file_extensions___40__e.g._.numbers__41___dropped/comment_3_1f4bc975621d24e6e43d887693ada800._comment create mode 100644 doc/bugs/long_file_extensions___40__e.g._.numbers__41___dropped/comment_4_2cded724d1a4368dca475b89010c23e2._comment create mode 100644 doc/bugs/make___39__find__39___clear__40__er__41___on_what_is_unlocked_.mdwn create mode 100644 doc/bugs/make___39__find__39___clear__40__er__41___on_what_is_unlocked_/comment_1_b855c810464bb22bd76681d669313ae5._comment create mode 100644 doc/bugs/make___39__find__39___clear__40__er__41___on_what_is_unlocked_/comment_2_71b7b4417aa63e469636a03e460c2427._comment create mode 100644 doc/bugs/make_install_doesn__39__t_create_git-annex-shell.mdwn create mode 100644 doc/bugs/make_install_doesn__39__t_create_git-annex-shell/comment_1_8c20edd8c6483500f807528d616c6dfd._comment create mode 100644 doc/bugs/make_install_doesn__39__t_create_git-annex-shell/comment_2_8b2cf0fe7219e0bc83fd326adbf26c8a._comment create mode 100644 doc/bugs/make_install_doesn__39__t_create_git-annex-shell/comment_3_25fe06eb127e59a4a07aeb52a5cfeabe._comment create mode 100644 doc/bugs/make_install_doesn__39__t_create_git-annex-shell/comment_4_ec78032ba62d6918baa2c0b07ead5b50._comment create mode 100644 doc/bugs/matching_option_--onlyingroup_works_only_partially.mdwn create mode 100644 doc/bugs/matching_option_--onlyingroup_works_only_partially/comment_1_001927fce7b1c194076f76a092af414e._comment create mode 100644 doc/bugs/merge_causes_out_of_memory_on_large_repos.mdwn create mode 100644 doc/bugs/merge_causes_out_of_memory_on_large_repos/comment_1_6d47485728ea65a9b555f8be7159dea5._comment create mode 100644 doc/bugs/merge_causes_out_of_memory_on_large_repos/comment_2_06723d13ecdaf87de5ff2b209e3c5198._comment create mode 100644 doc/bugs/merge_causes_out_of_memory_on_large_repos/comment_3_9f83ef190547b291a715cda55b7977d4._comment create mode 100644 doc/bugs/merge_causes_out_of_memory_on_large_repos/comment_4_0e32ae0300472c56079cfbcd78a3e386._comment create mode 100644 doc/bugs/merge_causes_out_of_memory_on_large_repos/comment_5_e8998716107e7ae8d0e8d332812517ad._comment create mode 100644 doc/bugs/metadata_view_does_not_vpop_to_original_view.mdwn create mode 100644 doc/bugs/metadata_view_does_not_vpop_to_original_view/comment_1_91c69150533cb6c2147dcf2eb480ef39._comment create mode 100644 doc/bugs/metadata_view_does_not_vpop_to_original_view/comment_2_ca1cc0b0e5c53daffd0b5ca78a6ac43f._comment create mode 100644 doc/bugs/metadata_view_does_not_vpop_to_original_view/comment_3_63bef9006a1e4ba2ebbfafbdf605a9e1._comment create mode 100644 doc/bugs/metadata_view_does_not_vpop_to_original_view/comment_4_4873f0bc670b193cec3be327ee178a13._comment create mode 100644 doc/bugs/metadata_view_does_not_vpop_to_original_view/comment_5_bf63c9d3e0de468ffa5856dcf7c313b7._comment create mode 100644 doc/bugs/metadata_view_does_not_vpop_to_original_view/comment_6_83e389f5fdd58ffd62ead898ddbb5279._comment create mode 100644 doc/bugs/metadata_view_does_not_vpop_to_original_view/comment_7_a5511e21ee6c09d8edf2bca48482d848._comment create mode 100644 doc/bugs/metadata_view_does_not_vpop_to_original_view/comment_8_ef3e8e1c47984fc674e58646052205ef._comment create mode 100644 doc/bugs/migrate_and_move_duplicates_data.mdwn create mode 100644 doc/bugs/migrate_and_move_duplicates_data/comment_1_ac3c5c141992c7b5d2cc36e085b0cba8._comment create mode 100644 doc/bugs/migrate_and_move_duplicates_data/comment_2_68a876f2eed5c446d92367aae4070408._comment create mode 100644 doc/bugs/migrate_removes_associated_URLs_with_custom_scheme.mdwn create mode 100644 doc/bugs/migrate_removes_associated_URLs_with_custom_scheme/comment_1_6e9a2b3ff2be4e2b3ff5b67ac913efb8._comment create mode 100644 doc/bugs/migrated_files_not_showing_up_in_unused_list.mdwn create mode 100644 doc/bugs/migrated_files_not_showing_up_in_unused_list/comment_1_2cfbf6693b051c758fe5efa5ee885829._comment create mode 100644 doc/bugs/migrated_files_not_showing_up_in_unused_list/comment_2_acb1abeb32c3aba8ba65151afbea753c._comment create mode 100644 doc/bugs/mimeencoding_detection_is_not_working.mdwn create mode 100644 doc/bugs/mimeencoding_detection_is_not_working/comment_1_dbcdb6ae6fb1d06f4d5cf27cba4c69be._comment create mode 100644 doc/bugs/mimeencoding_detection_is_not_working/comment_2_b9df7eb812a4a2fba4b1273fbffe8375._comment create mode 100644 doc/bugs/mimeencoding_detection_is_not_working/comment_3_b02a321a1fd8aaeca1680cec96055172._comment create mode 100644 doc/bugs/moreinfo.mdwn create mode 100644 doc/bugs/move_from_ssh_when_not_present_displays_misleading.mdwn create mode 100644 doc/bugs/move_that_fails_at_drop_stage_does_not_resume_correctly.mdwn create mode 100644 doc/bugs/need_more_debug_for_failing_to_get_uuid_or_key_.mdwn create mode 100644 doc/bugs/need_more_debug_for_failing_to_get_uuid_or_key_/comment_1_6c3efd1922015a20daf93bea54fc6431._comment create mode 100644 doc/bugs/new_repo_with_git-lfs_as_only_annex_remote.mdwn create mode 100644 doc/bugs/new_repo_with_git-lfs_as_only_annex_remote/comment_1_804ecf5218ce147767352fea8ea5eae8._comment create mode 100644 doc/bugs/no_git-annex_shell_on_Windows.mdwn create mode 100644 doc/bugs/no_git-annex_shell_on_Windows/comment_10_72b2277c3728f02e4d158ebbd7db41b2._comment create mode 100644 doc/bugs/no_git-annex_shell_on_Windows/comment_11_b212c8b8cf361745f35a9f7ff6fee1f5._comment create mode 100644 doc/bugs/no_git-annex_shell_on_Windows/comment_12_9d445ddf84e15a59cdc2aa2b8dc30c44._comment create mode 100644 doc/bugs/no_git-annex_shell_on_Windows/comment_1_988768c3e4f30c751034a0b0390cdd88._comment create mode 100644 doc/bugs/no_git-annex_shell_on_Windows/comment_2_70a6c9af57eed4f8ceb3de63cbf8a5e6._comment create mode 100644 doc/bugs/no_git-annex_shell_on_Windows/comment_3_7f48959c6242c5cc52e9d0a79fd3f85d._comment create mode 100644 doc/bugs/no_git-annex_shell_on_Windows/comment_4_04b30dd9e510762ee547e7b45bdba660._comment create mode 100644 doc/bugs/no_git-annex_shell_on_Windows/comment_5_beebbd4a41cccfc7aac3c19d76c3b978._comment create mode 100644 doc/bugs/no_git-annex_shell_on_Windows/comment_6_957c5da5f336c7ef59e4149602471888._comment create mode 100644 doc/bugs/no_git-annex_shell_on_Windows/comment_7_a8654cf656de55ccdcf40270a1ef4ca9._comment create mode 100644 doc/bugs/no_git-annex_shell_on_Windows/comment_8_3c8bb1b1d67ca1a6e568e381d24a2574._comment create mode 100644 doc/bugs/no_git-annex_shell_on_Windows/comment_9_03646c9df9d4f4ea27459660fe65a976._comment create mode 100644 doc/bugs/no_way_to_disable_repository_auto_upgrade.mdwn create mode 100644 doc/bugs/no_way_to_disable_repository_auto_upgrade/comment_1_aab2cb260b68c25facd652946ea2aff7._comment create mode 100644 doc/bugs/no_way_to_disable_repository_auto_upgrade/comment_2_dc24c6c0c60bb11d6d871fa62585276d._comment create mode 100644 doc/bugs/no_way_to_disable_repository_auto_upgrade/comment_3_f3c10f35956dff886d961f1351af71ef._comment create mode 100644 doc/bugs/no_way_to_disable_repository_auto_upgrade/comment_4_7ea295a6c113ea0cc3e4e5ae28769190._comment create mode 100644 doc/bugs/non-git-annex_symlinks_not_perserved_when_exporting_tree_via_rsync.mdwn create mode 100644 doc/bugs/non-git-annex_symlinks_not_perserved_when_exporting_tree_via_rsync/comment_1_b92c67f7d2f0424ce399ca4659e6c805._comment create mode 100644 doc/bugs/non-repos_in_repositories_list___40__+_other_weird_output__41___from_git_annex_status.mdwn create mode 100644 doc/bugs/non-repos_in_repositories_list___40__+_other_weird_output__41___from_git_annex_status/comment_1_fcd230cbb2ac363c469b98021042c011._comment create mode 100644 doc/bugs/non-repos_in_repositories_list___40__+_other_weird_output__41___from_git_annex_status/comment_2_23207ecabd4b41d9551d0491fa71e96b._comment create mode 100644 doc/bugs/non-repos_in_repositories_list___40__+_other_weird_output__41___from_git_annex_status/comment_3_6ea92adfe955b6a5cd2a39fea78b3bf6._comment create mode 100644 doc/bugs/non-repos_in_repositories_list___40__+_other_weird_output__41___from_git_annex_status/comment_4_d0e55585f1612148163039d157253258._comment create mode 100644 doc/bugs/non-repos_in_repositories_list___40__+_other_weird_output__41___from_git_annex_status/comment_6_5506dc1b08516677886da4aa97263864._comment create mode 100644 doc/bugs/non-repos_in_repositories_list___40__+_other_weird_output__41___from_git_annex_status/comment_7_073449cc2cb73efd2b2d3d778a5573de._comment create mode 100644 doc/bugs/non-repos_in_repositories_list___40__+_other_weird_output__41___from_git_annex_status/comment_7_3516e71ba3b07427a10cbb4965712aa6._comment create mode 100644 doc/bugs/non-repos_in_repositories_list___40__+_other_weird_output__41___from_git_annex_status/comment_8_ea2e4704adb2f304f9c11c61eb62e919._comment create mode 100644 doc/bugs/non-repos_in_repositories_list___40__+_other_weird_output__41___from_git_annex_status/comment_9_4d17fedead7977541371a3f2c192e030._comment create mode 100644 doc/bugs/oldkeys_not_in_Windows_release_10.20230803.mdwn create mode 100644 doc/bugs/oldkeys_not_in_Windows_release_10.20230803/comment_1_9969cdc389617f4df2ee286e8d28176e._comment create mode 100644 doc/bugs/oldkeys_not_in_Windows_release_10.20230803/comment_2_b265af06b8edda75d305fd836f6c5242._comment create mode 100644 doc/bugs/on_encfs__44___.fuse__95__hiddenXXXXX_files_left_behind.mdwn create mode 100644 doc/bugs/on_encfs__44___.fuse__95__hiddenXXXXX_files_left_behind/comment_1_b96ea3ece44d42e79e4d903ca66065ee._comment create mode 100644 doc/bugs/openTempFile.mdwn create mode 100644 doc/bugs/openTempFile/comment_1_48b9ab6e3d4b24ec34d2a99b5a4ff619._comment create mode 100644 doc/bugs/openTempFile/comment_2_a09c4a7d346c3b0f7025e6f3a276adb8._comment create mode 100644 doc/bugs/openTempFile/comment_3_9b9f35c8ed31ca62b34d216c6906304c._comment create mode 100644 doc/bugs/openTempFile/comment_4_3397f9ddb94d4acb8af778ec15487022._comment create mode 100644 doc/bugs/performance_regression__63___init_takes_times_more.mdwn create mode 100644 doc/bugs/performance_regression__63___init_takes_times_more/comment_10_7aed761c4843217ea4c90491897224c1._comment create mode 100644 doc/bugs/performance_regression__63___init_takes_times_more/comment_11_847e04bbe9c59700249136b7fef4d0b7._comment create mode 100644 doc/bugs/performance_regression__63___init_takes_times_more/comment_12_603d7228668a36dc848e706cdff64035._comment create mode 100644 doc/bugs/performance_regression__63___init_takes_times_more/comment_13_a79fcbe80060d11582989a9fc31d4a92._comment create mode 100644 doc/bugs/performance_regression__63___init_takes_times_more/comment_14_8c3b13806adb731435b346a64990527b._comment create mode 100644 doc/bugs/performance_regression__63___init_takes_times_more/comment_15_145e29b42c46f15efc21c6d1ef9dd82d._comment create mode 100644 doc/bugs/performance_regression__63___init_takes_times_more/comment_16_783ada9438a00c0a23357bea2f19d0a1._comment create mode 100644 doc/bugs/performance_regression__63___init_takes_times_more/comment_17_d13e85f691165b533d6630a93111c786._comment create mode 100644 doc/bugs/performance_regression__63___init_takes_times_more/comment_18_13ce5ec87207d553388ec23663d9abcb._comment create mode 100644 doc/bugs/performance_regression__63___init_takes_times_more/comment_1_3f32fa3c6de412bfdab8a4e67a30012c._comment create mode 100644 doc/bugs/performance_regression__63___init_takes_times_more/comment_1_5e0a9e36870cd21bed351ca37ffe9914._comment create mode 100644 doc/bugs/performance_regression__63___init_takes_times_more/comment_3_d92bd84ab3f218eb6ad38fcc7f54c223._comment create mode 100644 doc/bugs/performance_regression__63___init_takes_times_more/comment_4_a3a5c3182ecb9fdef82f4959af516d9a._comment create mode 100644 doc/bugs/performance_regression__63___init_takes_times_more/comment_5_652424afbe5484a679c55d437cf1e7a1._comment create mode 100644 doc/bugs/performance_regression__63___init_takes_times_more/comment_6_3961ac7f22f42886f0e30f62f1cb0c5d._comment create mode 100644 doc/bugs/performance_regression__63___init_takes_times_more/comment_7_0894259447bde6d676c629d5bce2a6ba._comment create mode 100644 doc/bugs/performance_regression__63___init_takes_times_more/comment_8_7ce86149c0d839f6d2b14f76bab288be._comment create mode 100644 doc/bugs/performance_regression__63___init_takes_times_more/comment_9_d4ba8c726e8b74d4692caf0d4afd214c._comment create mode 100644 doc/bugs/poor_choice_of_name_for_adjusted_branches.mdwn create mode 100644 doc/bugs/poor_choice_of_name_for_adjusted_branches/comment_1_adbbc90054eafefa7de58663868986a3._comment create mode 100644 doc/bugs/poor_choice_of_name_for_adjusted_branches/comment_2_dc7b2ae4971324d34f6a8d89e888f598._comment create mode 100644 doc/bugs/poor_choice_of_name_for_adjusted_branches/comment_3_19ce066c0b912398300caf8520f70eb3._comment create mode 100644 doc/bugs/preferred_content__58___include_statement_does_not_allow_spaces_in_filenames.mdwn create mode 100644 doc/bugs/preferred_content__58___include_statement_does_not_allow_spaces_in_filenames/comment_1_ca10638d4b4b178cfd0de8736542c4dc._comment create mode 100644 doc/bugs/preferred_content__58___include_statement_does_not_allow_spaces_in_filenames/comment_2_986a393a512229d35e529ba242b77b1e._comment create mode 100644 doc/bugs/preferred_content__58___include_statement_does_not_allow_spaces_in_filenames/comment_3_a66be1cc2c4ca7e470be1248dcbbe885._comment create mode 100644 doc/bugs/preferred_content__58___include_statement_does_not_allow_spaces_in_filenames/comment_4_7a8f1ba849f6e6f6072c39bdbff49405._comment create mode 100644 doc/bugs/present_files__47__directories_are_dropped_after_a_sync.mdwn create mode 100644 doc/bugs/present_files__47__directories_are_dropped_after_a_sync/comment_1_9d7591faf99ce48b1e5753c80306ae8b._comment create mode 100644 doc/bugs/present_files__47__directories_are_dropped_after_a_sync/comment_2_7316cba69b9dc0415fea1389238edf25._comment create mode 100644 doc/bugs/present_files__47__directories_are_dropped_after_a_sync/comment_3_0d53226a3991e3685d1311e4b19c4023._comment create mode 100644 doc/bugs/present_files__47__directories_are_dropped_after_a_sync/comment_4_68bd50c6aeffc06d53eda7f38b06edee._comment create mode 100644 doc/bugs/problem_commit_normal_links.mdwn create mode 100644 doc/bugs/problem_with_upgrade_v2_-__62___v3.mdwn create mode 100644 doc/bugs/problem_with_upgrade_v2_-__62___v3/comment_1_5f60006c9bb095167d817f234a14d20b._comment create mode 100644 doc/bugs/problem_with_upgrade_v2_-__62___v3/comment_2_cd0123392b16d89db41b45464165c247._comment create mode 100644 doc/bugs/problem_with_upgrade_v2_-__62___v3/comment_3_86d9e7244ae492bcbe62720b8c4fc4a9._comment create mode 100644 doc/bugs/problem_with_upgrade_v2_-__62___v3/comment_4_91439d4dbbf1461e281b276eb0003691._comment create mode 100644 doc/bugs/problem_with_upgrade_v2_-__62___v3/comment_5_ca33a9ca0df33f7c1b58353d7ffb943d._comment create mode 100644 doc/bugs/problem_with_upgrade_v2_-__62___v3/comment_6_f360f0006bc9115bc5a3e2eb9fe58abd._comment create mode 100644 doc/bugs/proposal_for_timestamp_semantics.mdwn create mode 100644 doc/bugs/proposal_for_timestamp_semantics/comment_1_a54fc1bda24e04b15490d0eaa1838d28._comment create mode 100644 doc/bugs/proposal_for_timestamp_semantics/comment_2_8ba9e0c35e7761b99feb55bcdd6065cf._comment create mode 100644 doc/bugs/pull_doesn__39__t_work_on_adjusted_branches.mdwn create mode 100644 doc/bugs/pull_doesn__39__t_work_on_adjusted_branches/comment_1_2c5f51483b2f2521d98f943d8ded3acd._comment create mode 100644 doc/bugs/pull_doesn__39__t_work_on_adjusted_branches/comment_2_632a3616516605de477930ae09d4ca60._comment create mode 100644 doc/bugs/ran_once_then_stopped_running_opensuse_13.1.mdwn create mode 100644 doc/bugs/ran_once_then_stopped_running_opensuse_13.1/comment_1_a9daf9e8f968b32f25e236f53ea4b845._comment create mode 100644 doc/bugs/random_files_vanishing_when_assistant_gets_restarted.mdwn create mode 100644 doc/bugs/random_files_vanishing_when_assistant_gets_restarted/comment_1_53b4f388c47c1b3f6ffa4fc2155b30fc._comment create mode 100644 doc/bugs/random_files_vanishing_when_assistant_gets_restarted/comment_2_e66532b23b089c9ea61122d6664cddb9._comment create mode 100644 doc/bugs/random_files_vanishing_when_assistant_gets_restarted/comment_3_c9d692c867acc076f64f1213ea03ca11._comment create mode 100644 doc/bugs/redundant_transfer_not_prevented.mdwn create mode 100644 doc/bugs/registerurl_does_not_register_if_external_remote.mdwn create mode 100644 doc/bugs/registerurl_does_not_register_if_external_remote/comment_1_124bbd63a2a85004ff9cf965ad984fb4._comment create mode 100644 doc/bugs/registerurl_does_not_register_if_external_remote/comment_2_0f4d7c7f208b965ece8f017a38d7d0f1._comment create mode 100644 doc/bugs/registerurl_does_not_register_if_external_remote/comment_3_31330afe2ea5e543219edb9e8071239b._comment create mode 100644 doc/bugs/registerurl_does_not_register_if_external_remote/comment_4_4f2c98add8a4f7b9f49e54e12fd79f10._comment create mode 100644 doc/bugs/registerurl_does_not_register_if_external_remote/comment_5_b9057ce47bb57b3a3dbe390672310898._comment create mode 100644 doc/bugs/registerurl_does_not_register_if_external_remote/comment_6_7a96a8a05e4a45477ec8b4eaea9374b1._comment create mode 100644 doc/bugs/registerurl_does_not_register_if_external_remote/comment_7_649f04c1909ab803eabe2eea7f37c6fd._comment create mode 100644 doc/bugs/registerurl_does_not_register_if_external_remote/comment_8_542bd923122ba24fe9cb14d36b97f15d._comment create mode 100644 doc/bugs/regression_with_S3_creds_not_used.mdwn create mode 100644 doc/bugs/regression_with_S3_creds_not_used/comment_1_df5416ee63c8f026f3b3c77c74b67ce4._comment create mode 100644 doc/bugs/remote_files_appear_but_are_unreadable_because_their_symlink_targets_don__39__t_exist.mdwn create mode 100644 doc/bugs/remote_files_appear_but_are_unreadable_because_their_symlink_targets_don__39__t_exist/comment_10_8a1d16b2aaba224e94be3d9dcc036d91._comment create mode 100644 doc/bugs/remote_files_appear_but_are_unreadable_because_their_symlink_targets_don__39__t_exist/comment_11_434ed328a22a6657dba3b2929a56e499._comment create mode 100644 doc/bugs/remote_files_appear_but_are_unreadable_because_their_symlink_targets_don__39__t_exist/comment_12_1837b70ace42882db3ab82e001680934._comment create mode 100644 doc/bugs/remote_files_appear_but_are_unreadable_because_their_symlink_targets_don__39__t_exist/comment_13_ca9c87a10f29e41572540edeb99652f2._comment create mode 100644 doc/bugs/remote_files_appear_but_are_unreadable_because_their_symlink_targets_don__39__t_exist/comment_1_69eafc4201e3014ef1b5d74fe319e462._comment create mode 100644 doc/bugs/remote_files_appear_but_are_unreadable_because_their_symlink_targets_don__39__t_exist/comment_2_b7a64db9abe006af8c30169ad849efe9._comment create mode 100644 doc/bugs/remote_files_appear_but_are_unreadable_because_their_symlink_targets_don__39__t_exist/comment_3_197ac6070f256131c6e18a07aa3834fa._comment create mode 100644 doc/bugs/remote_files_appear_but_are_unreadable_because_their_symlink_targets_don__39__t_exist/comment_4_fe07832333b536c71b7dcb46a4a44bd0._comment create mode 100644 doc/bugs/remote_files_appear_but_are_unreadable_because_their_symlink_targets_don__39__t_exist/comment_5_540bca4e6fdfc10eeab875ecc0f2b3f3._comment create mode 100644 doc/bugs/remote_files_appear_but_are_unreadable_because_their_symlink_targets_don__39__t_exist/comment_6_3f236b35e9820cd88bb77fcd57d6975e._comment create mode 100644 doc/bugs/remote_files_appear_but_are_unreadable_because_their_symlink_targets_don__39__t_exist/comment_7_3cc5dae0351201522711a7caeecd60d5._comment create mode 100644 doc/bugs/remote_files_appear_but_are_unreadable_because_their_symlink_targets_don__39__t_exist/comment_8_3c3883cb66d02a15d5de84d22aa113da._comment create mode 100644 doc/bugs/remote_files_appear_but_are_unreadable_because_their_symlink_targets_don__39__t_exist/comment_9_c8cece9559bd2dc6154cd28772369e48._comment create mode 100644 doc/bugs/remote_not_showing_up_in_webapp.mdwn create mode 100644 doc/bugs/remote_not_showing_up_in_webapp/comment_1_2a269732fd528f505777542d3556437a._comment create mode 100644 doc/bugs/remote_not_showing_up_in_webapp/comment_2_10638e99e2e11460f99266f56adbc1db._comment create mode 100644 doc/bugs/remote_not_showing_up_in_webapp/comment_3_4aa72acc0938f7f824ba10f3f102e8bc._comment create mode 100644 doc/bugs/remotes_disappeared.mdwn create mode 100644 doc/bugs/remotes_disappeared/comment_1_7b7bfa0b2c9e66edd92c076e5c6ccdd7._comment create mode 100644 doc/bugs/remotes_disappeared/comment_2_b9dae978aeeee5e5d246192fed813b3f._comment create mode 100644 doc/bugs/remotes_disappeared/comment_3_794372fb37621f37478313abc4ee92cf._comment create mode 100644 doc/bugs/repair_on_Windows_reports_ambiguous_argument_error.mdwn create mode 100644 doc/bugs/resolvemerge_fails_when_unlocked_empty_files_exist.mdwn create mode 100644 doc/bugs/resolvemerge_fails_when_unlocked_empty_files_exist/comment_1_66ff5ff20c4a1561943f8fc144a4dfb5._comment create mode 100644 doc/bugs/resolvemerge_fails_when_unlocked_empty_files_exist/comment_2_28e204f5db91eaa258428d89cbb9f6c9._comment create mode 100644 doc/bugs/resolvemerge_fails_when_unlocked_empty_files_exist/comment_3_68ddf1256149eec1ac01fb915d26bac3._comment create mode 100644 doc/bugs/resolvemerge_fails_when_unlocked_empty_files_exist/comment_4_785200bbdc9efabed141ecd51cb015a4._comment create mode 100644 doc/bugs/resolvemerge_fails_when_unlocked_empty_files_exist/comment_5_3b5f7c44de6b17e042adaa77a8bed2f8._comment create mode 100644 doc/bugs/resolvemerge_fails_when_unlocked_empty_files_exist/comment_6_baa4f1e895ff351b16f54d59851d2a6f._comment create mode 100644 doc/bugs/rsync__58___protocol_version_mismatch.mdwn create mode 100644 doc/bugs/rsync__58___protocol_version_mismatch/comment_1_672d89a7d06d5ec336381b670a41a9c7._comment create mode 100644 doc/bugs/rsync__58___protocol_version_mismatch/comment_2_531b85c911d390b1b93ee55a8cf5d47e._comment create mode 100644 doc/bugs/rsync__58___protocol_version_mismatch/comment_3_eff8f33134157635387ee681805ff7a8._comment create mode 100644 doc/bugs/rsync__58___protocol_version_mismatch/comment_4_77e59a25c859b6afec8b75f74885ef5e._comment create mode 100644 doc/bugs/rsync__58___protocol_version_mismatch/comment_5_7d819c3e4af2b8044a52fa6131f36187._comment create mode 100644 doc/bugs/rsync_fails_with_sync_error__58___syntax_or_usage_error_.mdwn create mode 100644 doc/bugs/rsync_fails_with_sync_error__58___syntax_or_usage_error_/comment_1_464d733de18f6ca438ebd84e88b8cee2._comment create mode 100644 doc/bugs/s3_InternalIOException__63__.mdwn create mode 100644 doc/bugs/s3_InternalIOException__63__/comment_1_42bd2d1e364203f1b34efcc34ac795b8._comment create mode 100644 doc/bugs/s3_InternalIOException__63__/comment_2_994dd3ebcf7eaacb0b9e06f1bc14a2d4._comment create mode 100644 doc/bugs/s3_InternalIOException__63__/comment_3_a69927ec705efa31aacb5941bf8d8f9d._comment create mode 100644 doc/bugs/s3_InternalIOException__63__/comment_4_ee791ad24d5d2c0ad4f82ecf6fc434a9._comment create mode 100644 doc/bugs/s3_InternalIOException__63__/comment_5_134d1d0ad9f59a2b7498d1ed335cf91a._comment create mode 100644 doc/bugs/s3_remote__58___public__61__yes_sets_disabled_ACLs.mdwn create mode 100644 doc/bugs/s3_remote__58___public__61__yes_sets_disabled_ACLs/comment_1_0bf1f463133476727129ddf15f24983b._comment create mode 100644 doc/bugs/safe.bareRepository_breaks_git-annex_uuid.mdwn create mode 100644 doc/bugs/safe.bareRepository_breaks_git-annex_uuid/comment_1_0a5faade2dfbb0dfe5d94d37450ba06c._comment create mode 100644 doc/bugs/schedule.log_added_to_annex__63_____58____47____47____47__.mdwn create mode 100644 doc/bugs/securehashesonly_conflicts_with_addurl.mdwn create mode 100644 doc/bugs/securehashesonly_conflicts_with_addurl/comment_1_808e276381f98b4ebb7d61628db703d9._comment create mode 100644 doc/bugs/shared_encryption_bypassed_if_gpg_error_on_init.mdwn create mode 100644 doc/bugs/should_be_possible_to_use_ssh_hosts_from_.ssh__47__config.mdwn create mode 100644 doc/bugs/should_be_possible_to_use_ssh_hosts_from_.ssh__47__config/comment_1_3dac095b7cf799e31925868d13888970._comment create mode 100644 doc/bugs/should_be_possible_to_use_ssh_hosts_from_.ssh__47__config/comment_2_342b4913a063184650cdf4f541f7ea02._comment create mode 100644 doc/bugs/should_create_leading_dirs_for_annex.dbdir.mdwn create mode 100644 doc/bugs/should_create_leading_dirs_for_annex.dbdir/comment_1_20cbcee65bccc3213e437ef347b52612._comment create mode 100644 doc/bugs/should_error_on_whereis_--batch-keys_--all.mdwn create mode 100644 doc/bugs/should_error_on_whereis_--batch-keys_--all/comment_1_724ae0427fb306352ff9b26d9fdef27a._comment create mode 100644 doc/bugs/silently_failing_when_attempting_to_add_ignored_files.mdwn create mode 100644 doc/bugs/silently_failing_when_attempting_to_add_ignored_files/comment_1_f1208fda822d17a3a9e5457324fdd1df._comment create mode 100644 doc/bugs/silently_failing_when_attempting_to_add_ignored_files/comment_2_9fe7fd6296db34ee8ee07fe68459e74b._comment create mode 100644 doc/bugs/some_conflict_resolution_tests_fail_some_time.mdwn create mode 100644 doc/bugs/some_conflict_resolution_tests_fail_some_time/comment_1_bd9963c2a40b55bf745ce3d801a5da19._comment create mode 100644 doc/bugs/some_conflict_resolution_tests_fail_some_time/comment_2_f7b38a6da0ce74c1d4224a37aad9246a._comment create mode 100644 doc/bugs/special_remote_adb_-_Argument_list_too_long.mdwn create mode 100644 doc/bugs/special_remote_adb_-_Argument_list_too_long/comment_1_34f202f91a16dd4d2bb557aee6fd5a3e._comment create mode 100644 doc/bugs/special_remote_protocol__58___adding_local_state_variables___40__not_under_git__41__.mdwn create mode 100644 doc/bugs/special_remote_protocol__58___adding_local_state_variables___40__not_under_git__41__/comment_1_3d162dce2af8d84c5582cf63624e9310._comment create mode 100644 doc/bugs/started_to_escape_characters_in_the_output.mdwn create mode 100644 doc/bugs/started_to_escape_characters_in_the_output/comment_1_1d0f25da3af46d211445d10f0d6c143e._comment create mode 100644 doc/bugs/started_to_escape_characters_in_the_output/comment_2_76c80e98cc2d26e4cebaac6e40e76df9._comment create mode 100644 doc/bugs/started_to_escape_characters_in_the_output/comment_3_0fe421cd62c36804a78e4b424302e3d7._comment create mode 100644 doc/bugs/started_to_escape_characters_in_the_output/comment_4_d3c423c3faecc115bb5bab3471226ee5._comment create mode 100644 doc/bugs/started_to_escape_characters_in_the_output/comment_6_783b2bdf1826f472d8f39d01e81adf20._comment create mode 100644 doc/bugs/started_to_escape_characters_in_the_output/comment_6_b8da1f30c5bc88f4ddb7878d790823cd._comment create mode 100644 doc/bugs/started_to_escape_characters_in_the_output/comment_7_c855cc0728c71e9a4696a192cd331213._comment create mode 100644 doc/bugs/started_to_escape_characters_in_the_output/comment_8_ee066c129d808ac511c0efce9a644ab9._comment create mode 100644 doc/bugs/started_to_escape_characters_in_the_output/comment_9_41bac25db7cc8978659c2e202960a2a4._comment create mode 100644 doc/bugs/startup_scan_extremely_slow.mdwn create mode 100644 doc/bugs/startup_scan_extremely_slow/comment_1_68f88f04c179800c0ce1ff6925d4c6ab._comment create mode 100644 doc/bugs/startup_scan_extremely_slow/comment_2_116e850299372027481c9d0a1667d5af._comment create mode 100644 doc/bugs/startup_scan_extremely_slow/comment_3_3eb4c2290e560451e7341b85b58212b0._comment create mode 100644 doc/bugs/startup_scan_extremely_slow/comment_4_ade878000a050c87a345e8bc9914deba._comment create mode 100644 doc/bugs/startup_scan_extremely_slow/comment_5_4ee924e70d5a8e35e706eaaff4cc76e1._comment create mode 100644 doc/bugs/still_seeing_errors_with_parallel_git-annex-add.mdwn create mode 100644 doc/bugs/still_seeing_errors_with_parallel_git-annex-add/comment_1_b38f13a4c28ad8ce26aef72e7d6fcb11._comment create mode 100644 doc/bugs/still_seeing_errors_with_parallel_git-annex-add/comment_2_96312bab546412b1eecfa74aec1d7fee._comment create mode 100644 doc/bugs/still_seeing_errors_with_parallel_git-annex-add/comment_3_e76ddebaf9d248c02d16a6914973d7d0._comment create mode 100644 doc/bugs/support_bare_git_repo__44___with_the_annex_directory_exposed_to_http.mdwn create mode 100644 doc/bugs/surprising_import_tree_merge_result.mdwn create mode 100644 doc/bugs/sync-git-annex_branch_not_syncing_in_the_assistant.mdwn create mode 100644 doc/bugs/sync-git-annex_branch_not_syncing_in_the_assistant/comment_1_b832288844a3e7e944fa08a6edb97d29._comment create mode 100644 doc/bugs/sync-git-annex_branch_not_syncing_in_the_assistant/comment_2_fbfc8929497f609916d9f3e5a0a9b531._comment create mode 100644 doc/bugs/sync_--content_succeeds_w__47__o_fetching_all_files.mdwn create mode 100644 doc/bugs/sync_--content_succeeds_w__47__o_fetching_all_files/comment_1_500bc8f48ae80841e0db21ee0de76c50._comment create mode 100644 doc/bugs/sync_--content_succeeds_w__47__o_fetching_all_files/comment_1_9581f8135c6eb2ed2135f83a266e5306._comment create mode 100644 doc/bugs/sync_--content_succeeds_w__47__o_fetching_all_files/comment_3_dbc8ad383c4968b1ab78ac86bab06329._comment create mode 100644 doc/bugs/sync_--content_succeeds_w__47__o_fetching_all_files/comment_4_23a16e94a0f18126caa6cb2f94131277._comment create mode 100644 doc/bugs/sync_-C_can_export_other_files.mdwn create mode 100644 doc/bugs/sync_-C_can_export_other_files/comment_1_7a6ab3ee25f0d09df4d7478d26ea2d37._comment create mode 100644 doc/bugs/sync_claims_data_loss_but_seems_to_just_lose_tracking.mdwn create mode 100644 doc/bugs/sync_claims_data_loss_but_seems_to_just_lose_tracking/comment_1_562cf3ab3398c1ef874c0bfe5d89e47b._comment create mode 100644 doc/bugs/sync_claims_data_loss_but_seems_to_just_lose_tracking/comment_2_f686273c6be899d2a8bbaabd03a47fbf._comment create mode 100644 doc/bugs/sync_claims_data_loss_but_seems_to_just_lose_tracking/comment_3_fd518d0601587dc5c718944d0b6f51fc._comment create mode 100644 doc/bugs/sync_claims_data_loss_but_seems_to_just_lose_tracking/comment_4_a6074b68754b0d773385a1e406043952._comment create mode 100644 doc/bugs/sync_does_not_merge_after_branch_rollback.mdwn create mode 100644 doc/bugs/sync_does_not_merge_after_branch_rollback/comment_1_8c5f4787a6156802d00cfad1f7d2ee31._comment create mode 100644 doc/bugs/sync_does_not_propagate_forgetfulness.mdwn create mode 100644 doc/bugs/sync_does_not_propagate_forgetfulness/comment_1_acc9744be183c297c6410f9b0a30b46b._comment create mode 100644 doc/bugs/sync_does_not_sync_content_with_new_remote_on_first_run.mdwn create mode 100644 doc/bugs/sync_does_not_sync_content_with_new_remote_on_first_run/comment_1_c1df7f51ac724400dbef664ce10784a8._comment create mode 100644 doc/bugs/sync_with_export_remote_deletes_files_from_it_when_ran_in_other_than_tracking_branch.mdwn create mode 100644 doc/bugs/tahoe_remote_has_no_repair.mdwn create mode 100644 doc/bugs/tasty_test_limiting_broken_by_concurrency.mdwn create mode 100644 doc/bugs/tasty_test_limiting_broken_by_concurrency/comment_1_e043a71b60999cf97bd872d8b32fcac9._comment create mode 100644 doc/bugs/test__58___posix__95__spawnp_broken_10_on_darwin.mdwn create mode 100644 doc/bugs/test__58___posix__95__spawnp_broken_10_on_darwin/comment_1_5741fabaa561b81989cc176e9acb4a99._comment create mode 100644 doc/bugs/test__58___posix__95__spawnp_broken_10_on_darwin/comment_2_3fb2b47ade727a1bc6a99120b68d98b7._comment create mode 100644 doc/bugs/test_prop__95__relPathDirToFileAbs__95__basics_fails_again.mdwn create mode 100644 doc/bugs/testremote_failure_with_s3.mdwn create mode 100644 doc/bugs/testremote_is_not_honoring_--backend.mdwn create mode 100644 doc/bugs/testremote_is_not_honoring_--backend/comment_1_2b119f8bce39266630dd7c0f4d8add98._comment create mode 100644 doc/bugs/testremote_is_not_honoring_--backend/comment_2_f804c33243606cab4495238511e59743._comment create mode 100644 doc/bugs/testremote_is_not_honoring_--backend/comment_3_1261222f79d9dbc8cf92f6466361e113._comment create mode 100644 doc/bugs/testremote_is_not_honoring_--backend/comment_4_b6b4e0b7446f445591ac617e28e249e3._comment create mode 100644 doc/bugs/testremote_is_not_honoring_--backend/comment_5_96a03ff1d7339643e8f74e6e536e8f83._comment create mode 100644 doc/bugs/testremote_is_not_honoring_--backend/comment_6_7a9cb82671ff8a459886a84e66cb2417._comment create mode 100644 doc/bugs/testremote_is_not_honoring_--backend/comment_7_ed8668ea11a905b90892eb684f93a4ed._comment create mode 100644 doc/bugs/testremote_is_not_honoring_--backend/comment_8_3f17e1804ff779c5f9d00e56daf18ee3._comment create mode 100644 doc/bugs/tests___34__exit_code_124__34___with_HOME_and_PWD_on_NFS.mdwn create mode 100644 doc/bugs/tests___34__exit_code_124__34___with_HOME_and_PWD_on_NFS/comment_1_dd4734cec6290cd3eacd58545ef039e4._comment create mode 100644 doc/bugs/tests___34__exit_code_124__34___with_HOME_and_PWD_on_NFS/comment_2_da46fc7a6bbdae0c3b44d241bc527b55._comment create mode 100644 doc/bugs/tests___34__exit_code_124__34___with_HOME_and_PWD_on_NFS/comment_3_82b8570c9496ee1b111dbd1ea53e823c._comment create mode 100644 doc/bugs/tests___34__exit_code_124__34___with_HOME_and_PWD_on_NFS/comment_4_e854aae525b7d4902fe2bc0f2c11ae5a._comment create mode 100644 doc/bugs/tls__58___peer_does_not_support_Extended_Main_Secret.mdwn create mode 100644 doc/bugs/tls__58___peer_does_not_support_Extended_Main_Secret/comment_1_731db4542017bef831bc7a06b70f79fb._comment create mode 100644 doc/bugs/too_aggressive_in_claiming___34__Transfer_stalled__34____63__.mdwn create mode 100644 doc/bugs/too_aggressive_in_claiming___34__Transfer_stalled__34____63__/comment_1_db83f6a38cae36da89f0ab4ef83021d8._comment create mode 100644 doc/bugs/too_aggressive_in_claiming___34__Transfer_stalled__34____63__/comment_2_2aeb065a257729e852055533aff04650._comment create mode 100644 doc/bugs/too_aggressive_in_claiming___34__Transfer_stalled__34____63__/comment_3_f8bd6a233d835bdc413bbf0127608431._comment create mode 100644 doc/bugs/too_aggressive_in_claiming___34__Transfer_stalled__34____63__/comment_4_320828c8d39d1f030d1797b539dbb22e._comment create mode 100644 doc/bugs/too_aggressive_in_claiming___34__Transfer_stalled__34____63__/comment_5_9fc2d7f4b39615e43bce3993e0a6e647._comment create mode 100644 doc/bugs/too_aggressive_in_claiming___34__Transfer_stalled__34____63__/comment_6_1b2eb9993e220082f3be5dd568deef3e._comment create mode 100644 doc/bugs/too_many_ssh_connections_during_sync_of_gcrypt_remotes.mdwn create mode 100644 doc/bugs/too_many_ssh_connections_during_sync_of_gcrypt_remotes/comment_1_8522285987f6d231c851861418af633a._comment create mode 100644 doc/bugs/too_many_ssh_connections_during_sync_of_gcrypt_remotes/comment_2_f87b3ba05c0cdfadd4d5da894dea0abb._comment create mode 100644 doc/bugs/touch.hsc_has_problems_on_non-linux_based_systems.mdwn create mode 100644 doc/bugs/touch.hsc_has_problems_on_non-linux_based_systems/comment_1_1d38283c9ea87174f3bbef9a58f5cb88._comment create mode 100644 doc/bugs/touch.hsc_has_problems_on_non-linux_based_systems/comment_2_bf112edd075fbebe4fc959a387946eb9._comment create mode 100644 doc/bugs/touch.hsc_has_problems_on_non-linux_based_systems/comment_3_a46080fbe82adf0986c5dc045e382501._comment create mode 100644 doc/bugs/touch.hsc_has_problems_on_non-linux_based_systems/comment_4_760437bf3ba972a775bb190fb4b38202._comment create mode 100644 doc/bugs/touch.hsc_has_problems_on_non-linux_based_systems/comment_5_060ba5ea88dcab2f4a0c199f13ef4f67._comment create mode 100644 doc/bugs/touch.hsc_has_problems_on_non-linux_based_systems/comment_6_548303d6ffb21a9370b6904f41ff49c1._comment create mode 100644 doc/bugs/touch.hsc_has_problems_on_non-linux_based_systems/comment_7_7ca00527ab5db058aadec4fe813e51fd._comment create mode 100644 doc/bugs/touch.hsc_has_problems_on_non-linux_based_systems/comment_8_881aecb9ae671689453f6d5d780d844b._comment create mode 100644 doc/bugs/uftp_5__58___invalid_key_type.mdwn create mode 100644 doc/bugs/unannex__58___Cannot_proceed_with_uncommitted_changes_staged_in_the_index.mdwn create mode 100644 doc/bugs/unannex__58___Cannot_proceed_with_uncommitted_changes_staged_in_the_index/comment_1_1c0cad1076d5d4d908b8297e7c13ea33._comment create mode 100644 doc/bugs/unannex__58___Cannot_proceed_with_uncommitted_changes_staged_in_the_index/comment_2_4609f9a1545b08e08021bf786561f5e5._comment create mode 100644 doc/bugs/unannex__58___Cannot_proceed_with_uncommitted_changes_staged_in_the_index/comment_3_6c99a97d56b1a3b12092c15fafcf8761._comment create mode 100644 doc/bugs/uninit_fails_when_I_symlink_your_symlink.mdwn create mode 100644 doc/bugs/uninit_fails_when_I_symlink_your_symlink/comment_5_3fe7520813dee36ffb5419ed70ea43b5._comment create mode 100644 doc/bugs/uninit_fails_when_I_symlink_your_symlink/comment_6_3afdea4f3705a9cfaa971ed3aa9f114c._comment create mode 100644 doc/bugs/unlocked_files_feel_too_slow_.mdwn create mode 100644 doc/bugs/unnecessary_work_when_drop_cannot_possibly_succeed.mdwn create mode 100644 doc/bugs/unusable_with_ghc_8.10.7_on_DragonFlyBSD.mdwn create mode 100644 doc/bugs/unusable_with_ghc_8.10.7_on_DragonFlyBSD/comment_1_70b807c69be263fd53c578fe6ec84561._comment create mode 100644 doc/bugs/unusable_with_ghc_8.10.7_on_DragonFlyBSD/comment_2_eeff3cb51df849b783446e238de002a8._comment create mode 100644 doc/bugs/unusable_with_ghc_8.10.7_on_DragonFlyBSD/comment_3_641473e43c8da7e7be02658cf8d3bd3e._comment create mode 100644 doc/bugs/unusable_with_ghc_8.10.7_on_DragonFlyBSD/comment_4_59e2ea4d59d5f4a8472cc8c945b8a419._comment create mode 100644 doc/bugs/unusable_with_ghc_8.10.7_on_DragonFlyBSD/comment_5_27a017a942f805e9b0216e77d4890c86._comment create mode 100644 doc/bugs/use_reflink_to_export_to_directory_special_remote.mdwn create mode 100644 doc/bugs/using_old_remote_format_generates_irritating_output.mdwn create mode 100644 doc/bugs/using_old_remote_format_generates_irritating_output/comment_1_fceba878f1097e27f056580e8d6d5b31._comment create mode 100644 doc/bugs/using_old_remote_format_generates_irritating_output/comment_2_416992874813f120721a56d88b2bef65._comment create mode 100644 doc/bugs/using_old_remote_format_generates_irritating_output/comment_3_a20f470c5226ac5693eb15146a02b3f5._comment create mode 100644 doc/bugs/using_old_remote_format_generates_irritating_output/comment_4_a81f06191bc03a7aad5929af99f0634e._comment create mode 100644 doc/bugs/using_old_remote_format_generates_irritating_output/comment_5_7438caecf78b4fb5d21f9f31dff95cf2._comment create mode 100644 doc/bugs/v6_appears_to_not_thin.mdwn create mode 100644 doc/bugs/v6_appears_to_not_thin/comment_1_d62791da504f6cf9bb26fa588756234c._comment create mode 100644 doc/bugs/v6_appears_to_not_thin/comment_2_82ff17c4063791d91a4fbe4e31802595._comment create mode 100644 doc/bugs/v6_appears_to_not_thin/comment_3_69afd9bc3f250418ba33cb1abeb2078d._comment create mode 100644 doc/bugs/v6_appears_to_not_thin/comment_4_bba7ba9c5b93fa33fc728daa0bb89497._comment create mode 100644 doc/bugs/v8_repo_auto_upgrades_to_v10.mdwn create mode 100644 doc/bugs/v8_repo_auto_upgrades_to_v10/comment_1_446aa74f0b54918dc8737483e3e8564a._comment create mode 100644 doc/bugs/vicfg_and_description_often_not_propagated.mdwn create mode 100644 doc/bugs/vicfg_and_description_often_not_propagated/comment_1_60c5ba2de0c8b9b4538a4abd146007f6._comment create mode 100644 doc/bugs/vicfg_and_description_often_not_propagated/comment_2_d56aed617e0791aa17d9f37c8d3fd317._comment create mode 100644 doc/bugs/view_branch_on_top_of_adjusted_branch_doesn__39__t_sync.mdwn create mode 100644 doc/bugs/view_branch_on_top_of_adjusted_branch_doesn__39__t_sync/comment_1_3c0be3ff163aae411f323e3445af94b1._comment create mode 100644 doc/bugs/views_do_use_utf8_for_chars_that_does_not_need_to.mdwn create mode 100644 doc/bugs/views_do_use_utf8_for_chars_that_does_not_need_to/comment_1_a6014d95b0ac0dc20e9495a717d6d615._comment create mode 100644 doc/bugs/views_do_use_utf8_for_chars_that_does_not_need_to/comment_2_323f1be80e2422e73ebd99b702a28e80._comment create mode 100644 doc/bugs/views_do_use_utf8_for_chars_that_does_not_need_to/comment_3_576c31b2cc5031cfb64ff58a1866b3b5._comment create mode 100644 doc/bugs/views_do_use_utf8_for_chars_that_does_not_need_to/comment_4_4097e8dde9d9fe29b540112f7400689a._comment create mode 100644 doc/bugs/views_do_use_utf8_for_chars_that_does_not_need_to/comment_5_5e5441cca2f3bbc252029aca358e9a47._comment create mode 100644 doc/bugs/warning__58___unable_to_convert_submodule_to_form_that_.mdwn create mode 100644 doc/bugs/warning__58___unable_to_convert_submodule_to_form_that_/comment_2_1d3214382c2bb604101a835c0bb7f146._comment create mode 100644 doc/bugs/warning__58___unable_to_convert_submodule_to_form_that_/comment_2_7f4800ee68c98606bc8a3ce959646014._comment create mode 100644 doc/bugs/warning__58___unable_to_convert_submodule_to_form_that_/comment_3_54c9716cd5cab7b196549af2f90bed0a._comment create mode 100644 doc/bugs/warning__58___unable_to_convert_submodule_to_form_that_/comment_4_864988b3ebc11ea9e92c55ee765d6d5c._comment create mode 100644 doc/bugs/warning__58___unable_to_convert_submodule_to_form_that_/comment_5_06d31ed5a8c187cec7bc90339550b5e8._comment create mode 100644 doc/bugs/warning__58___unable_to_convert_submodule_to_form_that_/comment_6_5e7007182372d28ceb11a8692e2cf801._comment create mode 100644 doc/bugs/warning__58___unable_to_convert_submodule_to_form_that_/comment_7_4de04de71792801f50256214f4b5fe9f._comment create mode 100644 doc/bugs/webapp_--listen_port_is_not_used__63__.mdwn create mode 100644 doc/bugs/webapp_--listen_port_is_not_used__63__/comment_1_275507b26ca13e5d55deec4b7af60699._comment create mode 100644 doc/bugs/webapp_--listen_port_is_not_used__63__/comment_2_55315d9013fc6acbde9f8b419757d949._comment create mode 100644 doc/bugs/webapp_--listen_port_is_not_used__63__/comment_3_2d18df9587b52cbb7c34bfce2e0f2fb2._comment create mode 100644 doc/bugs/webapp_--listen_port_is_not_used__63__/comment_4_ba217465bfa738b77ea9417a33810d75._comment create mode 100644 doc/bugs/webapp_--listen_port_is_not_used__63__/comment_5_99a6933f30649bc33ee5c74b33fc7046._comment create mode 100644 doc/bugs/webapp__58___difficult_to_abort_adding_a_repository.mdwn create mode 100644 doc/bugs/webdav_fails___40__server__58___radicale_0.9-1__41__.mdwn create mode 100644 doc/bugs/webdav_fails___40__server__58___radicale_0.9-1__41__/comment_1_487bf264afeef2a3b0a61d306ebfc3c5._comment create mode 100644 doc/bugs/weird_bug_with_annex_unlock_with_annex.thin_true_about_hard_links.mdwn create mode 100644 doc/bugs/weird_bug_with_annex_unlock_with_annex.thin_true_about_hard_links/comment_1_cb6c6e7bcbbe3006dd80e89fa545016d._comment create mode 100644 doc/bugs/weird_bug_with_annex_unlock_with_annex.thin_true_about_hard_links/comment_2_146ed4bf42ce1979815db82bbf9a5b86._comment create mode 100644 doc/bugs/weird_bug_with_annex_unlock_with_annex.thin_true_about_hard_links/comment_3_57924a0a08da3cafe78b95bf22ae89fd._comment create mode 100644 doc/bugs/weird_bug_with_annex_unlock_with_annex.thin_true_about_hard_links/comment_4_4a7ec33d4470714c9fb4271d214b3d1f._comment create mode 100644 doc/bugs/weird_interaction_between___34__required__34___and___34__numcopies__34___on_duplicate_files.mdwn create mode 100644 doc/bugs/weird_interaction_between___34__required__34___and___34__numcopies__34___on_duplicate_files/comment_1_169d4f769e4ba6a81aaa7ed32c789b50._comment create mode 100644 doc/bugs/weird_interaction_between___34__required__34___and___34__numcopies__34___on_duplicate_files/comment_2_d20cb1d0abc9823aa557dcd698e735b2._comment create mode 100644 doc/bugs/weird_unicode_bug_on_windows.mdwn create mode 100644 doc/bugs/weird_unicode_bug_on_windows/comment_1_69af9bd8c7898fccc2219edd860d547b._comment create mode 100644 doc/bugs/whereis_claims_file_is_not_here__44___but_it_is_available_both_here_and_in_another_remote.mdwn create mode 100644 doc/bugs/whereis_claims_file_is_not_here__44___but_it_is_available_both_here_and_in_another_remote/comment_1_d823b7ee32183fbadd4a49f65e1a3a8b._comment create mode 100644 doc/bugs/whereis_claims_file_is_not_here__44___but_it_is_available_both_here_and_in_another_remote/comment_2_f430538101f0ef6114b5e953248fa599._comment create mode 100644 doc/bugs/whereis_claims_file_is_not_here__44___but_it_is_available_both_here_and_in_another_remote/comment_3_d96ded3c27c705789e5689f19dbcabcb._comment create mode 100644 doc/bugs/whereis_claims_file_is_not_here__44___but_it_is_available_both_here_and_in_another_remote/comment_4_b70e83a44a85b006c2c6105660cd6a7a._comment create mode 100644 doc/bugs/whereis_outputs_no_informaiton_for_unlocked_files.mdwn create mode 100644 doc/bugs/whereis_outputs_no_informaiton_for_unlocked_files/comment_1_47bd0fc8d1c65f8a868d9722e66c71db._comment create mode 100644 doc/bugs/windows__58___commits_created_despite_alwayscommit__61__fals.mdwn create mode 100644 doc/bugs/windows__58___commits_created_despite_alwayscommit__61__fals/comment_1_57c55f62ced563f70612cba994b1ea8b._comment create mode 100644 doc/bugs/windows__58___commits_created_despite_alwayscommit__61__fals/comment_2_fcdc6ef1dd464d25ec3e26dac828830e._comment create mode 100644 doc/bugs/windows__58___commits_created_despite_alwayscommit__61__fals/comment_3_0460c7476fae95048f87cb6dd9d4a2ae._comment create mode 100644 doc/bugs/windows__58___commits_created_despite_alwayscommit__61__fals/comment_4_65647b8423127d450b0d1753767943d6._comment create mode 100644 doc/bugs/windows__58___needlessly_reminded_to_run___96__restage__96__.mdwn create mode 100644 doc/bugs/windows__58___needlessly_reminded_to_run___96__restage__96__/comment_1_e738eb3d45bb7c4baa0a5c88cdf7a40a._comment create mode 100644 doc/bugs/windows__58___needlessly_reminded_to_run___96__restage__96__/comment_2_8ecb958a1a2c8cd9fd37798c0d4eb0cf._comment create mode 100644 doc/bugs/windows__58___needlessly_reminded_to_run___96__restage__96__/comment_3_aed127be0616464fda064f00de954fc2._comment create mode 100644 doc/bugs/windows__58___needlessly_reminded_to_run___96__restage__96__/comment_4_42ef3d3d157a97a202718f3b768916f8._comment create mode 100644 doc/bugs/windows__58___needlessly_reminded_to_run___96__restage__96__/comment_5_8f71510a7547db8d0c63e4a4e3ddbd65._comment create mode 100644 doc/bugs/windows__58___two_repo_tests_fail_after_commit_5a98f2d5.mdwn create mode 100644 doc/bugs/windows__58___two_repo_tests_fail_after_commit_5a98f2d5/comment_1_af091a5799ac0445033c05173e25a4af._comment create mode 100644 doc/bugs/windows__58___two_repo_tests_fail_after_commit_5a98f2d5/comment_2_5c7ec0d8520f957ec4f6a4df30941cd8._comment create mode 100644 doc/bugs/windows_autostart.mdwn create mode 100644 doc/bugs/windows_autostart/comment_1_80a2561901554ddb45db719c086629b2._comment create mode 100644 doc/bugs/windows_autostart/comment_2_89078768dc9d9efd2d237fff5c7320ad._comment create mode 100644 doc/bugs/windows_autostart/comment_3_393899b1630cce0dc6b12ec7d29b81ca._comment create mode 100644 doc/bugs/windows_autostart/comment_4_b8d0b38aa7363e97c295b049bd939ad1._comment create mode 100644 doc/bugs/windows_autostart/comment_5_43077649e3ca6a132958c2a2b4914c3b._comment create mode 100644 doc/bugs/windows_build_fails_starting_from_commit_54ad1b4cf.mdwn create mode 100644 doc/bugs/windows_build_fails_starting_from_commit_54ad1b4cf/comment_1_c353c67f06f40c84b956990160205e0a._comment create mode 100644 doc/bugs/windows_build_fails_starting_from_commit_54ad1b4cf/comment_2_bd9a77da095bffdcd3ed30e08192b9d2._comment create mode 100644 doc/bugs/windows_build_fails_starting_from_commit_54ad1b4cf/comment_3_c46e7c7f3870b54563eb8e94d451fded._comment create mode 100644 doc/bugs/windows_ftbfs.mdwn create mode 100644 doc/bugs/windows_started_to_FTBFS.mdwn create mode 100644 doc/bugs/windows_started_to_FTBFS/comment_1_094012512e6c267f05d3d61c0ed638a0._comment create mode 100644 doc/bugs/windows_started_to_FTBFS/comment_2_1ad4a7da4dd4353838fd5c1f9610ee32._comment create mode 100644 doc/bugs/wrong_modes_for_some_lock_files_withcoresharedrepository.mdwn create mode 100644 doc/builds.mdwn create mode 100644 doc/chunking.mdwn create mode 100644 doc/chunking/comment_1_ddbc7a66de2def23cbf1e1de7defde08._comment create mode 100644 doc/chunking/comment_2_d43c297db9a31d1c896b48f0e3757229._comment create mode 100644 doc/chunking/comment_3_7305da05dff79b9cabc59af162db9925._comment create mode 100644 doc/chunking/comment_4_f098bf5a5d07b10d5be41658790547ad._comment create mode 100644 doc/coding_style.mdwn create mode 100644 doc/coding_style/comment_1_70521cf79ad06832b1d73fc2c20c68ec._comment create mode 100644 doc/coding_style/comment_2_a820b7c8ae7c2290eb000f61bdb5c514._comment create mode 100644 doc/coding_style/comment_3_61c178b997dd044f3531303913f8fa91._comment create mode 100644 doc/coding_style/comment_4_433b7ba5e51e746f6b033ebb5c0e50a2._comment create mode 100644 doc/comments.mdwn create mode 100644 doc/contact.mdwn create mode 100644 doc/contribute.mdwn create mode 100644 doc/contribute/comment_10_0b07e1baa5e89ba24f66c077719985e9._comment create mode 100644 doc/contribute/comment_1_c61530e14bdbd7c5ec8b0137c0da92f8._comment create mode 100644 doc/contribute/comment_2_637b05cfd48d2e337c3192989356d183._comment create mode 100644 doc/contribute/comment_3_e7219514f52207fcfb97aeec03241e8d._comment create mode 100644 doc/contribute/comment_4_21a75c774757f27911a9249f9b42368d._comment create mode 100644 doc/contribute/comment_5_c5f7f809da5829f4c259d0a630f0f722._comment create mode 100644 doc/contribute/comment_6_7b53ed13f455879a7462d74571283063._comment create mode 100644 doc/contribute/comment_7_a721a4abf10ae3a1e591f81b9069387f._comment create mode 100644 doc/contribute/comment_8_1b6c02d7ca6a36e4b1ce2bc52570c7fb._comment create mode 100644 doc/contribute/comment_9_62f827dd014481f41d77f4afec0b1de2._comment create mode 100644 doc/copies.mdwn create mode 100644 doc/copies/comment_1_af9bee33777fb8a187b714fc8c5fb11d._comment create mode 100644 doc/copies/comment_2_1214610c03193cb9dd76dc24e5b7fd76._comment create mode 100644 doc/copies/comment_3_5beb9a5b87dd6775f9b921ad1e9bc610._comment create mode 100644 doc/copies/comment_4_0daa1b3ecc2a4cf844b8f1b98a883e67._comment create mode 100644 doc/copies/comment_5_cc4cd8f739d4e72614c0b98f00e3510d._comment create mode 100644 doc/design.mdwn create mode 100644 doc/design/adjusted_branches.mdwn create mode 100644 doc/design/adjusted_branches/comment_1_5bdbf54ae75f77c69c8f557f4dbac13d._comment create mode 100644 doc/design/adjusted_branches/comment_2_ff7cbdf93f0be5886f212bdd411efb5b._comment create mode 100644 doc/design/adjusted_branches/comment_3_e2a4b1719ba9860da711b802de64daf5._comment create mode 100644 doc/design/adjusted_branches/comment_4_adfcbfa7a9193318cba459766a60c072._comment create mode 100644 doc/design/adjusted_branches/comment_5_882520747d41500d0ea8a18ab817121c._comment create mode 100644 doc/design/assistant.mdwn create mode 100644 doc/design/assistant/OSX.mdwn create mode 100644 doc/design/assistant/OSX/comment_1_9290f6e6f265e906b08631224392b7bf._comment create mode 100644 doc/design/assistant/android.mdwn create mode 100644 doc/design/assistant/android/comment_10_316bde8d22628e5e9d4f8dabce1d2ad4._comment create mode 100644 doc/design/assistant/android/comment_11_cf801ce1f49f0201681f0c9f69a62aae._comment create mode 100644 doc/design/assistant/android/comment_1_8be9a74e5fc4641c2bf2e1bb7673dd59._comment create mode 100644 doc/design/assistant/android/comment_2_3dd386ac1b757c73d14f14377b9eedd4._comment create mode 100644 doc/design/assistant/android/comment_3_5dca47a4599d6e88d19193701c5a571b._comment create mode 100644 doc/design/assistant/android/comment_4_054f06311e2b51d73be569f181eb004f._comment create mode 100644 doc/design/assistant/android/comment_5_bb3d36e9d29f2fa77bee6d47ef9917fe._comment create mode 100644 doc/design/assistant/android/comment_6_fee32a831eeb5736fe1dce52e30320c8._comment create mode 100644 doc/design/assistant/android/comment_7_d8e9b0a5287fc96b19dc2cb9da3586ce._comment create mode 100644 doc/design/assistant/android/comment_8_79a7b5bb5f4aaeea4a4e8ced0561701a._comment create mode 100644 doc/design/assistant/android/comment_9_55ea70a6929523d26248ff6409b04a6e._comment create mode 100644 doc/design/assistant/blog.mdwn create mode 100644 doc/design/assistant/blog/day_100__cursed_clouds.mdwn create mode 100644 doc/design/assistant/blog/day_102__very_high_level_programming.mdwn create mode 100644 doc/design/assistant/blog/day_102__very_high_level_programming/comment_1_c028b403261dd66bcf83e6ffd134b80b._comment create mode 100644 doc/design/assistant/blog/day_103__bugfix_day.mdwn create mode 100644 doc/design/assistant/blog/day_104__misc.mdwn create mode 100644 doc/design/assistant/blog/day_104__misc/comment_1_13d7fad2d3f8eab10314784c035e2a16._comment create mode 100644 doc/design/assistant/blog/day_105__lazy_Sunday.mdwn create mode 100644 doc/design/assistant/blog/day_106__lazy_Monday.mdwn create mode 100644 doc/design/assistant/blog/day_107__memory_leak.mdwn create mode 100644 doc/design/assistant/blog/day_108__another_zombie_outbreak.mdwn create mode 100644 doc/design/assistant/blog/day_108__another_zombie_outbreak/comment_1_194c48d65993462f809a2cfaa774a3e2._comment create mode 100644 doc/design/assistant/blog/day_108__another_zombie_outbreak/comment_2_ef5ee5933fcadcb81cc81b816db14bda._comment create mode 100644 doc/design/assistant/blog/day_109__dropping.mdwn create mode 100644 doc/design/assistant/blog/day_10__lsof.mdwn create mode 100644 doc/design/assistant/blog/day_10__lsof/comment_1_9b8c28c85c979f32e5c295b6a03c048e._comment create mode 100644 doc/design/assistant/blog/day_110__more_dropping.mdwn create mode 100644 doc/design/assistant/blog/day_111__config_monitor.mdwn create mode 100644 doc/design/assistant/blog/day_112__and_now_for_something_completely_different.mdwn create mode 100644 doc/design/assistant/blog/day_112__and_now_for_something_completely_different/comment_1_5e4fe1538d9ae1c450b0a6602fc6d29b._comment create mode 100644 doc/design/assistant/blog/day_112__and_now_for_something_completely_different/comment_2_c5a734f611ecc95729904e645583ee43._comment create mode 100644 doc/design/assistant/blog/day_112__and_now_for_something_completely_different/comment_3_46b16dcd0fce07036cd8ed6ed9d2b055._comment create mode 100644 doc/design/assistant/blog/day_112__and_now_for_something_completely_different/comment_4_1fe036e4c65fb4211aa2c394f535344a._comment create mode 100644 doc/design/assistant/blog/day_112__and_now_for_something_completely_different/comment_5_e4ba3568c4efd98f212dd47427a1cf47._comment create mode 100644 doc/design/assistant/blog/day_113__notifier_work.mdwn create mode 100644 doc/design/assistant/blog/day_114__xmpp.mdwn create mode 100644 doc/design/assistant/blog/day_114__xmpp/comment_1_c2b0617a2fc3dc4f19a6be6947913842._comment create mode 100644 doc/design/assistant/blog/day_114__xmpp/comment_2_d14375dfb5791615802dab3c5438f8e2._comment create mode 100644 doc/design/assistant/blog/day_114__xmpp/comment_3_6d72ea32c111e605be30ad2153fc71c9._comment create mode 100644 doc/design/assistant/blog/day_114__xmpp/comment_4_e51d6f854db5f9e74a1aa58bd8923795._comment create mode 100644 doc/design/assistant/blog/day_115__my_new_form.mdwn create mode 100644 doc/design/assistant/blog/day_116__the_segfault.mdwn create mode 100644 doc/design/assistant/blog/day_117__new_topologies.mdwn create mode 100644 doc/design/assistant/blog/day_118__monadic_discontinuity.mdwn create mode 100644 doc/design/assistant/blog/day_119__time_for_testing.mdwn create mode 100644 doc/design/assistant/blog/day_11__freebsd.mdwn create mode 100644 doc/design/assistant/blog/day_120__test_day.mdwn create mode 100644 doc/design/assistant/blog/day_121__buddy_list.mdwn create mode 100644 doc/design/assistant/blog/day_122__xmpp_pairing.mdwn create mode 100644 doc/design/assistant/blog/day_122__xmpp_pairing/comment_1_e95efb23eb2e67e3f11a5c7de56424a7._comment create mode 100644 doc/design/assistant/blog/day_122__xmpp_pairing/comment_2_30e251e73146512bde8b2f69eddeef2e._comment create mode 100644 doc/design/assistant/blog/day_123__xmpp_insanity.mdwn create mode 100644 doc/design/assistant/blog/day_124__git_push_over_xmpp_groundwork.mdwn create mode 100644 doc/design/assistant/blog/day_125__xmpp_push_continues.mdwn create mode 100644 doc/design/assistant/blog/day_126__mr_watson_come_here.mdwn create mode 100644 doc/design/assistant/blog/day_126__mr_watson_come_here/comment_1_ee1361e6b235f4e1c00596ba516b519a._comment create mode 100644 doc/design/assistant/blog/day_126__mr_watson_come_here/comment_2_8eb366ae7efb347bd3bbd9a98e0821b3._comment create mode 100644 doc/design/assistant/blog/day_127__xmpp_syncs.mdwn create mode 100644 doc/design/assistant/blog/day_128__last_xmpp_day.mdwn create mode 100644 doc/design/assistant/blog/day_128__last_xmpp_day/comment_1_fd8c1d6358cb50f4dad8ba11d33d861f._comment create mode 100644 doc/design/assistant/blog/day_128__last_xmpp_day/comment_2_43664b73c71c41d71bc95e665f128106._comment create mode 100644 doc/design/assistant/blog/day_128__last_xmpp_day/comment_3_d369b04f686009a9dbb57b999107a55e._comment create mode 100644 doc/design/assistant/blog/day_128__last_xmpp_day/comment_4_095855d301e7ccd3689ffe507cfb63ee._comment create mode 100644 doc/design/assistant/blog/day_128__last_xmpp_day/comment_5_da7b0586b0b28e1e0fe4126f6543a7bc._comment create mode 100644 doc/design/assistant/blog/day_128__last_xmpp_day/comment_6_2f9ba367e19d77bf52f372b6f0f5938a._comment create mode 100644 doc/design/assistant/blog/day_129__release.mdwn create mode 100644 doc/design/assistant/blog/day_12__freebsd_redux.mdwn create mode 100644 doc/design/assistant/blog/day_12__freebsd_redux/comment_1_5da32cf53f1de27bfe6cec2d294db3e1._comment create mode 100644 doc/design/assistant/blog/day_12__freebsd_redux/comment_2_696d6e22034acf5bb60d80124b72ef2f._comment create mode 100644 doc/design/assistant/blog/day_12__freebsd_redux/comment_3_5ab7808595e3b51ca4141d15fdd44743._comment create mode 100644 doc/design/assistant/blog/day_130__what_now.mdwn create mode 100644 doc/design/assistant/blog/day_130__what_now/comment_1_402f00cc034351d8253a797dd4de55bf._comment create mode 100644 doc/design/assistant/blog/day_131__webdav_groundwork.mdwn create mode 100644 doc/design/assistant/blog/day_132__webdav_continued.mdwn create mode 100644 doc/design/assistant/blog/day_133__webdav_working.mdwn create mode 100644 doc/design/assistant/blog/day_134__box.com_configurator.mdwn create mode 100644 doc/design/assistant/blog/day_135__progress_revisited.mdwn create mode 100644 doc/design/assistant/blog/day_136__misc.mdwn create mode 100644 doc/design/assistant/blog/day_137__Glacier.mdwn create mode 100644 doc/design/assistant/blog/day_138__back.mdwn create mode 100644 doc/design/assistant/blog/day_138__back/comment_1_65a8499b284bed38d2bde1886a54a311._comment create mode 100644 doc/design/assistant/blog/day_139__catch_up.mdwn create mode 100644 doc/design/assistant/blog/day_13__kqueue_continued.mdwn create mode 100644 doc/design/assistant/blog/day_140__release_monday.mdwn create mode 100644 doc/design/assistant/blog/day_141__release_tuesday.mdwn create mode 100644 doc/design/assistant/blog/day_141__release_tuesday/comment_1_a5adea7a726df12f9121c744a036f08d._comment create mode 100644 doc/design/assistant/blog/day_142__filling_in.mdwn create mode 100644 doc/design/assistant/blog/day_143__what_next.mdwn create mode 100644 doc/design/assistant/blog/day_143__what_next/comment_1_40cf25a2ebdd43d8974a28e180e100e5._comment create mode 100644 doc/design/assistant/blog/day_143__what_next/comment_2_af9ccbbc5131e6333c029415141bdb51._comment create mode 100644 doc/design/assistant/blog/day_144__webapp_work.mdwn create mode 100644 doc/design/assistant/blog/day_145__more_webapp_work.mdwn create mode 100644 doc/design/assistant/blog/day_146__meanwhile.mdwn create mode 100644 doc/design/assistant/blog/day_147__direct_mode.mdwn create mode 100644 doc/design/assistant/blog/day_147__direct_mode/comment_1_0bd69532afce9dc04e3d88bfd0aed4b2._comment create mode 100644 doc/design/assistant/blog/day_147__direct_mode/comment_2_3b26f0d081c3bf1037bb872d529ce825._comment create mode 100644 doc/design/assistant/blog/day_148__direct_mode.mdwn create mode 100644 doc/design/assistant/blog/day_149__rainy_day.mdwn create mode 100644 doc/design/assistant/blog/day_14__kqueue_kqueue_kqueue.mdwn create mode 100644 doc/design/assistant/blog/day_14__thinking_about_syncing.mdwn create mode 100644 doc/design/assistant/blog/day_150__12__58__12.mdwn create mode 100644 doc/design/assistant/blog/day_151__direct_mode_toggle.mdwn create mode 100644 doc/design/assistant/blog/day_152__bugfixes.mdwn create mode 100644 doc/design/assistant/blog/day_152__bugfixes/comment_1_46863a875f9daa6f2c9248b66ff91929._comment create mode 100644 doc/design/assistant/blog/day_152__bugfixes/comment_2_a586e617bc024c8a9ff60f1b8345d74d._comment create mode 100644 doc/design/assistant/blog/day_153__hibernation.mdwn create mode 100644 doc/design/assistant/blog/day_154__direct_mode_merging.mdwn create mode 100644 doc/design/assistant/blog/day_155__bugfixes.mdwn create mode 100644 doc/design/assistant/blog/day_156_and_157__direct_mode_assistant.mdwn create mode 100644 doc/design/assistant/blog/day_158__fsevents.mdwn create mode 100644 doc/design/assistant/blog/day_158__fsevents/comment_1_b278372ac6399f64d5fa9da178278a6d._comment create mode 100644 doc/design/assistant/blog/day_158__fsevents/comment_2_2d5ce9b2807068c3517e185945662bd2._comment create mode 100644 doc/design/assistant/blog/day_159__fsevents_and_assistant.mdwn create mode 100644 doc/design/assistant/blog/day_159__fsevents_and_assistant/comment_1_b85f446c3fa8d703a2a8882825c6f33f._comment create mode 100644 doc/design/assistant/blog/day_159__fsevents_and_assistant/comment_2_a150b404e0c39e0bb2f7dd00cda63cdc._comment create mode 100644 doc/design/assistant/blog/day_159__fsevents_and_assistant/comment_3_37abc41bae23a1d7de0d19d952aec492._comment create mode 100644 doc/design/assistant/blog/day_15__its_aliiive.mdwn create mode 100644 doc/design/assistant/blog/day_160__finishing_up_direct_mode.mdwn create mode 100644 doc/design/assistant/blog/day_161__release_day.mdwn create mode 100644 doc/design/assistant/blog/day_161__release_day/comment_1_e82c67f3ce216618149537bba1e0b850._comment create mode 100644 doc/design/assistant/blog/day_161__release_day/comment_2_b1fe96fd818935c0497b78bb8ad32ffa._comment create mode 100644 doc/design/assistant/blog/day_161__release_day/comment_3_40bac0e1756aa77bb966c4654857141c._comment create mode 100644 doc/design/assistant/blog/day_161__release_day/comment_4_af65656b0d1179636937595868bb97b0._comment create mode 100644 doc/design/assistant/blog/day_161__release_day/comment_5_0c05caaaf9588e124585041bf5f45d75._comment create mode 100644 doc/design/assistant/blog/day_161__release_day/comment_6_5dfb5f428633d6062925f61af2b8829b._comment create mode 100644 doc/design/assistant/blog/day_161__release_day/comment_7_ac4effb381b08d94d4a2d2482e92c89a._comment create mode 100644 doc/design/assistant/blog/day_161__release_day/comment_8_32600e89e3098e52a1280895e03b3f86._comment create mode 100644 doc/design/assistant/blog/day_161__release_day/comment_9_07e5d0c3cad0ce2bd4943e53b61f1767._comment create mode 100644 doc/design/assistant/blog/day_162__UI.mdwn create mode 100644 doc/design/assistant/blog/day_163__free_features.mdwn create mode 100644 doc/design/assistant/blog/day_164__bugfixes.mdwn create mode 100644 doc/design/assistant/blog/day_165__release_day.mdwn create mode 100644 doc/design/assistant/blog/day_166__a_short_long_day.mdwn create mode 100644 doc/design/assistant/blog/day_167__safe_direct_mode_transfers.mdwn create mode 100644 doc/design/assistant/blog/day_167__safe_direct_mode_transfers/comment_1_f1aa64fe803d8c14b250a4e98b88142a._comment create mode 100644 doc/design/assistant/blog/day_167__safe_direct_mode_transfers/comment_2_5ce1db84c9ead713f1272c4975645b93._comment create mode 100644 doc/design/assistant/blog/day_168__back_to_theme.mdwn create mode 100644 doc/design/assistant/blog/day_168__back_to_theme/comment_1_f248780bfcbd0384d9d72c2633a4ea46._comment create mode 100644 doc/design/assistant/blog/day_168__back_to_theme/comment_2_5beba073373b8e75a32d1fcfdc1a0782._comment create mode 100644 doc/design/assistant/blog/day_169__direct_mode_is_safe.mdwn create mode 100644 doc/design/assistant/blog/day_169__direct_mode_is_safe/comment_1_65f87656c4e6bc7cdb614f53961341c9._comment create mode 100644 doc/design/assistant/blog/day_169__direct_mode_is_safe/comment_2_a116a402a126c62be54c06afd82439ab._comment create mode 100644 doc/design/assistant/blog/day_16__more_robust_syncing.mdwn create mode 100644 doc/design/assistant/blog/day_16__more_robust_syncing/comment_1_23e7a90429e4431f90787cd016ebe188._comment create mode 100644 doc/design/assistant/blog/day_16__more_robust_syncing/comment_2_8e7e7cd27791bb47625e60a284e9c802._comment create mode 100644 doc/design/assistant/blog/day_170__bugfixes_and_release.mdwn create mode 100644 doc/design/assistant/blog/day_171__logs.mdwn create mode 100644 doc/design/assistant/blog/day_172__short_day.mdwn create mode 100644 doc/design/assistant/blog/day_172__short_day/comment_1_b75e26b77a23a45da1c4c3bca1399246._comment create mode 100644 doc/design/assistant/blog/day_173__snow_day.mdwn create mode 100644 doc/design/assistant/blog/day_174__last_weekend_before_AU.mdwn create mode 100644 doc/design/assistant/blog/day_174__last_weekend_before_AU/comment_1_05a8fd47f54373331741cc869a53b0c3._comment create mode 100644 doc/design/assistant/blog/day_174__last_weekend_before_AU/comment_2_fc8e65eef954c4caa8321c2fe8b711b7._comment create mode 100644 doc/design/assistant/blog/day_174__last_weekend_before_AU/comment_3_399534f540d85cac067fbb7be9d373b4._comment create mode 100644 doc/design/assistant/blog/day_175__pacific_features.mdwn create mode 100644 doc/design/assistant/blog/day_175__pacific_features/comment_1_c3ee4386f872b7c76aaecfa638b368cb._comment create mode 100644 doc/design/assistant/blog/day_176__thread_management.mdwn create mode 100644 doc/design/assistant/blog/day_178__bus_hacking.mdwn create mode 100644 doc/design/assistant/blog/day_179__brief_updates.mdwn create mode 100644 doc/design/assistant/blog/day_179__brief_updates/comment_1_920a84457d40358507a3eb817a4568d9._comment create mode 100644 doc/design/assistant/blog/day_17__push_queue_prune.mdwn create mode 100644 doc/design/assistant/blog/day_180__back.mdwn create mode 100644 doc/design/assistant/blog/day_181__triage.mdwn create mode 100644 doc/design/assistant/blog/day_182__it_begins.mdwn create mode 100644 doc/design/assistant/blog/day_183__plan_b.mdwn create mode 100644 doc/design/assistant/blog/day_184__just_wanna_run_something.mdwn create mode 100644 doc/design/assistant/blog/day_184__just_wanna_run_something/comment_1_689adac7e26cb0b0a4e7ecc787cfd716._comment create mode 100644 doc/design/assistant/blog/day_185__android_liftoff.mdwn create mode 100644 doc/design/assistant/blog/day_185__android_liftoff/comment_1_b7d28010a72619a7e9a5ad4f2a0d6c07._comment create mode 100644 doc/design/assistant/blog/day_185__android_liftoff/comment_2_ddeb24e86fafb7dae93142cc02767aad._comment create mode 100644 doc/design/assistant/blog/day_186__Android_success.mdwn create mode 100644 doc/design/assistant/blog/day_186__Android_success/comment_1_1629da240ca7db5f8a32059f561fd435._comment create mode 100644 doc/design/assistant/blog/day_187__porting_utilities.mdwn create mode 100644 doc/design/assistant/blog/day_187__porting_utilities/comment_1_0e6a3f4fe8e09f247fa04156bc60f8c7._comment create mode 100644 doc/design/assistant/blog/day_188__crippled_filesystem_support.mdwn create mode 100644 doc/design/assistant/blog/day_188__crippled_filesystem_support/comment_1_32a296fce23ae4b1e18bd5a9964bf619._comment create mode 100644 doc/design/assistant/blog/day_189__more_crippling.mdwn create mode 100644 doc/design/assistant/blog/day_18__merging.mdwn create mode 100644 doc/design/assistant/blog/day_18__merging/comment_1_7a553ad559519f3b3e3cd20115b4c44e._comment create mode 100644 doc/design/assistant/blog/day_190-191__weekend.mdwn create mode 100644 doc/design/assistant/blog/day_190-191__weekend/comment_1_dbd692d12c14d08acd7d73a655b34e8b._comment create mode 100644 doc/design/assistant/blog/day_190-191__weekend/comment_2_c813830e53471a9732e010a748d574fc._comment create mode 100644 doc/design/assistant/blog/day_192_193__more_porting.mdwn create mode 100644 doc/design/assistant/blog/day_194__nice_moment.mdwn create mode 100644 doc/design/assistant/blog/day_195__real_android_app.mdwn create mode 100644 doc/design/assistant/blog/day_195__real_android_app/comment_10_0112007552b30cd9bfeac614a1e399c4._comment create mode 100644 doc/design/assistant/blog/day_195__real_android_app/comment_11_230d3c169c713f613b9d607d84ce5092._comment create mode 100644 doc/design/assistant/blog/day_195__real_android_app/comment_12_8d74ad2a61c02272758d157282ad56ec._comment create mode 100644 doc/design/assistant/blog/day_195__real_android_app/comment_13_4f6bc0680f2debd638933968a26975e0._comment create mode 100644 doc/design/assistant/blog/day_195__real_android_app/comment_14_71539c62608866464e8faa76bc522a55._comment create mode 100644 doc/design/assistant/blog/day_195__real_android_app/comment_15_e1b205289721ae79ac7fbed2f44018b2._comment create mode 100644 doc/design/assistant/blog/day_195__real_android_app/comment_1_4bc0aeae4fa1116944644c64feaf9697._comment create mode 100644 doc/design/assistant/blog/day_195__real_android_app/comment_2_17bb6e7565d4c757f6c1e3514c22f47d._comment create mode 100644 doc/design/assistant/blog/day_195__real_android_app/comment_3_cd8a6bec0f7c6843dd11d3266f25f864._comment create mode 100644 doc/design/assistant/blog/day_195__real_android_app/comment_4_2d2eee4bcbbd1d069a80bff5edc90c3c._comment create mode 100644 doc/design/assistant/blog/day_195__real_android_app/comment_6_3d96568c469a8c53a982f304eae5e7d4._comment create mode 100644 doc/design/assistant/blog/day_195__real_android_app/comment_6_e8667c47d07fc842cf0fe2ebbfbc1c58._comment create mode 100644 doc/design/assistant/blog/day_195__real_android_app/comment_7_cf8da7720ddc20b05955ee671ca4acd5._comment create mode 100644 doc/design/assistant/blog/day_195__real_android_app/comment_8_f4709bdbc739182819b648fd6aa00531._comment create mode 100644 doc/design/assistant/blog/day_195__real_android_app/comment_9_e66af12c7eca0d457b8406e9fb4b69be._comment create mode 100644 doc/design/assistant/blog/day_196__android_bugfixes.mdwn create mode 100644 doc/design/assistant/blog/day_197__template_haskell.mdwn create mode 100644 doc/design/assistant/blog/day_197__template_haskell/comment_1_82d9f9508929d84abf7b718c59436ae8._comment create mode 100644 doc/design/assistant/blog/day_198__bugfixes.mdwn create mode 100644 doc/design/assistant/blog/day_198__bugfixes/comment_1_5a15b5bad0f9ba2423d2aebe440ac0ea._comment create mode 100644 doc/design/assistant/blog/day_198__bugfixes/comment_2_36d94b838e5e65c85e7afaabe8a578f1._comment create mode 100644 doc/design/assistant/blog/day_198__bugfixes/comment_3_ae9b74341a3bc6e1e84d2c0ca4c5f612._comment create mode 100644 doc/design/assistant/blog/day_198__bugfixes/comment_4_5a4827227c03bcff3b1e4c44b531f816._comment create mode 100644 doc/design/assistant/blog/day_198__bugfixes/comment_5_9c5f4c85217e898be4c57c615e53c36f._comment create mode 100644 doc/design/assistant/blog/day_198__bugfixes/comment_6_bccf1abfb7f56d97673158f3ccfce511._comment create mode 100644 doc/design/assistant/blog/day_198__bugfixes/comment_7_6f1b51b002cc5d2b505d80e3e04bf6f3._comment create mode 100644 doc/design/assistant/blog/day_198__bugfixes/comment_8_8a3542437663028b17442818eba3f7c5._comment create mode 100644 doc/design/assistant/blog/day_199__wrapping_up_Android_for_now.mdwn create mode 100644 doc/design/assistant/blog/day_199__wrapping_up_Android_for_now/comment_1_ec57358afc7e78d2860aa4237793832d._comment create mode 100644 doc/design/assistant/blog/day_19__random_improvements.mdwn create mode 100644 doc/design/assistant/blog/day_1__inotify.mdwn create mode 100644 doc/design/assistant/blog/day_200__release_day.mdwn create mode 100644 doc/design/assistant/blog/day_200__release_day/comment_10_40cfe9bfd9e611fd734dbb5aad348aa3._comment create mode 100644 doc/design/assistant/blog/day_200__release_day/comment_11_b26890fdae575d42170988073fb2e45d._comment create mode 100644 doc/design/assistant/blog/day_200__release_day/comment_13_710a30c5d31bf549833ecfe9a0997c94._comment create mode 100644 doc/design/assistant/blog/day_200__release_day/comment_13_b6f62ab7e810ba6d3a43f0ead370c79a._comment create mode 100644 doc/design/assistant/blog/day_200__release_day/comment_1_a68e1ed7829b49086c567d97ddc09912._comment create mode 100644 doc/design/assistant/blog/day_200__release_day/comment_2_39d3ad0a029fe56e96f97d28d17fbbd2._comment create mode 100644 doc/design/assistant/blog/day_200__release_day/comment_3_5b752d6a8d74e61190f09384b6108206._comment create mode 100644 doc/design/assistant/blog/day_200__release_day/comment_4_881274ae0d6230bb4cafa4151ad72b49._comment create mode 100644 doc/design/assistant/blog/day_200__release_day/comment_5_e220059be77cf0ef396f37a4f9ccf9b5._comment create mode 100644 doc/design/assistant/blog/day_200__release_day/comment_6_ec2152151188dd252cdb61c68cfc12e4._comment create mode 100644 doc/design/assistant/blog/day_200__release_day/comment_7_42572411617c287368482bb9dcf94324._comment create mode 100644 doc/design/assistant/blog/day_200__release_day/comment_8_6b69aa81a9ba4e07e547ed1869946d51._comment create mode 100644 doc/design/assistant/blog/day_200__release_day/comment_9_b070a2e4151d9fbf43d7906efa78515f._comment create mode 100644 doc/design/assistant/blog/day_201__real_Android_wrapup.mdwn create mode 100644 doc/design/assistant/blog/day_201__real_Android_wrapup/comment_1_88b9950c51324f0bb89c5646b3170952._comment create mode 100644 doc/design/assistant/blog/day_201__real_Android_wrapup/fib.png create mode 100644 doc/design/assistant/blog/day_201__working_web_server.mdwn create mode 100644 doc/design/assistant/blog/day_203__procrastination.mdwn create mode 100644 doc/design/assistant/blog/day_204__deprocrastination.mdwn create mode 100644 doc/design/assistant/blog/day_205_206__rainy_day__snow_day.mdwn create mode 100644 doc/design/assistant/blog/day_207__XMPP.mdwn create mode 100644 doc/design/assistant/blog/day_208__bugfixes.mdwn create mode 100644 doc/design/assistant/blog/day_209__The_Bug.mdwn create mode 100644 doc/design/assistant/blog/day_20__data_transfer_design.mdwn create mode 100644 doc/design/assistant/blog/day_210__spring.mdwn create mode 100644 doc/design/assistant/blog/day_211__zooming_along.mdwn create mode 100644 doc/design/assistant/blog/day_212__accidental_all_nighter.mdwn create mode 100644 doc/design/assistant/blog/day_212__accidental_all_nighter/comment_1_6ee1f8056eedb6eb18013faf8f5ec212._comment create mode 100644 doc/design/assistant/blog/day_212__accidental_all_nighter/comment_2_07c83d75bb105bb77ada07359ed0ea7a._comment create mode 100644 doc/design/assistant/blog/day_212__accidental_all_nighter/comment_3_2c904d33f4f14807fbe718a01e98800a._comment create mode 100644 doc/design/assistant/blog/day_212__accidental_all_nighter/comment_4_59ec5c1cab75df87293800a7a03fe9c6._comment create mode 100644 doc/design/assistant/blog/day_212__accidental_all_nighter/comment_5_13893f106e835dcc52e03c7c6740c35b._comment create mode 100644 doc/design/assistant/blog/day_213__costs.mdwn create mode 100644 doc/design/assistant/blog/day_214__release_day.mdwn create mode 100644 doc/design/assistant/blog/day_215__dashboard_UI_refresh.mdwn create mode 100644 doc/design/assistant/blog/day_216__more_bugfixes.mdwn create mode 100644 doc/design/assistant/blog/day_216__more_bugfixes/comment_1_299462bcdd0e4f6cd7895b5f40ca00ad._comment create mode 100644 doc/design/assistant/blog/day_216__more_bugfixes/comment_2_1913d65dfe4ba08379d82a4a2ca91c40._comment create mode 100644 doc/design/assistant/blog/day_216__more_bugfixes/comment_3_92c774599a78540ad398afcd1d05f7ce._comment create mode 100644 doc/design/assistant/blog/day_217__nothing.mdwn create mode 100644 doc/design/assistant/blog/day_219__bug_triage.mdwn create mode 100644 doc/design/assistant/blog/day_219__bug_triage/comment_1_c6b977a969cacdce62987a439b7686f5._comment create mode 100644 doc/design/assistant/blog/day_21__transfer_tracking.mdwn create mode 100644 doc/design/assistant/blog/day_220__performance.mdwn create mode 100644 doc/design/assistant/blog/day_221__this_and_that.mdwn create mode 100644 doc/design/assistant/blog/day_222__back.mdwn create mode 100644 doc/design/assistant/blog/day_222__back/comment_1_f05b48231a1ee0cffba7d66e112e5551._comment create mode 100644 doc/design/assistant/blog/day_222__back/comment_2_4d5f003ccd81580017ebf0dc31bc9cda._comment create mode 100644 doc/design/assistant/blog/day_223__progress_revisited.mdwn create mode 100644 doc/design/assistant/blog/day_224__annex.largefiles.mdwn create mode 100644 doc/design/assistant/blog/day_224__annex.largefiles/comment_1_408e4021b18f7ff5548d2d19ab558922._comment create mode 100644 doc/design/assistant/blog/day_224__annex.largefiles/comment_2_b24d1da2bc4307ded0216daffb8f9336._comment create mode 100644 doc/design/assistant/blog/day_225__back_from_the_dead.mdwn create mode 100644 doc/design/assistant/blog/day_225__back_from_the_dead/comment_1_9ac37c3b5c4c72ec8a39dce00bcbe420._comment create mode 100644 doc/design/assistant/blog/day_225__back_from_the_dead/comment_2_26125dd9ef2bd10b597d14b2c6180952._comment create mode 100644 doc/design/assistant/blog/day_226__poll_results.mdwn create mode 100644 doc/design/assistant/blog/day_226__poll_results/comment_1_1ed980472214be6d0a8cf55f37797fda._comment create mode 100644 doc/design/assistant/blog/day_226__poll_results/comment_2_6823b0a9a8037f1a5214db4db98fb16e._comment create mode 100644 doc/design/assistant/blog/day_227__bigfixing_all_day_today.mdwn create mode 100644 doc/design/assistant/blog/day_228__more_work_on_repository_removals.mdwn create mode 100644 doc/design/assistant/blog/day_229__rainy_day_bugfixes.mdwn create mode 100644 doc/design/assistant/blog/day_22__horrible_option_parsing_hack.mdwn create mode 100644 doc/design/assistant/blog/day_230__Mom.mdwn create mode 100644 doc/design/assistant/blog/day_230__Mom/comment_1_696bba2246c8a9e6ce4aed3071bcc96c._comment create mode 100644 doc/design/assistant/blog/day_230__Mom/comment_2_2fa295ab6db0828cb725cfcfb6777822._comment create mode 100644 doc/design/assistant/blog/day_230__Mom/comment_3_fafd7abec629290418334ddb015bf62c._comment create mode 100644 doc/design/assistant/blog/day_230__Mom/comment_4_450cac0f2e82c94fd34b527ae05ef1b8._comment create mode 100644 doc/design/assistant/blog/day_231__insert_title.mdwn create mode 100644 doc/design/assistant/blog/day_232__headless_webapp.mdwn create mode 100644 doc/design/assistant/blog/day_232__headless_webapp/comment_1_0fdd77d143ecba6fdb9f75cb6fc37bfb._comment create mode 100644 doc/design/assistant/blog/day_232__headless_webapp/comment_2_0784a2a73c3e2945f3d3f2577b3b9c9c._comment create mode 100644 doc/design/assistant/blog/day_232__headless_webapp/comment_3_ccb9fa22422fb913b6a496ebe65c49fb._comment create mode 100644 doc/design/assistant/blog/day_232__headless_webapp/comment_4_ceba4468760a2525960327698431cee2._comment create mode 100644 doc/design/assistant/blog/day_232__headless_webapp/comment_5_7e51a197ff9970ae50cf47bd3a922257._comment create mode 100644 doc/design/assistant/blog/day_233__taxes.mdwn create mode 100644 doc/design/assistant/blog/day_233__taxes/comment_1_9473ffdc42595af9c293fbcd5a1cdb54._comment create mode 100644 doc/design/assistant/blog/day_233__taxes/comment_2_5feed8d7053ba03812ccda8c61fd9775._comment create mode 100644 doc/design/assistant/blog/day_234__clean_shutdown.mdwn create mode 100644 doc/design/assistant/blog/day_235__birthday.mdwn create mode 100644 doc/design/assistant/blog/day_235__birthday/comment_1_db558b071067c1e63cde05cca0551094._comment create mode 100644 doc/design/assistant/blog/day_235__birthday/comment_2_d1a2c1124781118267599457ae9e0512._comment create mode 100644 doc/design/assistant/blog/day_235__birthday/comment_3_b853508d1d15234958b9f4a39277e45c._comment create mode 100644 doc/design/assistant/blog/day_235__birthday/comment_5_73aad3398a43bc4d28bca9bf635fa757._comment create mode 100644 doc/design/assistant/blog/day_236__evil_splicer.mdwn create mode 100644 doc/design/assistant/blog/day_237__gnome-keyring_craziness.mdwn create mode 100644 doc/design/assistant/blog/day_237__gnome-keyring_craziness/comment_1_0cb088b732881d1fa92493aa1fd93d43._comment create mode 100644 doc/design/assistant/blog/day_237__gnome-keyring_craziness/comment_2_b855fd710954beebaafe6d2bd03eb368._comment create mode 100644 doc/design/assistant/blog/day_238__back_to_Android.mdwn create mode 100644 doc/design/assistant/blog/day_239__bugfixes_and_frustration.mdwn create mode 100644 doc/design/assistant/blog/day_23__transfer_watching.mdwn create mode 100644 doc/design/assistant/blog/day_240__it_builds.mdwn create mode 100644 doc/design/assistant/blog/day_240__it_builds/comment_1_151840ae0020ea63b2f041488c905386._comment create mode 100644 doc/design/assistant/blog/day_241__cleanup.mdwn create mode 100644 doc/design/assistant/blog/day_241__cleanup/comment_1_0e283cdf66a25b3cc9423fe651084cb9._comment create mode 100644 doc/design/assistant/blog/day_242__more_porting.mdwn create mode 100644 doc/design/assistant/blog/day_243__in_the_field.mdwn create mode 100644 doc/design/assistant/blog/day_244__android_porting.mdwn create mode 100644 doc/design/assistant/blog/day_245__misc.mdwn create mode 100644 doc/design/assistant/blog/day_245__misc/comment_1_3a2976617bb0cdc206fb1397a2ef1177._comment create mode 100644 doc/design/assistant/blog/day_245__misc/comment_2_e0f9704e91fedca8ff26356f354cc1c3._comment create mode 100644 doc/design/assistant/blog/day_245__misc/comment_3_93003a0d0983efbdc046d7459be194b0._comment create mode 100644 doc/design/assistant/blog/day_246__bug_treadmill.mdwn create mode 100644 doc/design/assistant/blog/day_246__bug_treadmill/comment_1_f76f653364fe2b97e85e8356c93b0fce._comment create mode 100644 doc/design/assistant/blog/day_247__performance_tuning.mdwn create mode 100644 doc/design/assistant/blog/day_248__Internet_Archive.mdwn create mode 100644 doc/design/assistant/blog/day_249__quiet_day.mdwn create mode 100644 doc/design/assistant/blog/day_24__airport_digressions.mdwn create mode 100644 doc/design/assistant/blog/day_250__stymied.mdwn create mode 100644 doc/design/assistant/blog/day_250__stymied/comment_1_330a10d447ccc3db03fcbfe571dbb404._comment create mode 100644 doc/design/assistant/blog/day_251__xmpp_improvements.mdwn create mode 100644 doc/design/assistant/blog/day_252__release_day.mdwn create mode 100644 doc/design/assistant/blog/day_253__OMG.mdwn create mode 100644 doc/design/assistant/blog/day_253__OMG/comment_1_bbdc61092771163e65a90a4755a807d8._comment create mode 100644 doc/design/assistant/blog/day_254__Android_app_polishing.mdwn create mode 100644 doc/design/assistant/blog/day_254__Android_app_polishing/comment_1_37f4ff5227566ce4b3fa69fc32568841._comment create mode 100644 doc/design/assistant/blog/day_254__Android_app_polishing/comment_2_58bbb105bdbb72bba85c3622195f43b9._comment create mode 100644 doc/design/assistant/blog/day_255__Debian_release_day.mdwn create mode 100644 doc/design/assistant/blog/day_256__8bit.mdwn create mode 100644 doc/design/assistant/blog/day_256__8bit/comment_1_f9b50263e3997d4c5b9836a2e0a346d7._comment create mode 100644 doc/design/assistant/blog/day_257__rainy_day.mdwn create mode 100644 doc/design/assistant/blog/day_258__beginning_of_the_end.mdwn create mode 100644 doc/design/assistant/blog/day_259__Android_dominos_toppling.mdwn create mode 100644 doc/design/assistant/blog/day_259__Android_dominos_toppling/comment_1_0b4a6e4893b0157e4768b46468dbbb87._comment create mode 100644 doc/design/assistant/blog/day_259__Android_dominos_toppling/comment_2_1ebc5aff5d217e1392cb7c8bb6c5156b._comment create mode 100644 doc/design/assistant/blog/day_259__Android_dominos_toppling/comment_3_eed7792f6142f3fc74d3c384bb16559b._comment create mode 100644 doc/design/assistant/blog/day_25__transfer_queueing.mdwn create mode 100644 doc/design/assistant/blog/day_25__transfer_queueing/comment_1_59fd4f1ffe96c412f613dc86276e7dbd._comment create mode 100644 doc/design/assistant/blog/day_25__transfer_queueing/comment_2_93bf768a67117e873af5732ecf08dc78._comment create mode 100644 doc/design/assistant/blog/day_260__Windows_dev_environment.mdwn create mode 100644 doc/design/assistant/blog/day_261__Windows_first_stage_complete.mdwn create mode 100644 doc/design/assistant/blog/day_262__DOS_path_separators.mdwn create mode 100644 doc/design/assistant/blog/day_262__DOS_path_separators/comment_1_45ecae90b22e31202c21083980d6b567._comment create mode 100644 doc/design/assistant/blog/day_263_catching_up.mdwn create mode 100644 doc/design/assistant/blog/day_263_catching_up/comment_1_9023da0573dfc81644d68128adb331a7._comment create mode 100644 doc/design/assistant/blog/day_264__Windows_second_stage_complete.mdwn create mode 100644 doc/design/assistant/blog/day_264__Windows_second_stage_complete/comment_1_42a7502d6ece75520eb59a76fdb1e2f0._comment create mode 100644 doc/design/assistant/blog/day_264__Windows_second_stage_complete/comment_2_f2b11322ac87e2a36cddc035b2c3c1ea._comment create mode 100644 doc/design/assistant/blog/day_264__Windows_second_stage_complete/comment_3_ea6ee05acb946fc7e8d95e62647cfa2a._comment create mode 100644 doc/design/assistant/blog/day_264__Windows_second_stage_complete/comment_4_9ce106baf28b7f75f7f6febd7bfcea70._comment create mode 100644 doc/design/assistant/blog/day_265__correctness.mdwn create mode 100644 doc/design/assistant/blog/day_265__correctness/comment_1_e8959a6df87eb92310947e66c7471e97._comment create mode 100644 doc/design/assistant/blog/day_265__correctness/comment_2_0cb953fcc085eedb34e65c227309ede7._comment create mode 100644 doc/design/assistant/blog/day_265__correctness/comment_3_df57628a8969af2995732e7ea2a0fae3._comment create mode 100644 doc/design/assistant/blog/day_266__release_day.mdwn create mode 100644 doc/design/assistant/blog/day_266__release_day/comment_1_92c8d1d9216b46b07dfe69bbc77a923e._comment create mode 100644 doc/design/assistant/blog/day_267__windows_autobuilder.mdwn create mode 100644 doc/design/assistant/blog/day_267__windows_autobuilder/comment_1_978b584d86395f2f621b0e1f7c5e70d7._comment create mode 100644 doc/design/assistant/blog/day_267__windows_autobuilder/comment_2_8f978d2811c8fbf11e3d12f245bdb52b._comment create mode 100644 doc/design/assistant/blog/day_268__core_monad_change.mdwn create mode 100644 doc/design/assistant/blog/day_269__bugfixes.mdwn create mode 100644 doc/design/assistant/blog/day_26__dying_drives.mdwn create mode 100644 doc/design/assistant/blog/day_270__release_and_xmpp.mdwn create mode 100644 doc/design/assistant/blog/day_271__more_xmpp.mdwn create mode 100644 doc/design/assistant/blog/day_272__fuzz_tester.mdwn create mode 100644 doc/design/assistant/blog/day_273-274__fun.mdwn create mode 100644 doc/design/assistant/blog/day_275__working_hard_or.mdwn create mode 100644 doc/design/assistant/blog/day_276__fuzzing_continues.mdwn create mode 100644 doc/design/assistant/blog/day_276__fuzzing_continues/comment_1_f5dd0658511a1063c2eb025b0fe98426._comment create mode 100644 doc/design/assistant/blog/day_276__fuzzing_continues/comment_2_a56c4c26a9e7bb8cfe3f598dbeed0813._comment create mode 100644 doc/design/assistant/blog/day_277__private_static_protected_void.mdwn create mode 100644 doc/design/assistant/blog/day_278__winding_down.mdwn create mode 100644 doc/design/assistant/blog/day_279__final_release_prep.mdwn create mode 100644 doc/design/assistant/blog/day_27__robust_transfers.mdwn create mode 100644 doc/design/assistant/blog/day_28-35__threaded_runtime_tarpit.mdwn create mode 100644 doc/design/assistant/blog/day_280__yesod.mdwn create mode 100644 doc/design/assistant/blog/day_280__yesod/comment_1_a42213a8cef71f2b54db18606028136d._comment create mode 100644 doc/design/assistant/blog/day_281__back.mdwn create mode 100644 doc/design/assistant/blog/day_281__back/comment_1_128809c5a2a9f5cc345a10fdbf55be01._comment create mode 100644 doc/design/assistant/blog/day_281__back/comment_2_6d0bbdf6ebaff9da399804570f0e606d._comment create mode 100644 doc/design/assistant/blog/day_282-283__caught_up.mdwn create mode 100644 doc/design/assistant/blog/day_284__porting.mdwn create mode 100644 doc/design/assistant/blog/day_285__fixed_the_archive_directory_loop.mdwn create mode 100644 doc/design/assistant/blog/day_285__fixed_the_archive_directory_loop/comment_1_1065e756dc6d66aefd214eb8ac5ebe1d._comment create mode 100644 doc/design/assistant/blog/day_286__Windows_test_suite.mdwn create mode 100644 doc/design/assistant/blog/day_287__niceness.mdwn create mode 100644 doc/design/assistant/blog/day_288__success_stories.mdwn create mode 100644 doc/design/assistant/blog/day_288__success_stories/comment_10_9ddf57b8ae0241268bb33bec1b169e4c._comment create mode 100644 doc/design/assistant/blog/day_288__success_stories/comment_11_50b8a597bd8677608f2ef176443f23f3._comment create mode 100644 doc/design/assistant/blog/day_288__success_stories/comment_12_f2df427cf3608377e9a52d8bdeadb26f._comment create mode 100644 doc/design/assistant/blog/day_288__success_stories/comment_13_8762efed97f21eeba8f0a7be45bd924a._comment create mode 100644 doc/design/assistant/blog/day_288__success_stories/comment_14_55e1bb15c3a93d582d110f8173ceefc2._comment create mode 100644 doc/design/assistant/blog/day_288__success_stories/comment_15_5749aef8b585b293385b20b75c40f9d8._comment create mode 100644 doc/design/assistant/blog/day_288__success_stories/comment_16_911c6d2764906cad7d6324835441ed34._comment create mode 100644 doc/design/assistant/blog/day_288__success_stories/comment_17_eb6aa8af5aa70877255a11d132d51aba._comment create mode 100644 doc/design/assistant/blog/day_288__success_stories/comment_18_9a57de4cea407a73b2d023d85afdccc6._comment create mode 100644 doc/design/assistant/blog/day_288__success_stories/comment_19_1767c86067bee35941004282b96b8e95._comment create mode 100644 doc/design/assistant/blog/day_288__success_stories/comment_1_22b28ca3d4d3283ad8c21ae052fb9752._comment create mode 100644 doc/design/assistant/blog/day_288__success_stories/comment_20_1d47f3e1b9f0081649cedae4288bac83._comment create mode 100644 doc/design/assistant/blog/day_288__success_stories/comment_21_31d3f58cad83cb1ecc4821a15ca258d8._comment create mode 100644 doc/design/assistant/blog/day_288__success_stories/comment_22_b512bd2bf29dfaab6b36bf204518fdb6._comment create mode 100644 doc/design/assistant/blog/day_288__success_stories/comment_2_343333356de20e170edb8020faa7400d._comment create mode 100644 doc/design/assistant/blog/day_288__success_stories/comment_3_4e4034bec789543b562ac263df3e21dd._comment create mode 100644 doc/design/assistant/blog/day_288__success_stories/comment_4_0c52794c77a9b7afc5112f5edf9cb793._comment create mode 100644 doc/design/assistant/blog/day_288__success_stories/comment_5_7ca419aa3a187857b19268572d5df297._comment create mode 100644 doc/design/assistant/blog/day_288__success_stories/comment_6_3edd56b3b04f19faba8d75cca285a662._comment create mode 100644 doc/design/assistant/blog/day_288__success_stories/comment_7_146331ae2de25a6dc3595dffab9514de._comment create mode 100644 doc/design/assistant/blog/day_288__success_stories/comment_8_72be9307e75eb120451f3d6ab7c8165e._comment create mode 100644 doc/design/assistant/blog/day_288__success_stories/comment_9_c27eb0a4181e85a3eed41130402350bf._comment create mode 100644 doc/design/assistant/blog/day_289__back_in_the_swing.mdwn create mode 100644 doc/design/assistant/blog/day_290__https_release.mdwn create mode 100644 doc/design/assistant/blog/day_291__--all.mdwn create mode 100644 doc/design/assistant/blog/day_291__--all/comment_1_eaa9fef19a035bef9c439e87d47c834b._comment create mode 100644 doc/design/assistant/blog/day_291__--all/comment_2_90bbc26bf92048de7cbaf5fb719c9593._comment create mode 100644 doc/design/assistant/blog/day_291__--all/comment_3_75006e9909425dcbf86415a9f7c90372._comment create mode 100644 doc/design/assistant/blog/day_291__--all/comment_4_5440449bbc5a353f7430f72e19c35e92._comment create mode 100644 doc/design/assistant/blog/day_292__bugfixes.mdwn create mode 100644 doc/design/assistant/blog/day_292__bugfixes/comment_1_bbac3878d80f7540d229183c56664784._comment create mode 100644 doc/design/assistant/blog/day_292__bugfixes/comment_2_8c9e5291ceb257f3a938af0ad967c5d7._comment create mode 100644 doc/design/assistant/blog/day_292__bugfixes/comment_3_02f875e8edd30f47939249f16d92712b._comment create mode 100644 doc/design/assistant/blog/day_293__gpg_builds.mdwn create mode 100644 doc/design/assistant/blog/day_293__gpg_builds/comment_1_4f152de8ea5aca4ec381d439e2a821f7._comment create mode 100644 doc/design/assistant/blog/day_293__gpg_builds/comment_2_42f625638638bc875379f6c604d6f673._comment create mode 100644 doc/design/assistant/blog/day_294__release_day.mdwn create mode 100644 doc/design/assistant/blog/day_295__balls_in_the_air.mdwn create mode 100644 doc/design/assistant/blog/day_296__new_crowdfunding_campaign.mdwn create mode 100644 doc/design/assistant/blog/day_296__new_crowdfunding_campaign/comment_1_cccad1a5103c504d21d0f8e69bb39e1b._comment create mode 100644 doc/design/assistant/blog/day_296__new_crowdfunding_campaign/comment_2_4fef7bd9c8e15cd57df365fadb95717f._comment create mode 100644 doc/design/assistant/blog/day_296__new_crowdfunding_campaign/comment_3_0b9258a1f5079e53c60138f06d0c63b1._comment create mode 100644 doc/design/assistant/blog/day_296__new_crowdfunding_campaign/comment_4_46183b97ca904bc06e46569c30db2edc._comment create mode 100644 doc/design/assistant/blog/day_297__back_to_work.mdwn create mode 100644 doc/design/assistant/blog/day_297__back_to_work/comment_1_e300feb821bfe7b76b2cec4376d16ffa._comment create mode 100644 doc/design/assistant/blog/day_298__exceptional.mdwn create mode 100644 doc/design/assistant/blog/day_299__bugfixing.mdwn create mode 100644 doc/design/assistant/blog/day_2__races.mdwn create mode 100644 doc/design/assistant/blog/day_300__new_logo.mdwn create mode 100644 doc/design/assistant/blog/day_300__new_logo/comment_1_9fc64e33863b9fce00f6a03417a91e36._comment create mode 100644 doc/design/assistant/blog/day_300__new_logo/comment_2_e8aac0298f90004e81492d2c7f85eda0._comment create mode 100644 doc/design/assistant/blog/day_300__new_logo/comment_3_6308c767f6e4bf090102191c91520d04._comment create mode 100644 doc/design/assistant/blog/day_301__direct_unannex.mdwn create mode 100644 doc/design/assistant/blog/day_302_release_day.mdwn create mode 100644 doc/design/assistant/blog/day_302_release_day/comment_1_fe6e572ba706e95188463d9f3e004d03._comment create mode 100644 doc/design/assistant/blog/day_303__oops.mdwn create mode 100644 doc/design/assistant/blog/day_304__dropunused_safety.mdwn create mode 100644 doc/design/assistant/blog/day_304__dropunused_safety/comment_1_1bbcf6c74b6437c44ff8604401fb1432._comment create mode 100644 doc/design/assistant/blog/day_305__interesting_bugs.mdwn create mode 100644 doc/design/assistant/blog/day_306__offtopic.mdwn create mode 100644 doc/design/assistant/blog/day_307__buuuugs.mdwn create mode 100644 doc/design/assistant/blog/day_308__ssh-agent.mdwn create mode 100644 doc/design/assistant/blog/day_308__ssh-agent/comment_1_5f0fc810cf1e1cd9b3ddba3cd19bb19d._comment create mode 100644 doc/design/assistant/blog/day_309__filenames.mdwn create mode 100644 doc/design/assistant/blog/day_310__release_day.mdwn create mode 100644 doc/design/assistant/blog/day_310__release_day/comment_1_1e008583cebd8e373e83729529914db7._comment create mode 100644 doc/design/assistant/blog/day_311__Windows_porting.mdwn create mode 100644 doc/design/assistant/blog/day_311__Windows_porting/comment_1_8e738f54a72557bee1e19970472b925c._comment create mode 100644 doc/design/assistant/blog/day_312__DebConf_midpoint.mdwn create mode 100644 doc/design/assistant/blog/day_313__back.mdwn create mode 100644 doc/design/assistant/blog/day_313__back/comment_1_fbf3fdf9688c18156753d446facd942d._comment create mode 100644 doc/design/assistant/blog/day_314__quvi.mdwn create mode 100644 doc/design/assistant/blog/day_314__quvi/comment_1_3fdfb0742cb5422530ddd97b904f2a42._comment create mode 100644 doc/design/assistant/blog/day_315__backlog.mdwn create mode 100644 doc/design/assistant/blog/day_316__day_off.mdwn create mode 100644 doc/design/assistant/blog/day_317__misc.mdwn create mode 100644 doc/design/assistant/blog/day_36__minimal_test_case.mdwn create mode 100644 doc/design/assistant/blog/day_37__back.mdwn create mode 100644 doc/design/assistant/blog/day_39__twice_is_enemy_action.mdwn create mode 100644 doc/design/assistant/blog/day_3__more_races.mdwn create mode 100644 doc/design/assistant/blog/day_3__more_races/comment_1_d6015338f602b574a3805de5481fc45e._comment create mode 100644 doc/design/assistant/blog/day_3__more_races/comment_2_4d6b23fc6442e0ee0303523cb69d0fba._comment create mode 100644 doc/design/assistant/blog/day_3__more_races/comment_3_03f5b2344c2a47dea60086f217d60f9b._comment create mode 100644 doc/design/assistant/blog/day_3__more_races/comment_4_860e90e989ec022100001c65e353a91e._comment create mode 100644 doc/design/assistant/blog/day_40__dbus.mdwn create mode 100644 doc/design/assistant/blog/day_40__dbus/comment_1_43ed2a79629868b018ec9f54a32bcacc._comment create mode 100644 doc/design/assistant/blog/day_40__dbus/comment_2_6799f2baf6a6ce14b1fa76a8402840c0._comment create mode 100644 doc/design/assistant/blog/day_40__dbus/comment_3_fa1d7444bdafcb990cacf2ace7ee6ef1._comment create mode 100644 doc/design/assistant/blog/day_40__dbus/comment_4_3399ddad951c1a950281bb6941fc3f6f._comment create mode 100644 doc/design/assistant/blog/day_40__dbus/comment_5_40b6b9d741d3081203f0cc94eb8dc3ea._comment create mode 100644 doc/design/assistant/blog/day_41__foo.mdwn create mode 100644 doc/design/assistant/blog/day_41__foo/comment_1_ace21fa257a4c2fd412b6ff2944a23e8._comment create mode 100644 doc/design/assistant/blog/day_42__the_answer.mdwn create mode 100644 doc/design/assistant/blog/day_43__simple_scanner.mdwn create mode 100644 doc/design/assistant/blog/day_44__webapp_basics.mdwn create mode 100644 doc/design/assistant/blog/day_44__webapp_basics/comment_1_d5fb67f373038e9f583cb2e1992bef67._comment create mode 100644 doc/design/assistant/blog/day_45__long_polling.mdwn create mode 100644 doc/design/assistant/blog/day_45__long_polling/comment_1_994bec0978324e268666073e8ff4f6ae._comment create mode 100644 doc/design/assistant/blog/day_45__long_polling/comment_2_dfa164c86290899139491acccddd8b2b._comment create mode 100644 doc/design/assistant/blog/day_45__long_polling/comment_3_5526c9dd4fd87da56cb8456083169f55._comment create mode 100644 doc/design/assistant/blog/day_45__long_polling/comment_4_91630f5bf162dfd4fbb3920f1318535b._comment create mode 100644 doc/design/assistant/blog/day_45__long_polling/comment_5_b3e41ba77f21e93a4e086483793bf5ce._comment create mode 100644 doc/design/assistant/blog/day_45__long_polling/full.png create mode 100644 doc/design/assistant/blog/day_45__long_polling/phone.png create mode 100644 doc/design/assistant/blog/day_46__notification_pools.mdwn create mode 100644 doc/design/assistant/blog/day_47__alert_messages.mdwn create mode 100644 doc/design/assistant/blog/day_48__intro.mdwn create mode 100644 doc/design/assistant/blog/day_49__first_run_experience.mdwn create mode 100644 doc/design/assistant/blog/day_49__first_run_experience/comment_1_e146cf06c8dd6303dd6a991f152a73fe._comment create mode 100644 doc/design/assistant/blog/day_49__first_run_experience/comment_2_5d6adcf6782c02283bef6189582ee467._comment create mode 100644 doc/design/assistant/blog/day_49__first_run_experience/comment_3_7ac2e34c2a7bc9b57488ca0c91307d32._comment create mode 100644 doc/design/assistant/blog/day_49__first_run_experience/comment_4_549b07bb02c07a5b1b95445b01758db2._comment create mode 100644 doc/design/assistant/blog/day_4__speed.mdwn create mode 100644 doc/design/assistant/blog/day_4__speed/comment_1_bf3c9c33cc0dea5eaeb6f2af110b924b._comment create mode 100644 doc/design/assistant/blog/day_4__speed/comment_2_33aba4c9abaa3e6a05a2c87ab7df9d0e._comment create mode 100644 doc/design/assistant/blog/day_50__directory_name.mdwn create mode 100644 doc/design/assistant/blog/day_50__directory_name/comment_1_782cec95a8558a05b2b38a2d2302214d._comment create mode 100644 doc/design/assistant/blog/day_50__directory_name/comment_2_2b8ceb0a26f25e8ed2711bcbe7225a58._comment create mode 100644 doc/design/assistant/blog/day_51__desktop.mdwn create mode 100644 doc/design/assistant/blog/day_52__file_browser.mdwn create mode 100644 doc/design/assistant/blog/day_52__file_browser/comment_1_cd000c2d56b60cc1f17b221322a32aa7._comment create mode 100644 doc/design/assistant/blog/day_52__file_browser/comment_2_21d1da67cf9105a545583ba2302c10fb._comment create mode 100644 doc/design/assistant/blog/day_54__adding_removable_drives.mdwn create mode 100644 doc/design/assistant/blog/day_54__adding_removable_drives/comment_1_5de4f220a3534f55b1f2208d1d812d63._comment create mode 100644 doc/design/assistant/blog/day_54__adding_removable_drives/comment_2_8dae1ed0a70acf9628b88692dc32ac5f._comment create mode 100644 doc/design/assistant/blog/day_55__alerts.mdwn create mode 100644 doc/design/assistant/blog/day_55__alerts/comment_1_6319045500a8a5e049304fdec5ff4cf4._comment create mode 100644 doc/design/assistant/blog/day_56__transfer_control.mdwn create mode 100644 doc/design/assistant/blog/day_57__afk.mdwn create mode 100644 doc/design/assistant/blog/day_57__afk/comment_1_70e1c9f925f040c1700d3e26bab373d5._comment create mode 100644 doc/design/assistant/blog/day_57__afk/comment_2_c70d3faccfcebf47deb25e270498cb56._comment create mode 100644 doc/design/assistant/blog/day_57__afk/comment_3_89020ebc6d31485339bdea41a872df3c._comment create mode 100644 doc/design/assistant/blog/day_57__afk/comment_4_8b1f65f141ffd9813e7f5a3380f7f520._comment create mode 100644 doc/design/assistant/blog/day_58__more_transfer_control.mdwn create mode 100644 doc/design/assistant/blog/day_59__dinner.mdwn create mode 100644 doc/design/assistant/blog/day_59__dinner/comment_1_0c1e2d69496473e7e4a2956a2814f5dd._comment create mode 100644 doc/design/assistant/blog/day_5__committing.mdwn create mode 100644 doc/design/assistant/blog/day_60__taking_stock.mdwn create mode 100644 doc/design/assistant/blog/day_60__taking_stock/comment_1_6722f81ee084f1ea9e8fe47f34576397._comment create mode 100644 doc/design/assistant/blog/day_61__network_connection_detection.mdwn create mode 100644 doc/design/assistant/blog/day_61__network_connection_detection/comment_1_09b58f41a8d48f218619711ee19511ac._comment create mode 100644 doc/design/assistant/blog/day_62__smarter_syncing.mdwn create mode 100644 doc/design/assistant/blog/day_63__transfer_retries.mdwn create mode 100644 doc/design/assistant/blog/day_63__transfer_retries/comment_1_990d4eb6066c4e2b9ddb3cabef32e4b9._comment create mode 100644 doc/design/assistant/blog/day_64__syncing_robustly.mdwn create mode 100644 doc/design/assistant/blog/day_65__transfer_polish.mdwn create mode 100644 doc/design/assistant/blog/day_66__the_merge.mdwn create mode 100644 doc/design/assistant/blog/day_66__the_merge/comment_10_eeccf4e73cc321542a1fe4780805a81e._comment create mode 100644 doc/design/assistant/blog/day_66__the_merge/comment_1_a34e89316d1662826848f31061c4e46b._comment create mode 100644 doc/design/assistant/blog/day_66__the_merge/comment_2_09e244d23d05052fa2b11a7181888366._comment create mode 100644 doc/design/assistant/blog/day_66__the_merge/comment_3_3961a03e167903959b96b054835613f6._comment create mode 100644 doc/design/assistant/blog/day_66__the_merge/comment_4_12a57af9f580918818b4a9f68396d5c4._comment create mode 100644 doc/design/assistant/blog/day_66__the_merge/comment_5_8ce638960012367c888e018a5f05db19._comment create mode 100644 doc/design/assistant/blog/day_66__the_merge/comment_6_f461b856b940e6914bcd2b681cf9505f._comment create mode 100644 doc/design/assistant/blog/day_66__the_merge/comment_7_6e73aca1fc1747d0e742e054b88b5d78._comment create mode 100644 doc/design/assistant/blog/day_66__the_merge/comment_8_d85f1ce23ae16d5a8eb88d2c3999acb7._comment create mode 100644 doc/design/assistant/blog/day_66__the_merge/comment_9_c06dab4d78122c85beeaf300ffc3e376._comment create mode 100644 doc/design/assistant/blog/day_67__progress_bars.mdwn create mode 100644 doc/design/assistant/blog/day_68__transfers.mdwn create mode 100644 doc/design/assistant/blog/day_68__transfers/comment_1_5282960c0b553fbc0f411345b9745324._comment create mode 100644 doc/design/assistant/blog/day_69__build_fixes.mdwn create mode 100644 doc/design/assistant/blog/day_6__polish.mdwn create mode 100644 doc/design/assistant/blog/day_70__adding_ssh_remotes.mdwn create mode 100644 doc/design/assistant/blog/day_70__adding_ssh_remotes/comment_10_2fac85357ac8feccff82beabd3791439._comment create mode 100644 doc/design/assistant/blog/day_70__adding_ssh_remotes/comment_11_e9e496005fd1bf5a10c9e286b83e51fa._comment create mode 100644 doc/design/assistant/blog/day_70__adding_ssh_remotes/comment_1_913e6ae7c8f7db90b9767ec35fc84205._comment create mode 100644 doc/design/assistant/blog/day_70__adding_ssh_remotes/comment_2_634ca3c236e2062289e7df5f0d77a3c5._comment create mode 100644 doc/design/assistant/blog/day_70__adding_ssh_remotes/comment_3_e365bbcbb7f66ce2b35fcd5b969ab315._comment create mode 100644 doc/design/assistant/blog/day_70__adding_ssh_remotes/comment_4_b15499722a655489f9ea60ff9d4c47c6._comment create mode 100644 doc/design/assistant/blog/day_70__adding_ssh_remotes/comment_5_8ea48276f060e75d9f40617d2a1ccd08._comment create mode 100644 doc/design/assistant/blog/day_70__adding_ssh_remotes/comment_6_9b8bf7e9fa715977fbeb98087deefd1a._comment create mode 100644 doc/design/assistant/blog/day_70__adding_ssh_remotes/comment_7_42e09eacdc10c7cf579bfc6470b5117c._comment create mode 100644 doc/design/assistant/blog/day_70__adding_ssh_remotes/comment_8_6c02f31063b3d399d1b4f823bd6543ce._comment create mode 100644 doc/design/assistant/blog/day_70__adding_ssh_remotes/comment_9_dd0447cb3b39d3a8c1a7cc00f17d8bc2._comment create mode 100644 doc/design/assistant/blog/day_71__ssh_probing.mdwn create mode 100644 doc/design/assistant/blog/day_71__ssh_probing/comment_1_56a0c29f7454cfca5cc30b2849e6e942._comment create mode 100644 doc/design/assistant/blog/day_71__ssh_probing/comment_2_f3bd3e366c92c833c7e217da125481b8._comment create mode 100644 doc/design/assistant/blog/day_72__remote_ssh_server_configurator_finished.mdwn create mode 100644 doc/design/assistant/blog/day_73__rsync.net_configurator.mdwn create mode 100644 doc/design/assistant/blog/day_74__bits_and_peices.mdwn create mode 100644 doc/design/assistant/blog/day_75__zeromq_and_pairing.mdwn create mode 100644 doc/design/assistant/blog/day_76__pairing.mdwn create mode 100644 doc/design/assistant/blog/day_76__pairing/comment_1_09665f269343422cd18051fad1a8c19e._comment create mode 100644 doc/design/assistant/blog/day_76__pairing/comment_2_8e1b2233579bc26bfd758bbf6b3bdc07._comment create mode 100644 doc/design/assistant/blog/day_76__pairing/comment_3_a8b6a8432da20c468c633da8e7cbc2f3._comment create mode 100644 doc/design/assistant/blog/day_76__pairing/comment_4_36a428a2e1803f4391b821d1892f0cd7._comment create mode 100644 doc/design/assistant/blog/day_76__pairing/comment_5_11f332fe2050d8c1416e71f9e85ba280._comment create mode 100644 doc/design/assistant/blog/day_76__pairing/comment_6_973aeb656b78eca97474ea1a3f5b57b7._comment create mode 100644 doc/design/assistant/blog/day_76__pairing/comment_7_03d2b3343f34377a4d6171e06b7609f6._comment create mode 100644 doc/design/assistant/blog/day_77_alert_buttons.mdwn create mode 100644 doc/design/assistant/blog/day_78__pairing_continued.mdwn create mode 100644 doc/design/assistant/blog/day_79__pairing_finished.mdwn create mode 100644 doc/design/assistant/blog/day_7__bugfixes.mdwn create mode 100644 doc/design/assistant/blog/day_7__bugfixes/profile.png create mode 100644 doc/design/assistant/blog/day_7__bugfixes/profile2.png create mode 100644 doc/design/assistant/blog/day_80__default_backend.mdwn create mode 100644 doc/design/assistant/blog/day_81__enabling_pre-existing_special_remotes.mdwn create mode 100644 doc/design/assistant/blog/day_82__git-annex_branch_work.mdwn create mode 100644 doc/design/assistant/blog/day_83__3-way.mdwn create mode 100644 doc/design/assistant/blog/day_84__deferred_downloads.mdwn create mode 100644 doc/design/assistant/blog/day_85__more_foundation_work.mdwn create mode 100644 doc/design/assistant/blog/day_86__towards_the_beta.mdwn create mode 100644 doc/design/assistant/blog/day_87__more_progress_progress.mdwn create mode 100644 doc/design/assistant/blog/day_88__progressbars_still_progressing.mdwn create mode 100644 doc/design/assistant/blog/day_89__final_polish.mdwn create mode 100644 doc/design/assistant/blog/day_8__speed.mdwn create mode 100644 doc/design/assistant/blog/day_8__speed/comment_1_a3dba537b276d5737abc8cb93f1965f4._comment create mode 100644 doc/design/assistant/blog/day_90__beta.mdwn create mode 100644 doc/design/assistant/blog/day_90__beta/comment_1_5f2a3b18ad7558abe04f51534a29ff13._comment create mode 100644 doc/design/assistant/blog/day_90__beta/comment_2_961c4eba97f4eac75174244d6b2b00c0._comment create mode 100644 doc/design/assistant/blog/day_90__beta/comment_3_c76675a4633cbbe347ed42c222918d38._comment create mode 100644 doc/design/assistant/blog/day_90__beta/comment_4_f0b8f77cb691e747fe35bcf2f51b5baa._comment create mode 100644 doc/design/assistant/blog/day_90__beta/comment_5_99fbc9feac62e66a12b0d357cf86ccc1._comment create mode 100644 doc/design/assistant/blog/day_91__break.mdwn create mode 100644 doc/design/assistant/blog/day_92__S3.mdwn create mode 100644 doc/design/assistant/blog/day_92__S3/comment_1_eda656247d11cea7fbed2e33137a39e5._comment create mode 100644 doc/design/assistant/blog/day_92__S3/comment_2_8249d2d9521e44c674da3fda74be077a._comment create mode 100644 doc/design/assistant/blog/day_93__OSX_standalone_app.mdwn create mode 100644 doc/design/assistant/blog/day_93__easy_install.mdwn create mode 100644 doc/design/assistant/blog/day_93__easy_install/comment_1_d4f7de723c98577ef28d89ee6b87fd13._comment create mode 100644 doc/design/assistant/blog/day_93__easy_install/comment_2_6337b341c1cfb2132b59704394e57b36._comment create mode 100644 doc/design/assistant/blog/day_95__repository_groups.mdwn create mode 100644 doc/design/assistant/blog/day_96__revisiting_file_adds.mdwn create mode 100644 doc/design/assistant/blog/day_96__revisiting_file_adds/comment_1_da3ca47041168b6c82aeb2c18acc5017._comment create mode 100644 doc/design/assistant/blog/day_97__stuffing.mdwn create mode 100644 doc/design/assistant/blog/day_98__preferred_content.mdwn create mode 100644 doc/design/assistant/blog/day_98__preferred_content/comment_1_2136618e3515d0ac6369a41f1934ec2a._comment create mode 100644 doc/design/assistant/blog/day_98__preferred_content/comment_2_5f6db00e69628bf2f72b0e6f2981a49b._comment create mode 100644 doc/design/assistant/blog/day_99_shotgun.mdwn create mode 100644 doc/design/assistant/blog/day_99_shotgun/comment_1_12bb8f54bb13ea20ac4187a2301d77ca._comment create mode 100644 doc/design/assistant/blog/day_9__correctness.mdwn create mode 100644 doc/design/assistant/blog/day_9__correctness/comment_1_564a39cb976767e2c0a9c74fabe10be4._comment create mode 100644 doc/design/assistant/blog/day_9__correctness/comment_2_77924e9d50b40f05e792e427a25849a6._comment create mode 100644 doc/design/assistant/blog/day_9__correctness/comment_3_92bd86cd06d579e23800af2e5c66a291._comment create mode 100644 doc/design/assistant/blog/day_9__correctness/comment_4_0d12b51ccdfc2a94d3e59a5628521e0a._comment create mode 100644 doc/design/assistant/blog/day_9__correctness/comment_5_208f9dd3e1d92555b05c29159538a901._comment create mode 100644 doc/design/assistant/blog/day_9__correctness/comment_6_90cc6b60718896fb175919417600fdf9._comment create mode 100644 doc/design/assistant/chunks.mdwn create mode 100644 doc/design/assistant/chunks/comment_1_a3b24ff308664e89c97d23034e4ffe2f._comment create mode 100644 doc/design/assistant/chunks/comment_2_ec5c7a80d1e17db19d178e821f6534e5._comment create mode 100644 doc/design/assistant/cloud.mdwn create mode 100644 doc/design/assistant/cloud/comment_1_4997778abc171999499487b71b31c9ba._comment create mode 100644 doc/design/assistant/cloud/comment_2_08da8bc74a4845e354dca99184cffd70._comment create mode 100644 doc/design/assistant/cloud/comment_3_faafd1266301997b1822d215ec8e8d8c._comment create mode 100644 doc/design/assistant/cloud/comment_4_3eb557d5439831f6e0032944d12c02cf._comment create mode 100644 doc/design/assistant/comment_10_f2233fad55c20686cf299bf6788f1f23._comment create mode 100644 doc/design/assistant/comment_11_a38f0f21c2346e65b786d791b6829f9b._comment create mode 100644 doc/design/assistant/comment_12_5e991177d6577384f39a36ae02f5f574._comment create mode 100644 doc/design/assistant/comment_13_f8625c6f43b58847840df338a73b7972._comment create mode 100644 doc/design/assistant/comment_14_c37ef5931b0f5c1f808083e0d636a208._comment create mode 100644 doc/design/assistant/comment_15_68c98a27083567f20c2e6bc2a760991b._comment create mode 100644 doc/design/assistant/comment_16_8e6788c817c60371d2a2f158e1a65f87._comment create mode 100644 doc/design/assistant/comment_17_97bdfacac5ac492281c9454ee4c0228e._comment create mode 100644 doc/design/assistant/comment_18_53137b2df4913496c0afb2d895aa4ee2._comment create mode 100644 doc/design/assistant/comment_19_ff1b0ba57e22ed757ec3fc5400b5e43e._comment create mode 100644 doc/design/assistant/comment_1_a48fcfbf97f0a373ea375cd8f07f0fc8._comment create mode 100644 doc/design/assistant/comment_20_099da245e3276fa84f5e14312d186621._comment create mode 100644 doc/design/assistant/comment_2_6d3552414fdcc2ed3244567e6c67989d._comment create mode 100644 doc/design/assistant/comment_3_05223be50c889b2ed6bc4abf74116450._comment create mode 100644 doc/design/assistant/comment_4_fbbd93b55803ae21e6ba4b6568c2fafd._comment create mode 100644 doc/design/assistant/comment_5_f4e9af3fed6c27e8ff39badb9794064d._comment create mode 100644 doc/design/assistant/comment_6_c7ad07cade1f44f9a8b61f92225bb9c5._comment create mode 100644 doc/design/assistant/comment_7_609d38e993267195a80fecd84c93d1e2._comment create mode 100644 doc/design/assistant/comment_8_22b818e1a2a825efb78139271a14f944._comment create mode 100644 doc/design/assistant/comment_9_d052e2142da8b4838fb1edf791ea23ae._comment create mode 100644 doc/design/assistant/configurators.mdwn create mode 100644 doc/design/assistant/deltas.mdwn create mode 100644 doc/design/assistant/deltas/comment_1_bdb477af913c9782c0e8509e6b294b6e._comment create mode 100644 doc/design/assistant/deltas/comment_2_71889d15ba20ebb0fe13080c68162a5b._comment create mode 100644 doc/design/assistant/deltas/comment_3_c60bbe9b280855a583c7c3e48e803760._comment create mode 100644 doc/design/assistant/deltas/comment_4_d1728f96202b7113b0671b90ed16473d._comment create mode 100644 doc/design/assistant/desymlink.mdwn create mode 100644 doc/design/assistant/desymlink/comment_1_f1bfe250b7f872359f7075998b6e42e3._comment create mode 100644 doc/design/assistant/desymlink/comment_2_5e876edfe9853645f761b5ed9b5021aa._comment create mode 100644 doc/design/assistant/desymlink/comment_3_538561d74371e53c2f8df7f5ebdf58a8._comment create mode 100644 doc/design/assistant/desymlink/comment_4_586ecaa800e6c162377c937da5e65440._comment create mode 100644 doc/design/assistant/desymlink/comment_5_8fc703de67814cf2aec2a908852298a4._comment create mode 100644 doc/design/assistant/desymlink/comment_6_1b473ad89494afb82250af4b6df5f5c9._comment create mode 100644 doc/design/assistant/disaster_recovery.mdwn create mode 100644 doc/design/assistant/disaster_recovery/comment_1_955dc807196863da23aa8dbd15e04364._comment create mode 100644 doc/design/assistant/encrypted_git_remotes.mdwn create mode 100644 doc/design/assistant/gpgkeys.mdwn create mode 100644 doc/design/assistant/gpgkeys/comment_1_a14427f88c9fd8e25ad8708146bb4bff._comment create mode 100644 doc/design/assistant/inotify.mdwn create mode 100644 doc/design/assistant/inotify/comment_1_3d3ff74447452d65c10ccc3dbfc323cd._comment create mode 100644 doc/design/assistant/inotify/comment_2_a3c0fa6d97397c508b4b8aafdcee8f6f._comment create mode 100644 doc/design/assistant/inotify/comment_3_b346e870c1cd80e4b0a313c3a9fed6b3._comment create mode 100644 doc/design/assistant/inotify/comment_4_32be58b4c3b17a4ea539690d2fb45159._comment create mode 100644 doc/design/assistant/inotify/comment_5_0cdd3046d90ad2012025d846ece0731e._comment create mode 100644 doc/design/assistant/inotify/comment_6_e197d5d0d853572ec1f2e5985762e60d._comment create mode 100644 doc/design/assistant/inotify/comment_7_00809aaad6b68f189a9cc42af810a0a6._comment create mode 100644 doc/design/assistant/leftovers.mdwn create mode 100644 doc/design/assistant/leftovers/comment_1_b20c88bb3c583a32023c1f6b6dc9486d._comment create mode 100644 doc/design/assistant/more_cloud_providers.mdwn create mode 100644 doc/design/assistant/pairing.mdwn create mode 100644 doc/design/assistant/partial_content.mdwn create mode 100644 doc/design/assistant/partial_content/comment_1_58c4faa321a5bb71adf9fdee079849f4._comment create mode 100644 doc/design/assistant/partial_content/comment_2_588009d2140b7d259cdf191dca539e14._comment create mode 100644 doc/design/assistant/polls.mdwn create mode 100644 doc/design/assistant/polls/2013_user_survey.mdwn create mode 100644 doc/design/assistant/polls/Android.mdwn create mode 100644 doc/design/assistant/polls/Android/comment_1_fa6c409833f28c67da105d25f4a440e0._comment create mode 100644 doc/design/assistant/polls/Android_default_directory.mdwn create mode 100644 doc/design/assistant/polls/Android_default_directory/comment_1_d39655091ac3ed51a9d4325d86b23ad7._comment create mode 100644 doc/design/assistant/polls/Android_default_directory/comment_2_2f1eaae95075db26488517720afd1c63._comment create mode 100644 doc/design/assistant/polls/Android_default_directory/comment_3_b484012f60789be73d7d5b338cff6203._comment create mode 100644 doc/design/assistant/polls/goals_for_April.mdwn create mode 100644 doc/design/assistant/polls/goals_for_April/comment_1_9f81fa96db5970a4be0828c74a6d2d55._comment create mode 100644 doc/design/assistant/polls/goals_for_April/comment_2_d8956d220ccacff3d2f6cbeb15718459._comment create mode 100644 doc/design/assistant/polls/goals_for_April/comment_3_aadad6dfd56d068d2e377606910c006f._comment create mode 100644 doc/design/assistant/polls/prioritizing_special_remotes.mdwn create mode 100644 doc/design/assistant/polls/prioritizing_special_remotes/comment_1_dd9280df27848a7ff132f5809dab0a79._comment create mode 100644 doc/design/assistant/polls/prioritizing_special_remotes/comment_2_370e0b9c43486ee96c825f9155eebde4._comment create mode 100644 doc/design/assistant/polls/prioritizing_special_remotes/comment_3_883a003b9c552b89f191135c582f99aa._comment create mode 100644 doc/design/assistant/polls/prioritizing_special_remotes/comment_4_746006c3fffc7f917c4526fd688051f7._comment create mode 100644 doc/design/assistant/polls/what_is_preventing_me_from_using_git-annex_assistant.mdwn create mode 100644 doc/design/assistant/polls/what_is_preventing_me_from_using_git-annex_assistant/comment_10_10a4839a05be39ced54ffbe880a588bb._comment create mode 100644 doc/design/assistant/polls/what_is_preventing_me_from_using_git-annex_assistant/comment_11_ac91d866f11c66dd8c86e2cd1a368c85._comment create mode 100644 doc/design/assistant/polls/what_is_preventing_me_from_using_git-annex_assistant/comment_12_e244c1bf334b1cc9ad0cc760bf8fe5de._comment create mode 100644 doc/design/assistant/polls/what_is_preventing_me_from_using_git-annex_assistant/comment_13_1a0faf4bdc78741937e8a2f5cb5bbec6._comment create mode 100644 doc/design/assistant/polls/what_is_preventing_me_from_using_git-annex_assistant/comment_14_8d8a11dbfae7a7bc574bdf37f87e0684._comment create mode 100644 doc/design/assistant/polls/what_is_preventing_me_from_using_git-annex_assistant/comment_15_c437adeaccf0b3d134e0f81c64e25b9f._comment create mode 100644 doc/design/assistant/polls/what_is_preventing_me_from_using_git-annex_assistant/comment_16_6e3fce3a32ab346dc3d0fd4b69967536._comment create mode 100644 doc/design/assistant/polls/what_is_preventing_me_from_using_git-annex_assistant/comment_17_1b7233d88593d0d99b26ea3e7af20d9c._comment create mode 100644 doc/design/assistant/polls/what_is_preventing_me_from_using_git-annex_assistant/comment_18_a23d5a0e2718b8e486f036fe8a413b36._comment create mode 100644 doc/design/assistant/polls/what_is_preventing_me_from_using_git-annex_assistant/comment_19_f4c84a9d701d52cf2f2e45f3d764a90c._comment create mode 100644 doc/design/assistant/polls/what_is_preventing_me_from_using_git-annex_assistant/comment_1_00a0de8190d946caaeeca3b44646146f._comment create mode 100644 doc/design/assistant/polls/what_is_preventing_me_from_using_git-annex_assistant/comment_20_199c9807499470771af6cbca6d034cfa._comment create mode 100644 doc/design/assistant/polls/what_is_preventing_me_from_using_git-annex_assistant/comment_21_9185b0e05b1b1997533694da1de83073._comment create mode 100644 doc/design/assistant/polls/what_is_preventing_me_from_using_git-annex_assistant/comment_2_35f6f121e54260cb960211a6e2e51e8e._comment create mode 100644 doc/design/assistant/polls/what_is_preventing_me_from_using_git-annex_assistant/comment_3_acbe4f63b5d552ac5ae5a12c6f42dc18._comment create mode 100644 doc/design/assistant/polls/what_is_preventing_me_from_using_git-annex_assistant/comment_4_0d988280865caae498a3b693b6342e37._comment create mode 100644 doc/design/assistant/polls/what_is_preventing_me_from_using_git-annex_assistant/comment_5_ac8fe3768c30dd7999c183500f8567bb._comment create mode 100644 doc/design/assistant/polls/what_is_preventing_me_from_using_git-annex_assistant/comment_6_36832de705a2bebf8dc6e65dcd661731._comment create mode 100644 doc/design/assistant/polls/what_is_preventing_me_from_using_git-annex_assistant/comment_7_3618067e473577a112e36970ca71e0ab._comment create mode 100644 doc/design/assistant/polls/what_is_preventing_me_from_using_git-annex_assistant/comment_8_07a13b6f000ddc0ac4472b863d8b50bd._comment create mode 100644 doc/design/assistant/polls/what_is_preventing_me_from_using_git-annex_assistant/comment_9_e15eb407d988fda363296c8b566cc8fb._comment create mode 100644 doc/design/assistant/progressbars.mdwn create mode 100644 doc/design/assistant/progressbars/comment_1_3ea263b1f334e8e38e14f00a96202988._comment create mode 100644 doc/design/assistant/rate_limiting.mdwn create mode 100644 doc/design/assistant/rate_limiting/comment_1_bd0fd62297ff1f87884b41c11fc4320c._comment create mode 100644 doc/design/assistant/screenshot/firstrun.png create mode 100644 doc/design/assistant/screenshot/intro.png create mode 100644 doc/design/assistant/sshpassword.mdwn create mode 100644 doc/design/assistant/sshpassword/comment_1_24399abe0a0c1de271490ee15e064760._comment create mode 100644 doc/design/assistant/sshpassword/comment_2_36a811bca209c7ac8a44d64bf8bc5bf3._comment create mode 100644 doc/design/assistant/syncing.mdwn create mode 100644 doc/design/assistant/syncing/comment_1_c70156174ff19b503978d623bd2df36f._comment create mode 100644 doc/design/assistant/syncing/comment_2_eb992b5b2c7a5ce23443e2a6007e5ff9._comment create mode 100644 doc/design/assistant/syncing/comment_3_e1b5e8a24556de16d1cacd27ee0c1bd1._comment create mode 100644 doc/design/assistant/syncing/efficiency.mdwn create mode 100644 doc/design/assistant/telehash.mdwn create mode 100644 doc/design/assistant/thanks/comment_1_8b08b5c30e5aea3fc4599f856fd25df5._comment create mode 100644 doc/design/assistant/todo.mdwn create mode 100644 doc/design/assistant/transfer_control.mdwn create mode 100644 doc/design/assistant/transfer_control/comment_1_d5adaef4712913dc0263d4ebafb79320._comment create mode 100644 doc/design/assistant/transfer_control/comment_2_3b51474fefa6c0d19055046e06af196d._comment create mode 100644 doc/design/assistant/transfer_control/comment_3_44a1a6d2db9097de9ae68ea1ff1b08a2._comment create mode 100644 doc/design/assistant/upgrading.mdwn create mode 100644 doc/design/assistant/webapp.mdwn create mode 100644 doc/design/assistant/webapp/comment_1_bab6f6fa720273c0f9700a3765150189._comment create mode 100644 doc/design/assistant/webapp/comment_2_3cf0cf460c7869d0cc22940fcc84aec4._comment create mode 100644 doc/design/assistant/webapp/comment_3_428e153135f7a64215730719207d82c4._comment create mode 100644 doc/design/assistant/webapp/comment_4_f4068a7abbb77ba6a3297cbcf1e503e9._comment create mode 100644 doc/design/assistant/webapp/comment_5_2bdb436f35c659316193b89ee6e52fcb._comment create mode 100644 doc/design/assistant/windows.mdwn create mode 100644 doc/design/assistant/windows/comment_1_f4b829318b182e1cec29f13babb6498e._comment create mode 100644 doc/design/assistant/xmpp.mdwn create mode 100644 doc/design/assistant/xmpp/comment_1_f20650f93d7f0ca39b9ba3ce0380193f._comment create mode 100644 doc/design/assistant/xmpp/comment_2_8c22839a8f5912b4a817415c4a359697._comment create mode 100644 doc/design/assistant/xmpp/comment_4_773102522f21844cffc841e6cde9229e._comment create mode 100644 doc/design/assistant/xmpp_security.mdwn create mode 100644 doc/design/assistant/xmpp_security/comment_1_c714e86553c02600249795efb224be8a._comment create mode 100644 doc/design/balanced_preferred_content.mdwn create mode 100644 doc/design/balanced_preferred_content/comment_1_a7eea522b04ddefbd0b9ff49dfb82d15._comment create mode 100644 doc/design/caching_database.mdwn create mode 100644 doc/design/encryption.mdwn create mode 100644 doc/design/encryption/comment_1_4715ffafb3c4a9915bc33f2b26aaa9c1._comment create mode 100644 doc/design/encryption/comment_2_a610b3d056a059899178859a3a821ea5._comment create mode 100644 doc/design/encryption/comment_3_cca186a9536cd3f6e86994631b14231c._comment create mode 100644 doc/design/encryption/comment_4_8f3ba3e504b058791fc6e6f9c38154cf._comment create mode 100644 doc/design/encryption/comment_5_520e60aa53217b5ba428d4c05d897dee._comment create mode 100644 doc/design/encryption/comment_6_d677fead0fe0c543f48f07d85f83f592._comment create mode 100644 doc/design/encryption/comment_7_c1c38a09b1276e29adc3ba564dc0fe4e._comment create mode 100644 doc/design/exporting_trees_to_special_remotes.mdwn create mode 100644 doc/design/exporting_trees_to_special_remotes/comment_10_75ba45174d3c4b927113a6908061b742._comment create mode 100644 doc/design/exporting_trees_to_special_remotes/comment_11_0827f5611c8e7e7ffa2633f8c06ae055._comment create mode 100644 doc/design/exporting_trees_to_special_remotes/comment_12_1bb8d57383ca733f3a0069ff30181366._comment create mode 100644 doc/design/exporting_trees_to_special_remotes/comment_13_f857e15124b70ae1abc74669f63a2d68._comment create mode 100644 doc/design/exporting_trees_to_special_remotes/comment_14_41e8ef74c6e62a4321d2046b2571a246._comment create mode 100644 doc/design/exporting_trees_to_special_remotes/comment_15_3fc518cee1a11b28da769c0915d33e3b._comment create mode 100644 doc/design/exporting_trees_to_special_remotes/comment_16_29f598eda413c0d5e17536d8f9438d31._comment create mode 100644 doc/design/exporting_trees_to_special_remotes/comment_17_32a3240206c5ffff71a47dffa6950c48._comment create mode 100644 doc/design/exporting_trees_to_special_remotes/comment_18_fe77370699b7ce0acd547fd1e045e254._comment create mode 100644 doc/design/exporting_trees_to_special_remotes/comment_19_00d28c758509939974e4583e9b1b9e12._comment create mode 100644 doc/design/exporting_trees_to_special_remotes/comment_19_1eda1af40f6ca82a8bacd19afaa749bc._comment create mode 100644 doc/design/exporting_trees_to_special_remotes/comment_1_ea84ee9de604e05b8e02483ba8452186._comment create mode 100644 doc/design/exporting_trees_to_special_remotes/comment_21_062098e1f54b874467793e4487a45a9b._comment create mode 100644 doc/design/exporting_trees_to_special_remotes/comment_2_d414fb575845770e003a3c8ca4a986be._comment create mode 100644 doc/design/exporting_trees_to_special_remotes/comment_3_cb063cdc66df79c40039bce247b7170c._comment create mode 100644 doc/design/exporting_trees_to_special_remotes/comment_4_126ee5332ff88b3993d33d59328d4148._comment create mode 100644 doc/design/exporting_trees_to_special_remotes/comment_5_fcd9890013371dae6ffcd00561b8c625._comment create mode 100644 doc/design/exporting_trees_to_special_remotes/comment_6_3217c2f852e5d9b1e4be2adff995dd24._comment create mode 100644 doc/design/exporting_trees_to_special_remotes/comment_7_43a98b4b9d9eb54720a9c92cd8bb3a30._comment create mode 100644 doc/design/exporting_trees_to_special_remotes/comment_8_7e512ef81c529b0392071b8a6dfe853b._comment create mode 100644 doc/design/exporting_trees_to_special_remotes/comment_9_6c588170f0b53c74c3c28ff08ed3509d._comment create mode 100644 doc/design/external_backend_protocol.mdwn create mode 100644 doc/design/external_backend_protocol/comment_1_7a55199030c3b9f455354139af7dbac0._comment create mode 100644 doc/design/external_backend_protocol/comment_2_e6005a7563a65c0fd4615cc3f2c3034b._comment create mode 100644 doc/design/external_backend_protocol/comment_3_cd3410e6c1088289f71ed30b34d802f9._comment create mode 100644 doc/design/external_backend_protocol/comment_4_5b9814ca55e5fab94725ecdb5b1618f0._comment create mode 100644 doc/design/external_backend_protocol/comment_5_75ff466d7eeccd1eda9f8f18f465b296._comment create mode 100755 doc/design/external_backend_protocol/git-annex-backend-XFOO create mode 100644 doc/design/external_special_remote_protocol.mdwn create mode 100644 doc/design/external_special_remote_protocol/async_appendix.mdwn create mode 100644 doc/design/external_special_remote_protocol/async_appendix/comment_1_850d3eb7c04088041c96686b88c36662._comment create mode 100644 doc/design/external_special_remote_protocol/async_appendix/comment_2_897dbfbd4ed9c0f520bd2d4d0c961745._comment create mode 100644 doc/design/external_special_remote_protocol/comment_11_8d3c35eb0a2a9c57b10566fcaf56d248._comment create mode 100644 doc/design/external_special_remote_protocol/comment_12_241e57092d9e5631ac0ec4dd962477a6._comment create mode 100644 doc/design/external_special_remote_protocol/comment_12_e3029c65d34f78272bc11961ebfd8237._comment create mode 100644 doc/design/external_special_remote_protocol/comment_13_472748f03ba8dad773da7f35b70cb6e4._comment create mode 100644 doc/design/external_special_remote_protocol/comment_14_71c3e21a72222250bab933e1c9167fbc._comment create mode 100644 doc/design/external_special_remote_protocol/comment_15_c77386deddc64b2028d9c3a7393d4df7._comment create mode 100644 doc/design/external_special_remote_protocol/comment_16_62b137a138c143a8110886cc0bbb677e._comment create mode 100644 doc/design/external_special_remote_protocol/comment_17_8dc7bbf485c9385a4b506e8b8fa934fe._comment create mode 100644 doc/design/external_special_remote_protocol/comment_18_a0ed457b1b0d71747b6cf0c45897b5e1._comment create mode 100644 doc/design/external_special_remote_protocol/comment_19_89d532a5013af24f15a0d003cbfbab25._comment create mode 100644 doc/design/external_special_remote_protocol/comment_1_5baff75d278394a8818c348fb4f13b8a._comment create mode 100644 doc/design/external_special_remote_protocol/comment_20_546331742e906a68d760c1bf44be63c4._comment create mode 100644 doc/design/external_special_remote_protocol/comment_21_a8e8255516dc4741439615fa43b71829._comment create mode 100644 doc/design/external_special_remote_protocol/comment_22_0387827d94f141be53458807da9c2fc2._comment create mode 100644 doc/design/external_special_remote_protocol/comment_23_7a5af50f7c482d7c02c53be28ddb6a66._comment create mode 100644 doc/design/external_special_remote_protocol/comment_24_3340d3c34f2ec197f9010d97da8eb7af._comment create mode 100644 doc/design/external_special_remote_protocol/comment_25_56f38d934125c28172b6475bdb4de284._comment create mode 100644 doc/design/external_special_remote_protocol/comment_26_4f8addd76a1e64d05a34910d4719a40c._comment create mode 100644 doc/design/external_special_remote_protocol/comment_27_9153a5c49710bf57d11338829f66fa78._comment create mode 100644 doc/design/external_special_remote_protocol/comment_28_74961b12a73a52a700e10a21674e66ee._comment create mode 100644 doc/design/external_special_remote_protocol/comment_29_c1d97815386453c3e433fca9a44c4667._comment create mode 100644 doc/design/external_special_remote_protocol/comment_2_70429b7c4f1e4083a9d5a6e2e238056d._comment create mode 100644 doc/design/external_special_remote_protocol/comment_30_7d045871f9ebbb89e3f9bbfa28e8468f._comment create mode 100644 doc/design/external_special_remote_protocol/comment_31_907597187020180e7730e27e86f6da5e._comment create mode 100644 doc/design/external_special_remote_protocol/comment_32_f6b8306cfdcb3792728aa47af0677338._comment create mode 100644 doc/design/external_special_remote_protocol/comment_33_bee7ff39f3989dfbec292490e47bcaaa._comment create mode 100644 doc/design/external_special_remote_protocol/comment_34_af6ae46fa9228461573dd7b2f0713ef1._comment create mode 100644 doc/design/external_special_remote_protocol/comment_35_2f71f6d0caf4fa5ccd26618026714975._comment create mode 100644 doc/design/external_special_remote_protocol/comment_36_f8081ce200700516efef61ec0ac86f86._comment create mode 100644 doc/design/external_special_remote_protocol/comment_37_2aef2647d7df69876f107247e039f5a6._comment create mode 100644 doc/design/external_special_remote_protocol/comment_39_62f6621259587333a83776cf514b2497._comment create mode 100644 doc/design/external_special_remote_protocol/comment_39_ea321b96df3314a9e2a35cd0f8312972._comment create mode 100644 doc/design/external_special_remote_protocol/comment_3_c763e44d06d9f50f0d357889b180b819._comment create mode 100644 doc/design/external_special_remote_protocol/comment_40_a312c0180bce6dbbd03b14b8ba3dcb5f._comment create mode 100644 doc/design/external_special_remote_protocol/comment_41_7d63261342ea475f696cadb419782dbb._comment create mode 100644 doc/design/external_special_remote_protocol/comment_42_485588573d8d9f74e64cdf560f65e7fe._comment create mode 100644 doc/design/external_special_remote_protocol/comment_43_d942d979773d9361fbf3dde28c26a941._comment create mode 100644 doc/design/external_special_remote_protocol/comment_44_a72db8ed716effc507e7127f9ec95dc4._comment create mode 100644 doc/design/external_special_remote_protocol/comment_45_a25f00fb081e30f639376b6ad94cdb30._comment create mode 100644 doc/design/external_special_remote_protocol/comment_46_7ecdba05cb2bfc7d868b81bbd3e3f964._comment create mode 100644 doc/design/external_special_remote_protocol/comment_47_9d48c85b896f738323dec28c1955ee22._comment create mode 100644 doc/design/external_special_remote_protocol/comment_48_d378ab8adc6a73a17c39d62978cb9e90._comment create mode 100644 doc/design/external_special_remote_protocol/comment_49_9045ad13ad2c2f998173a870174eb3ee._comment create mode 100644 doc/design/external_special_remote_protocol/comment_4_20ff41d82b5f1872698a5b24adcd0c41._comment create mode 100644 doc/design/external_special_remote_protocol/comment_50_fdd9804134e6fe5e6527f35fc782cb80._comment create mode 100644 doc/design/external_special_remote_protocol/comment_51_c0eaa8639ad2b21ac917d9033d77a327._comment create mode 100644 doc/design/external_special_remote_protocol/comment_52_3c8c5a1d388929da4629f14b099d02d1._comment create mode 100644 doc/design/external_special_remote_protocol/comment_53_a2d1778e6d61f9cb606fb83f0a4a73f4._comment create mode 100644 doc/design/external_special_remote_protocol/comment_54_0225736488f9c1e7f78a08eea8ca864d._comment create mode 100644 doc/design/external_special_remote_protocol/comment_5_3ee158e548002badae5bf44dc0442626._comment create mode 100644 doc/design/external_special_remote_protocol/comment_6_ee2828ce25b83bbabc9d5dde35d1e57b._comment create mode 100644 doc/design/external_special_remote_protocol/comment_7_edb649d0019a061ef7bf6534a444429d._comment create mode 100644 doc/design/external_special_remote_protocol/comment_8_1f4c205a5ce6f33ccf2f4d80754e5699._comment create mode 100644 doc/design/external_special_remote_protocol/comment_9_15c4cfe064be37cc104dcb6aa049a449._comment create mode 100644 doc/design/external_special_remote_protocol/export_and_import_appendix.mdwn create mode 100644 doc/design/external_special_remote_protocol/export_and_import_appendix/comment_1_9bcf18e2bbe04bf5321e4fc33cca577c._comment create mode 100644 doc/design/external_special_remote_protocol/export_and_import_appendix/comment_2_6bea5a316df43a8306fb1cb19192db3f._comment create mode 100644 doc/design/gcrypt.mdwn create mode 100644 doc/design/git-remote-daemon.mdwn create mode 100644 doc/design/git-remote-daemon/comment_1_bfa8f33a3fdb6e271dfbdd0378b5d364._comment create mode 100644 doc/design/iabackup.mdwn create mode 100644 doc/design/iabackup/comment_1_d33c0910973bc37ce81bf434017e11fd._comment create mode 100644 doc/design/iabackup/comment_2_c0a59549409faa355a461e85a1c3f908._comment create mode 100644 doc/design/iabackup/comment_3_560d3f65d543c3af9722ed7e9a11e920._comment create mode 100644 doc/design/iabackup/comment_4_465c0966c96a57d189f678d4fa724aa0._comment create mode 100644 doc/design/iabackup/comment_5_7e4d1db9c69c63e79ca13db2ad87c384._comment create mode 100644 doc/design/importing_trees_from_special_remotes.mdwn create mode 100644 doc/design/metadata.mdwn create mode 100644 doc/design/metadata/comment_10_9bc2825b18ce29d2c9b2f085b95aa68c._comment create mode 100644 doc/design/metadata/comment_11_402d7d3e8e7f2df57eb6685134226642._comment create mode 100644 doc/design/metadata/comment_1_22ed80bd8eabaa836e9dfc2432531f04._comment create mode 100644 doc/design/metadata/comment_2_03ae28acedbe1fa45c366b30b58fcf48._comment create mode 100644 doc/design/metadata/comment_3_ee850df7d3fa4c56194f13a6e3890a30._comment create mode 100644 doc/design/metadata/comment_4_c32ade1524487e5fdc6f83b2db39f04c._comment create mode 100644 doc/design/metadata/comment_5_0ac3132cd7a84f0e170fbe3a6f235fe7._comment create mode 100644 doc/design/metadata/comment_6_fa51ae544b193122334dbae7960ab3d9._comment create mode 100644 doc/design/metadata/comment_7_04cd255a516c8520a7bc1a8fad253533._comment create mode 100644 doc/design/metadata/comment_8_0a7e55e7626f72f63966fa1e1d2cf100._comment create mode 100644 doc/design/metadata/comment_9_f0bb62c885a925e0da5ae8ce3c5e9003._comment create mode 100644 doc/design/new_repo_versions.mdwn create mode 100644 doc/design/new_repo_versions/comment_1_b7b4819211910556838ec37bc2b6b37b._comment create mode 100644 doc/design/new_repo_versions/comment_2_8f35254d2cd5d0c273d5392ddd857c2d._comment create mode 100644 doc/design/p2p_protocol.mdwn create mode 100644 doc/design/p2p_protocol/comment_1_367bebae5b84408c7592b5fcca993c1e._comment create mode 100644 doc/design/p2p_protocol/comment_2_dbd118a01c31d17a4223a32a7baa8e39._comment create mode 100644 doc/design/p2p_protocol/comment_4_94fff4c163de15cdad2030ac072b19ae._comment create mode 100644 doc/design/p2p_protocol/comment_4_f48e73ea2b6f70597837d09d3c5d3849._comment create mode 100644 doc/design/p2p_protocol/comment_5_08b190ff1c6d1e890311edf7cc7bfcd4._comment create mode 100644 doc/design/passthrough_proxy.mdwn create mode 100644 doc/design/preferred_content.mdwn create mode 100644 doc/design/requests_routing.mdwn create mode 100644 doc/design/requests_routing/comment_1_421b14a4dd9d6c431e00333057df1627._comment create mode 100644 doc/design/requests_routing/comment_2_a409df0566b308bf2b84efd4fb2c8a8f._comment create mode 100644 doc/design/requests_routing/comment_3_924e6254bf51a5b19eb7fe635053a16e._comment create mode 100644 doc/design/requests_routing/simroutes.hs create mode 100644 doc/design/roadmap.mdwn create mode 100644 doc/devblog.mdwn create mode 100644 doc/devblog/day_-1__drop_dead.mdwn create mode 100644 doc/devblog/day_-3__.mdwn create mode 100644 doc/devblog/day_-4__forgetting.mdwn create mode 100644 doc/devblog/day_-4__forgetting/comment_1_f3cc7a25af4c59fda3924c737a789419._comment create mode 100644 doc/devblog/day_-4__forgetting/comment_2_e47476c80af02a2e9cf76c53fdbb8534._comment create mode 100644 doc/devblog/day_-4__forgetting/comment_3_b57956a8ce372d620f21ea9a497e8013._comment create mode 100644 doc/devblog/day_-4__forgetting/comment_4_812b630df01ac35254e3c4e677554e2b._comment create mode 100644 doc/devblog/day_-4__forgetting/comment_5_a9670eca2aff9ad5f04412a8d8b6df6a._comment create mode 100644 doc/devblog/day_-4__forgetting/comment_6_4f87e2ab119f3cd81266159f02952188._comment create mode 100644 doc/devblog/day_-4__forgetting/comment_7_a865216046aa91a47d0d2b2f0668ea89._comment create mode 100644 doc/devblog/day_-4__forgetting/comment_8_3f7045a00905b4287d950b08d5a77a82._comment create mode 100644 doc/devblog/day_-4__forgetting/comment_9_d9121a5172f02df63364f19eae87d011._comment create mode 100644 doc/devblog/day_100__git-annex_sync_--content.mdwn create mode 100644 doc/devblog/day_101__old_mistakes.mdwn create mode 100644 doc/devblog/day_101__old_mistakes/comment_1_2c6e991efde3296450189b2821f2ccc3._comment create mode 100644 doc/devblog/day_101__old_mistakes/comment_2_524690d69056737dd296e4f7626737d2._comment create mode 100644 doc/devblog/day_102__cleanups.mdwn create mode 100644 doc/devblog/day_103__unused.mdwn create mode 100644 doc/devblog/day_104__unused_II.mdwn create mode 100644 doc/devblog/day_104__unused_II/comment_1_a693a56123497a39c30cbd35b8e35bce._comment create mode 100644 doc/devblog/day_104__unused_II/comment_2_9833fb9daa50bc838cc46ca2f6c16580._comment create mode 100644 doc/devblog/day_104__unused_II/comment_3_873a882ec1ddc3be473473cb224a9040._comment create mode 100644 doc/devblog/day_104__unused_II/comment_4_5ef1bb4d69cf7206f7ca0e542abad6bd._comment create mode 100644 doc/devblog/day_104__unused_II/comment_5_1964bfce4887c9c0828fd7f54f5b4f6b._comment create mode 100644 doc/devblog/day_104__unused_II/comment_6_0ed4023c9c249024fe0454fc5bab3b14._comment create mode 100644 doc/devblog/day_105__locking.mdwn create mode 100644 doc/devblog/day_106__catching_up.mdwn create mode 100644 doc/devblog/day_107__TDD.mdwn create mode 100644 doc/devblog/day_108__new_use_for_location_tracking.mdwn create mode 100644 doc/devblog/day_109__elimintating_absNormPath.mdwn create mode 100644 doc/devblog/day_10__lazy_Sunday.mdwn create mode 100644 doc/devblog/day_110__release_prep.mdwn create mode 100644 doc/devblog/day_111__windows_beta_release.mdwn create mode 100644 doc/devblog/day_112__metadata_design.mdwn create mode 100644 doc/devblog/day_113__metadata_groundwork.mdwn create mode 100644 doc/devblog/day_114__windows_porting.mdwn create mode 100644 doc/devblog/day_115__windows_porting.mdwn create mode 100644 doc/devblog/day_116__views.mdwn create mode 100644 doc/devblog/day_117__views_implemented.mdwn create mode 100644 doc/devblog/day_118__views_refined.mdwn create mode 100644 doc/devblog/day_119__catching_up.mdwn create mode 100644 doc/devblog/day_119__catching_up/comment_1_8aa413e75cab411b0aec254f0f33ebb9._comment create mode 100644 doc/devblog/day_119__catching_up/comment_2_db31d08690730836ce6277e797fcae1d._comment create mode 100644 doc/devblog/day_119__catching_up/comment_3_d44da76b18f53a5f51b46e3e15090a48._comment create mode 100644 doc/devblog/day_11__webapp_encrypted_drives.mdwn create mode 100644 doc/devblog/day_120__more_metadata.mdwn create mode 100644 doc/devblog/day_121__special_remote_maintenance.mdwn create mode 100644 doc/devblog/day_122_more_windows_porting.mdwn create mode 100644 doc/devblog/day_123__stuck.mdwn create mode 100644 doc/devblog/day_124__day_off.mdwn create mode 100644 doc/devblog/day_125__metadata_and_views.mdwn create mode 100644 doc/devblog/day_128__release_prep.mdwn create mode 100644 doc/devblog/day_12__gpg_key_generation.mdwn create mode 100644 doc/devblog/day_12__gpg_key_generation/comment_1_48cdfe3bd71fb348ae05fd90e8cf1dab._comment create mode 100644 doc/devblog/day_130__post_release.mdwn create mode 100644 doc/devblog/day_131__more_bug_squashing.mdwn create mode 100644 doc/devblog/day_132__database_musings.mdwn create mode 100644 doc/devblog/day_133__db_and_bugfixes.mdwn create mode 100644 doc/devblog/day_134-135__avoiding_the_turing_tarpit.mdwn create mode 100644 doc/devblog/day_136__frustrating_day.mdwn create mode 100644 doc/devblog/day_137-138__bug_triage_and_too_much_windows.mdwn create mode 100644 doc/devblog/day_139-140__traveling.mdwn create mode 100644 doc/devblog/day_13__encrypted_sneakernet_working.mdwn create mode 100644 doc/devblog/day_141__f-droid_sprint.mdwn create mode 100644 doc/devblog/day_141__f-droid_sprint/comment_1_1cc76207020ac478747117c76d7b5f9c._comment create mode 100644 doc/devblog/day_142__digging_out.mdwn create mode 100644 doc/devblog/day_143__foolish_hiatus.mdwn create mode 100644 doc/devblog/day_144__catching_up.mdwn create mode 100644 doc/devblog/day_144__catching_up/comment_1_311a7245dd12f1a7e432168d16041348._comment create mode 100644 doc/devblog/day_145__a_plan.mdwn create mode 100644 doc/devblog/day_145__a_plan/comment_1_c0ceea77443be1172527ed8549f000a4._comment create mode 100644 doc/devblog/day_146__halfway_to_git-remote-daemon.mdwn create mode 100644 doc/devblog/day_147__git-annex_remotedaemon.mdwn create mode 100644 doc/devblog/day_148__too_many_documents.mdwn create mode 100644 doc/devblog/day_149__remote_control_working.mdwn create mode 100644 doc/devblog/day_149__signal.mdwn create mode 100644 doc/devblog/day_14__gcrypt_refinements_and_OOM_fixes.mdwn create mode 100644 doc/devblog/day_15-17__Android_rebuild.mdwn create mode 100644 doc/devblog/day_151__birthday_bug.mdwn create mode 100644 doc/devblog/day_152__more_ssh_connection_caching.mdwn create mode 100644 doc/devblog/day_153__remotedaemon_has_landed.mdwn create mode 100644 doc/devblog/day_153__remotedaemon_has_landed/comment_1_f19ae6b3d6f33a68e4ffe0c32f788745._comment create mode 100644 doc/devblog/day_153__remotedaemon_has_landed/comment_2_fbf0c50f772e958af638d2b72dac73f5._comment create mode 100644 doc/devblog/day_154__catching_up.mdwn create mode 100644 doc/devblog/day_155__missing_bits.mdwn create mode 100644 doc/devblog/day_155__missing_bits/comment_1_76424498600ba603946035efffb88023._comment create mode 100644 doc/devblog/day_156__release_day.mdwn create mode 100644 doc/devblog/day_157__upgrade_checking.mdwn create mode 100644 doc/devblog/day_158__enroute_to_Brazil.mdwn create mode 100644 doc/devblog/day_159__tmp_file_cleanup.mdwn create mode 100644 doc/devblog/day_160__.mdwn create mode 100644 doc/devblog/day_161__routing_design.mdwn create mode 100644 doc/devblog/day_162__routing_sim_and_massive_contribution_landed.mdwn create mode 100644 doc/devblog/day_163__request_and_routing_design.mdwn create mode 100644 doc/devblog/day_164__back.mdwn create mode 100644 doc/devblog/day_165__sshpassword_merged.mdwn create mode 100644 doc/devblog/day_166__catching_up.mdwn create mode 100644 doc/devblog/day_167__growing_the_community_of_git-annex_contributors.mdwn create mode 100644 doc/devblog/day_168__backlog_continued.mdwn create mode 100644 doc/devblog/day_169-171__juggling.mdwn create mode 100644 doc/devblog/day_172__.mdwn create mode 100644 doc/devblog/day_173-174__android_rebootstrap.mdwn create mode 100644 doc/devblog/day_175__encoding_day.mdwn create mode 100644 doc/devblog/day_176__mostly_a_day_off.mdwn create mode 100644 doc/devblog/day_177__enabling.mdwn create mode 100644 doc/devblog/day_177__enabling/comment_1_820d29f84dade09b0e7bb7435c52fcb8._comment create mode 100644 doc/devblog/day_178-179__screencast_and_what_next.mdwn create mode 100644 doc/devblog/day_178-179__screencast_and_what_next/comment_1_eeba788fed45cb22f9cc2a738ceaa074._comment create mode 100644 doc/devblog/day_178-179__screencast_and_what_next/comment_2_d44e67e34615c7b00e29f307556cdd06._comment create mode 100644 doc/devblog/day_180__porting.mdwn create mode 100644 doc/devblog/day_180__porting/comment_1_133875f4435a298b85ddfb8a2cc11a7a._comment create mode 100644 doc/devblog/day_181__tricky_merge.mdwn create mode 100644 doc/devblog/day_182__service.mdwn create mode 100644 doc/devblog/day_183__rubbing_sticks_together.mdwn create mode 100644 doc/devblog/day_184__windows_month.mdwn create mode 100644 doc/devblog/day_185__service.mdwn create mode 100644 doc/devblog/day_186__cracked_it.mdwn create mode 100644 doc/devblog/day_186__cracked_it/comment_1_288b736adf392acd0f45667b2980138d._comment create mode 100644 doc/devblog/day_186__cracked_it/comment_2_d1d79e93ac420f6b3a6f8a622e8e00bd._comment create mode 100644 doc/devblog/day_186__cracked_it/comment_3_8ca17a51b10b4e4a63d0672d5ce29024._comment create mode 100644 doc/devblog/day_187__release_prep.mdwn create mode 100644 doc/devblog/day_187__release_prep/comment_1_206692d16177c2a9ca11c0eeff545697._comment create mode 100644 doc/devblog/day_187__release_prep/comment_2_961fb35d9cf7d5e518f8d0bddb8626a6._comment create mode 100644 doc/devblog/day_188__back_sans_laptop.mdwn create mode 100644 doc/devblog/day_189__finally_working_again.mdwn create mode 100644 doc/devblog/day_190__fun_fixes.mdwn create mode 100644 doc/devblog/day_191__semidistracted.mdwn create mode 100644 doc/devblog/day_192__release_day.mdwn create mode 100644 doc/devblog/day_193-194__ugly_bug.mdwn create mode 100644 doc/devblog/day_195-196__catching_up.mdwn create mode 100644 doc/devblog/day_197__autobuilder_rescuscitation.mdwn create mode 100644 doc/devblog/day_198__branching_out.mdwn create mode 100644 doc/devblog/day_198__branching_out/comment_1_91ce3dc707ba1ba7c5d9e57e20ffce40._comment create mode 100644 doc/devblog/day_199__ten_minute_cycle.mdwn create mode 100644 doc/devblog/day_19__moving_on.mdwn create mode 100644 doc/devblog/day_19__moving_on/comment_1_870106f671f9a055b81e6fc83e0850b5._comment create mode 100644 doc/devblog/day_19__moving_on/comment_2_fad055c8860385ac6c012f897c96408f._comment create mode 100644 doc/devblog/day_19__moving_on/comment_3_69e47d612159587f080ab761566d1830._comment create mode 100644 doc/devblog/day_1__inauspicious_beginning.mdwn create mode 100644 doc/devblog/day_1__inauspicious_beginning/comment_1_cc4dea43caf3126c6f814b589b701d70._comment create mode 100644 doc/devblog/day_200__one_year_along.mdwn create mode 100644 doc/devblog/day_201__chunky.mdwn create mode 100644 doc/devblog/day_202__new_chunk_groundwork.mdwn create mode 100644 doc/devblog/day_203__in_the_weeds.mdwn create mode 100644 doc/devblog/day_204__mowing.mdwn create mode 100644 doc/devblog/day_205__incremental.mdwn create mode 100644 doc/devblog/day_206__zap.mdwn create mode 100644 doc/devblog/day_207__at_last.mdwn create mode 100644 doc/devblog/day_208__testremote.mdwn create mode 100644 doc/devblog/day_209__mass_conversion.mdwn create mode 100644 doc/devblog/day_20__gcrypt_and_git-annex-shell.mdwn create mode 100644 doc/devblog/day_210__conversion_and_digression.mdwn create mode 100644 doc/devblog/day_211__conversion_complete.mdwn create mode 100644 doc/devblog/day_212__webdav_rewrite.mdwn create mode 100644 doc/devblog/day_213__newchunks_merged.mdwn create mode 100644 doc/devblog/day_214-215__wrapping_up_recent_work.mdwn create mode 100644 doc/devblog/day_216__various_minor_bugs.mdwn create mode 100644 doc/devblog/day_216__various_minor_bugs/comment_1_0d0a0e75b9446f8a1c4cc43f36569473._comment create mode 100644 doc/devblog/day_216__various_minor_bugs/comment_2_6b06b3f46f20a6d2e60684d1d59fca07._comment create mode 100644 doc/devblog/day_216__various_minor_bugs/comment_3_05177e2ed414d22711dcec57a614e38c._comment create mode 100644 doc/devblog/day_217__autobuilders.mdwn create mode 100644 doc/devblog/day_218__scary_locking.mdwn create mode 100644 doc/devblog/day_219__catching_up_and_looking_back.mdwn create mode 100644 doc/devblog/day_219__catching_up_and_looking_back/comment_1_16b13b2510183a9da5f960ae5765e581._comment create mode 100644 doc/devblog/day_219__catching_up_and_looking_back/comment_2_460c064bebb5061fcba2a6c79f039362._comment create mode 100644 doc/devblog/day_219__catching_up_and_looking_back/comment_3_9699d5a9de5ea64fbc876352e20261c4._comment create mode 100644 doc/devblog/day_219__catching_up_and_looking_back/comment_4_23c4ede3db0ea8165311466881cfa6a2._comment create mode 100644 doc/devblog/day_219__catching_up_and_looking_back/comment_5_7997305d7ec7db072b78dd0c31ecd824._comment create mode 100644 doc/devblog/day_21__bugfix_day.mdwn create mode 100644 doc/devblog/day_220__working_through_backlog.mdwn create mode 100644 doc/devblog/day_221__another_fine_day_of_bugfixing.mdwn create mode 100644 doc/devblog/day_222_preparing_for_debian_release.mdwn create mode 100644 doc/devblog/day_223__partial_commit_problem.mdwn create mode 100644 doc/devblog/day_224-226__long_rainy_slog.mdwn create mode 100644 doc/devblog/day_227__info.mdwn create mode 100644 doc/devblog/day_229__S3_multipart.mdwn create mode 100644 doc/devblog/day_22__gcrypt_on_rsync.net.mdwn create mode 100644 doc/devblog/day_230__S3_multipart_round_2.mdwn create mode 100644 doc/devblog/day_231__S3_multipart_wrapped_up.mdwn create mode 100644 doc/devblog/day_232__OSX_Yosemite.mdwn create mode 100644 doc/devblog/day_233__direct_mode_proxy.mdwn create mode 100644 doc/devblog/day_234__undo_undo.mdwn create mode 100644 doc/devblog/day_235__thanksgiving_backlog.mdwn create mode 100644 doc/devblog/day_236__release_day.mdwn create mode 100644 doc/devblog/day_237__extending_addurl.mdwn create mode 100644 doc/devblog/day_238__extending_addurl_further.mdwn create mode 100644 doc/devblog/day_239-240__bittorrent_remote.mdwn create mode 100644 doc/devblog/day_23__GNU_day.mdwn create mode 100644 doc/devblog/day_241-242__end_of_year_cleanup.mdwn create mode 100644 doc/devblog/day_243__android_5.mdwn create mode 100644 doc/devblog/day_243__android_5/comment_1_59a139108f4cf20dd7443a5fa767f614._comment create mode 100644 doc/devblog/day_244__relative_paths.mdwn create mode 100644 doc/devblog/day_245__yak_shaving.mdwn create mode 100644 doc/devblog/day_246__old_todos.mdwn create mode 100644 doc/devblog/day_247__hooks_and_large_files_on_windows.mdwn create mode 100644 doc/devblog/day_248__workload_tuning.mdwn create mode 100644 doc/devblog/day_249_onward.mdwn create mode 100644 doc/devblog/day_249_onward/comment_1_80af832a132ee37a470d0586ae751f2a._comment create mode 100644 doc/devblog/day_249_onward/comment_2_ada958a8df4da36b25a456a7700b310f._comment create mode 100644 doc/devblog/day_24__nearly_done_with_gcrypt.mdwn create mode 100644 doc/devblog/day_250__backog_bugfixing.mdwn create mode 100644 doc/devblog/day_251-252__dusting_off_the_roadmap.mdwn create mode 100644 doc/devblog/day_253__sqlite_for_incremental_fsck.mdwn create mode 100644 doc/devblog/day_253__sqlite_for_incremental_fsck/comment_1_683d669ac6af8e314585609f75cfdaf3._comment create mode 100644 doc/devblog/day_253__sqlite_for_incremental_fsck/comment_2_08dd639180ae79addc007ee47d52048a._comment create mode 100644 doc/devblog/day_253__ssh-options.mdwn create mode 100644 doc/devblog/day_255__sqlite_concurrent_writers_problem.mdwn create mode 100644 doc/devblog/day_256__sqlite_concurrency_argh.mdwn create mode 100644 doc/devblog/day_257__release_day.mdwn create mode 100644 doc/devblog/day_258__database_branch_merged.mdwn create mode 100644 doc/devblog/day_259__submodules.mdwn create mode 100644 doc/devblog/day_25__finishing_up_gcrypt.mdwn create mode 100644 doc/devblog/day_260__random_month.mdwn create mode 100644 doc/devblog/day_261__random_improvements.mdwn create mode 100644 doc/devblog/day_262__ipfs.mdwn create mode 100644 doc/devblog/day_263__diving_back_in.mdwn create mode 100644 doc/devblog/day_264__catching_up.mdwn create mode 100644 doc/devblog/day_265__at_Dartmouth.mdwn create mode 100644 doc/devblog/day_266-267__man_page_split.mdwn create mode 100644 doc/devblog/day_266-267__man_page_split/comment_1_d55600917128cb0ce38002fbf6f0b088._comment create mode 100644 doc/devblog/day_266-267__man_page_split/comment_2_63791201452a6ab30a35cd742434acca._comment create mode 100644 doc/devblog/day_266-267__man_page_split/comment_3_d7764c605ad338c4bf4c4b46b54abd8a._comment create mode 100644 doc/devblog/day_268_stressed_out.mdwn create mode 100644 doc/devblog/day_268_stressed_out/comment_1_d28352c9fbc988ece19688a687d30ffe._comment create mode 100644 doc/devblog/day_268_stressed_out/comment_2_f7b04b2e96f0fc7530f1c21ccfcfb0f9._comment create mode 100644 doc/devblog/day_268_stressed_out/comment_3_0eb4c17d35fba9db6a7446a5f253ace9._comment create mode 100644 doc/devblog/day_268_stressed_out/comment_4_fecf179be92c3a3e25f4a47fcea6b6ec._comment create mode 100644 doc/devblog/day_269__wildcards_and_podcasts.mdwn create mode 100644 doc/devblog/day_26__gcrypt_really_done_this_time.mdwn create mode 100644 doc/devblog/day_270__distributed_fsck.mdwn create mode 100644 doc/devblog/day_271__parallel_get_groundwork.mdwn create mode 100644 doc/devblog/day_272__forest_for_trees.mdwn create mode 100644 doc/devblog/day_273__unexpected_release.mdwn create mode 100644 doc/devblog/day_274__concurrent_annex_state.mdwn create mode 100644 doc/devblog/day_274__concurrent_annex_state/comment_1_7414fc0dde7a1d1ee456f8eba0b0c2a9._comment create mode 100644 doc/devblog/day_274__concurrent_annex_state/comment_2_4ca498ee4b4aaac8ee6dbc2c769dbad7._comment create mode 100644 doc/devblog/day_275-276__mostly_Windows.mdwn create mode 100644 doc/devblog/day_277__thanks.mdwn create mode 100644 doc/devblog/day_278__release_day.mdwn create mode 100644 doc/devblog/day_279__.mdwn create mode 100644 doc/devblog/day_27__locking_fun.mdwn create mode 100644 doc/devblog/day_27__locking_fun/comment_1_0eb247235fbf8f563934f3548e1d2e10._comment create mode 100644 doc/devblog/day_27__locking_fun/comment_2_e8b1dfe1b0641e031d05733448b7bc8b._comment create mode 100644 doc/devblog/day_27__locking_fun/comment_3_b67f8ef4ed42b49c8c2e6c4e53163b16._comment create mode 100644 doc/devblog/day_27__locking_fun/comment_4_0759644baf26b75f4e48dbb387d725a5._comment create mode 100644 doc/devblog/day_280__slow_week.mdwn create mode 100644 doc/devblog/day_281__catching_up__and_arm_autobuilder_needed.mdwn create mode 100644 doc/devblog/day_282__release_day.mdwn create mode 100644 doc/devblog/day_283__lazy_sunday.mdwn create mode 100644 doc/devblog/day_283__lazy_sunday/comment_1_fdc6da890e2dc6b86b6a5fe2ebceea4a._comment create mode 100644 doc/devblog/day_284__development.mdwn create mode 100644 doc/devblog/day_285__tuning_git-annex_unused_refs.mdwn create mode 100644 doc/devblog/day_285__tuning_git-annex_unused_refs/comment_1_a3f0dd4fc8457af7c72040fbe8fd5fee._comment create mode 100644 doc/devblog/day_285__tuning_git-annex_unused_refs/comment_2_dae167e473c60dace129c66beb0af384._comment create mode 100644 doc/devblog/day_285__tuning_git-annex_unused_refs/comment_3_52179fc326e681d8fbf85ee8963f352c._comment create mode 100644 doc/devblog/day_286-287__rotten_locks.mdwn create mode 100644 doc/devblog/day_288__microrelease_prep.mdwn create mode 100644 doc/devblog/day_288__microrelease_prep/comment_1_99e359976acbdb9727598f8a87027de0._comment create mode 100644 doc/devblog/day_288__microrelease_prep/comment_2_27a74d3926083a00c110aafea28420d7._comment create mode 100644 doc/devblog/day_288__microrelease_prep/comment_3_17752e96baaf46f3048b14a9ec288e3b._comment create mode 100644 doc/devblog/day_288__microrelease_prep/comment_4_2838c1d9da3202616e331bb31fd43f20._comment create mode 100644 doc/devblog/day_289__new_arm_autobuilder.mdwn create mode 100644 doc/devblog/day_28__lazy_saturday.mdwn create mode 100644 doc/devblog/day_290__.mdwn create mode 100644 doc/devblog/day_291__public_S3.mdwn create mode 100644 doc/devblog/day_291__public_S3/comment_1_c0e96b25b764180975cc26b1316f462d._comment create mode 100644 doc/devblog/day_291__public_S3/comment_2_d5223684c09725973b2052425fd30773._comment create mode 100644 doc/devblog/day_292__dead_keys.mdwn create mode 100644 doc/devblog/day_293__last_push_before_summer_vacation.mdwn create mode 100644 doc/devblog/day_294__back_focusing_on_bugs.mdwn create mode 100644 doc/devblog/day_295__caught_up.mdwn create mode 100644 doc/devblog/day_296__into_the_backlog.mdwn create mode 100644 doc/devblog/day_297__optparse-applicative.mdwn create mode 100644 doc/devblog/day_299__so_many_commands_and_options.mdwn create mode 100644 doc/devblog/day_29__scheduling.mdwn create mode 100644 doc/devblog/day_2__new_laptop.mdwn create mode 100644 doc/devblog/day_2__new_laptop/comment_1_93447dbd4eb09b4db96770644ea663cb._comment create mode 100644 doc/devblog/day_2__new_laptop/comment_2_e1d022b25f2c16dbe72db07ad4b10a2d._comment create mode 100644 doc/devblog/day_300__optparse-applicative_landed.mdwn create mode 100644 doc/devblog/day_301__completion_and_er_completion.mdwn create mode 100644 doc/devblog/day_302-305__gitlab.mdwn create mode 100644 doc/devblog/day_306__release_day.mdwn create mode 100644 doc/devblog/day_307__two_release_week.mdwn create mode 100644 doc/devblog/day_308__other_peoples_bugs.mdwn create mode 100644 doc/devblog/day_309__proxy.mdwn create mode 100644 doc/devblog/day_30__cronner.mdwn create mode 100644 doc/devblog/day_30__cronner/comment_1_53dfd9310e92f5225db52a13e20a46d4._comment create mode 100644 doc/devblog/day_30__cronner/comment_2_f98357c6f7a6da23873ac27c2e1e9638._comment create mode 100644 doc/devblog/day_310__half_day.mdwn create mode 100644 doc/devblog/day_310__half_day/comment_1_81db682a271ebc92cce893762c3930a8._comment create mode 100644 doc/devblog/day_311__SHA-3.mdwn create mode 100644 doc/devblog/day_312__release_prep.mdwn create mode 100644 doc/devblog/day_313__optimisation.mdwn create mode 100644 doc/devblog/day_314__pre_trip_catchup.mdwn create mode 100644 doc/devblog/day_315__scrambling.mdwn create mode 100644 doc/devblog/day_316-318__chasing_dependencies_and_todos.mdwn create mode 100644 doc/devblog/day_319__release_day.mdwn create mode 100644 doc/devblog/day_31__blah.mdwn create mode 100644 doc/devblog/day_320__caught_up.mdwn create mode 100644 doc/devblog/day_320__porting_and_such.mdwn create mode 100644 doc/devblog/day_321__download_verification.mdwn create mode 100644 doc/devblog/day_321__download_verification/comment_1_424367fba4db56f4699952572bd3d605._comment create mode 100644 doc/devblog/day_321__download_verification/comment_2_926cc165e99f2e125c909bd706460a05._comment create mode 100644 doc/devblog/day_321__download_verification/comment_3_fb0ed50c27a493c3494bf2efbf9a9c5d._comment create mode 100644 doc/devblog/day_321__download_verification/comment_4_fecb2d6349aa61f1c76525178fea4598._comment create mode 100644 doc/devblog/day_322-326__concurrent_drop_safety.mdwn create mode 100644 doc/devblog/day_327__soaking.mdwn create mode 100644 doc/devblog/day_328__git-annex_is_five.mdwn create mode 100644 doc/devblog/day_328__git-annex_is_five/comment_1_ff7e8d4c37f4a1aa189af0354db8794a._comment create mode 100644 doc/devblog/day_328__git-annex_is_five/comment_2_9e18a2c71884229f06b5ba62a6529a33._comment create mode 100644 doc/devblog/day_32__fsck_config_UI.mdwn create mode 100644 doc/devblog/day_331__concurrent-output_preparations.mdwn create mode 100644 doc/devblog/day_332__concurrent_output_at_long_last.mdwn create mode 100644 doc/devblog/day_333__cylons.mdwn create mode 100644 doc/devblog/day_334__too_easy.mdwn create mode 100644 doc/devblog/day_334__too_easy/comment_1_2181970ef1a3380407ce9eef311c9ebc._comment create mode 100644 doc/devblog/day_335__catching_up_with_the_bug_reports.mdwn create mode 100644 doc/devblog/day_336__green.mdwn create mode 100644 doc/devblog/day_336__pid_locks.mdwn create mode 100644 doc/devblog/day_337__who_needs_POSIX.mdwn create mode 100644 doc/devblog/day_338__week_in_review.mdwn create mode 100644 doc/devblog/day_339_smudging_out_direct_mode.mdwn create mode 100644 doc/devblog/day_339_smudging_out_direct_mode/comment_1_6435db0003d2d8414b1a040b8899c7b8._comment create mode 100644 doc/devblog/day_339_smudging_out_direct_mode/comment_2_79d19b2b057c2a0b23875a32dae0c2ba._comment create mode 100644 doc/devblog/day_339_smudging_out_direct_mode/comment_3_43f7c7c6c2fd227466857c3232e13351._comment create mode 100644 doc/devblog/day_339_smudging_out_direct_mode/comment_3_43f7c7c6c2fd227466857c3232e13351/comment_1_78e16167ca29eb3ed43706b39bf08603._comment create mode 100644 doc/devblog/day_339_smudging_out_direct_mode/comment_4_35d0472cd64335eedeeb17d51cdbaf5b._comment create mode 100644 doc/devblog/day_339_smudging_out_direct_mode/comment_5_499f3553c4efc35e54f121a7d4abc029._comment create mode 100644 doc/devblog/day_339_smudging_out_direct_mode/comment_6_ede48107675edfe40d5fdd3377553aa4._comment create mode 100644 doc/devblog/day_339_smudging_out_direct_mode/comment_7_ceb1d2a0e5bbc73590b80ff69292102d._comment create mode 100644 doc/devblog/day_33__fsck_on_connect.mdwn create mode 100644 doc/devblog/day_340__post_turkey_catchup.mdwn create mode 100644 doc/devblog/day_341__starting_smudge.mdwn create mode 100644 doc/devblog/day_342__continuing_smudge.mdwn create mode 100644 doc/devblog/day_343__get_and_drop_for_smudge.mdwn create mode 100644 doc/devblog/day_344-345__smudging_along.mdwn create mode 100644 doc/devblog/day_346-347__nearly_ready_to_merge.mdwn create mode 100644 doc/devblog/day_348__v6_assistant.mdwn create mode 100644 doc/devblog/day_349__v6_database_optimisation.mdwn create mode 100644 doc/devblog/day_34__wrapping_up_fsck.mdwn create mode 100644 doc/devblog/day_350-351__it_landed_on_xmas_eve.mdwn create mode 100644 doc/devblog/day_352__had_to_be_done.mdwn create mode 100644 doc/devblog/day_353__one_step_forward_and_N_steps_back.mdwn create mode 100644 doc/devblog/day_354-355__beating_on_the_test_suite.mdwn create mode 100644 doc/devblog/day_356__benchmarking.mdwn create mode 100644 doc/devblog/day_357__post_release_catchup.mdwn create mode 100644 doc/devblog/day_357__post_release_catchup/comment_1_6963d1c6be69e531726f62f02d50855c._comment create mode 100644 doc/devblog/day_358__bugfix_release.mdwn create mode 100644 doc/devblog/day_358__bugfix_release/comment_1_a9aa122010e576c572ca719638ecf2e6._comment create mode 100644 doc/devblog/day_359__annex.largefiles_gitattributes.mdwn create mode 100644 doc/devblog/day_359__annex.largefiles_gitattributes/comment_1_ac73ad4147629c25cd51d13cfea206cf._comment create mode 100644 doc/devblog/day_359__annex.largefiles_gitattributes/comment_2_cfbf4fb5a3a1beb582faa051d1627a31._comment create mode 100644 doc/devblog/day_35__anacron_and_bugfixing.mdwn create mode 100644 doc/devblog/day_360__annex.largefiles_mimetype.mdwn create mode 100644 doc/devblog/day_360__annex.largefiles_mimetype/comment_2_78a22b96a82f76ab7217d37918a19024._comment create mode 100644 doc/devblog/day_360__annex.largefiles_mimetype/comment_3_3145e5843e20a037351e5a14fa3d6e9a._comment create mode 100644 doc/devblog/day_360__annex.largefiles_mimetype/comment_3_bf44404de52b00ff4e4f1effd4cef336._comment create mode 100644 doc/devblog/day_360__annex.largefiles_mimetype/comment_4_70c337d91f8d0458927c111763041118._comment create mode 100644 doc/devblog/day_360__results_of_2015_user_survey.mdwn create mode 100644 doc/devblog/day_360__results_of_2015_user_survey/comment_1_5f30c583cd20c33e2bcd386f674d6f3b._comment create mode 100644 doc/devblog/day_360__results_of_2015_user_survey/comment_2_68479af6dda2f732436b19160297aacd._comment create mode 100644 doc/devblog/day_360__results_of_2015_user_survey/comment_3_e38568c6baa30f58c5a7735b2f7985ed._comment create mode 100644 doc/devblog/day_360__results_of_2015_user_survey/comment_4_e0bfb67454df205f2c9c566933e7f121._comment create mode 100644 doc/devblog/day_361__adjusted_branches_design.mdwn create mode 100644 doc/devblog/day_362__encoding_fun.mdwn create mode 100644 doc/devblog/day_363__snow_day.mdwn create mode 100644 doc/devblog/day_364__more_v6_unlocked.mdwn create mode 100644 doc/devblog/day_365__some_kind_of_milestone.mdwn create mode 100644 doc/devblog/day_366__starting_adjusted_branches.mdwn create mode 100644 doc/devblog/day_367__adjusted_branches_proof_of_concept.mdwn create mode 100644 doc/devblog/day_368__leap.mdwn create mode 100644 doc/devblog/day_369-370__paddling_furiously.mdwn create mode 100644 doc/devblog/day_36__bugfixing.mdwn create mode 100644 doc/devblog/day_371__catching_up.mdwn create mode 100644 doc/devblog/day_372__adjusted_branches_improved.mdwn create mode 100644 doc/devblog/day_373__away.mdwn create mode 100644 doc/devblog/day_374__security_fix.mdwn create mode 100644 doc/devblog/day_375__back.mdwn create mode 100644 doc/devblog/day_376__in_the_weeds.mdwn create mode 100644 doc/devblog/day_377__will_adjusted_branches_ever_end.mdwn create mode 100644 doc/devblog/day_378__finishing_adjusted_branches_merge.mdwn create mode 100644 doc/devblog/day_379__bugs_race_conditions_and_taxes.mdwn create mode 100644 doc/devblog/day_37__long_day.mdwn create mode 100644 doc/devblog/day_380__post_release.mdwn create mode 100644 doc/devblog/day_381__executable_unlocked_files.mdwn create mode 100644 doc/devblog/day_382-384__pretty_well_caught_up.mdwn create mode 100644 doc/devblog/day_385__new_features.mdwn create mode 100644 doc/devblog/day_385__new_features/comment_1_f76ff85897f24692e96f88236b7f4b7d._comment create mode 100644 doc/devblog/day_386__day_off.mdwn create mode 100644 doc/devblog/day_387__release_day.mdwn create mode 100644 doc/devblog/day_387__release_day/comment_1_3e48e930616917f6db1fc351d0f7e6df._comment create mode 100644 doc/devblog/day_387__release_day/comment_2_86262439c9056c0e06623cdf79eaf9a6._comment create mode 100644 doc/devblog/day_388-389__various_and_windows.mdwn create mode 100644 doc/devblog/day_38__starting_git_repo_repair.mdwn create mode 100644 doc/devblog/day_38__starting_git_repo_repair/comment_1_321468d9686db5dde072500bdaeb7d29._comment create mode 100644 doc/devblog/day_390__sharedpubkey.mdwn create mode 100644 doc/devblog/day_391__git_smudge_clean_interface_proposal.mdwn create mode 100644 doc/devblog/day_392__v6_fixes.mdwn create mode 100644 doc/devblog/day_392__v6_fixes/comment_1_6da0787fa9749ee2d1f91842f10a5d3c._comment create mode 100644 doc/devblog/day_392__v6_fixes/comment_2_15434848be1951e93a1e5b9fcbccedb0._comment create mode 100644 doc/devblog/day_392__v6_fixes/comment_3_74e696f147f80162a941a5a5435327ce._comment create mode 100644 doc/devblog/day_393__fun_and_more_fun.mdwn create mode 100644 doc/devblog/day_394__implicit_vs_explicit.mdwn create mode 100644 doc/devblog/day_395__leaky_abstractions.mdwn create mode 100644 doc/devblog/day_396__misc_fixes.mdwn create mode 100644 doc/devblog/day_397__befuddled.mdwn create mode 100644 doc/devblog/day_398__fresh_eyes.mdwn create mode 100644 doc/devblog/day_399__weird_git_merge_bug.mdwn create mode 100644 doc/devblog/day_39__git-recover-repository.mdwn create mode 100644 doc/devblog/day_3__gcrypt_uuids.mdwn create mode 100644 doc/devblog/day_400-401__git_development.mdwn create mode 100644 doc/devblog/day_402__enhanced_smudge_clean_interface.mdwn create mode 100644 doc/devblog/day_403__update_and_away.mdwn create mode 100644 doc/devblog/day_404__low_hanging_fruit.mdwn create mode 100644 doc/devblog/day_405__more_git_development.mdwn create mode 100644 doc/devblog/day_406__low_handing_fruit_continued.mdwn create mode 100644 doc/devblog/day_407__lazy_sunday.mdwn create mode 100644 doc/devblog/day_408__release_day.mdwn create mode 100644 doc/devblog/day_408__release_day/comment_1_RichiH._comment create mode 100644 doc/devblog/day_409__--branch.mdwn create mode 100644 doc/devblog/day_40__another_fine_mess.mdwn create mode 100644 doc/devblog/day_410__better_JSON_for_metadata.mdwn create mode 100644 doc/devblog/day_411__metadata_--batch.mdwn create mode 100644 doc/devblog/day_412__if_at_first_you_dont_succeed.mdwn create mode 100644 doc/devblog/day_412__if_at_first_you_dont_succeed/comment_1_8980f56815a2c016ca950aec09e6e839._comment create mode 100644 doc/devblog/day_412__if_at_first_you_dont_succeed/comment_2_641ca9bce852cea42cac25fd77518885._comment create mode 100644 doc/devblog/day_413__back.mdwn create mode 100644 doc/devblog/day_414__improved_parallel_get.mdwn create mode 100644 doc/devblog/day_415__catching_up.mdwn create mode 100644 doc/devblog/day_416__measure_twice.mdwn create mode 100644 doc/devblog/day_417__cut_once.mdwn create mode 100644 doc/devblog/day_418__concurrent_externals.mdwn create mode 100644 doc/devblog/day_418__concurrent_externals/comment_1_75e6569b143cf3f595ba9b356415a747._comment create mode 100644 doc/devblog/day_418__concurrent_externals/comment_2_067909ed54f3f9295f90233f25ccfd70._comment create mode 100644 doc/devblog/day_418__concurrent_externals/comment_3_39c729fc2ea4b597d13e54d60bb36d0d._comment create mode 100644 doc/devblog/day_418__concurrent_externals/comment_4_6b254fbe92d40abc30d01afe5d039afc._comment create mode 100644 doc/devblog/day_418__concurrent_externals/comment_5_5e851b62bdca1cb8d8062d4890c77956._comment create mode 100644 doc/devblog/day_418__concurrent_externals/comment_6_ea5d42bcb03af937a604119039f9073a._comment create mode 100644 doc/devblog/day_419__catching_up.mdwn create mode 100644 doc/devblog/day_41__onward.mdwn create mode 100644 doc/devblog/day_41__onward/comment_1_a716c7b5a9ea3c949ff047cfb4e9a0a4._comment create mode 100644 doc/devblog/day_41__onward/comment_2_33149e424cd5f03fac376288bcc4dfdc._comment create mode 100644 doc/devblog/day_41__onward/comment_3_3b07503bd79089ad3ce3ddd7535ed116._comment create mode 100644 doc/devblog/day_420__delayed_debugging.mdwn create mode 100644 doc/devblog/day_421__lost_in_the_trees.mdwn create mode 100644 doc/devblog/day_422__bugfixes_for_v6_mode.mdwn create mode 100644 doc/devblog/day_423__ssh_fun.mdwn create mode 100644 doc/devblog/day_424__the_dog.mdwn create mode 100644 doc/devblog/day_425__tor.mdwn create mode 100644 doc/devblog/day_425__tor/comment_1_1dd41fa32eb3867d764f3238005b5b81._comment create mode 100644 doc/devblog/day_426__grab_bag.mdwn create mode 100644 doc/devblog/day_426__grab_bag/comment_1_4d01c756850032d351fa99188a3301a7._comment create mode 100644 doc/devblog/day_427__free_p2p.mdwn create mode 100644 doc/devblog/day_428-429__git_push_to_hiddden_service.mdwn create mode 100644 doc/devblog/day_42__repair_milestone.mdwn create mode 100644 doc/devblog/day_430__tor_socket_problem.mdwn create mode 100644 doc/devblog/day_431__p2p_linking.mdwn create mode 100644 doc/devblog/day_431__p2p_linking/comment_1_1d5f809564c25e765f82594af8e174ab._comment create mode 100644 doc/devblog/day_432-433__almost_there.mdwn create mode 100644 doc/devblog/day_434__it_works.mdwn create mode 100644 doc/devblog/day_435-436_post_tor_merge.mdwn create mode 100644 doc/devblog/day_437__catching_up.mdwn create mode 100644 doc/devblog/day_438__bi-directional_p2p_links.mdwn create mode 100644 doc/devblog/day_439__wormhole_pairing.mdwn create mode 100644 doc/devblog/day_43__bugfix_day.mdwn create mode 100644 doc/devblog/day_440__holidaze.mdwn create mode 100644 doc/devblog/day_441__webapp_wormhole_pairing.mdwn create mode 100644 doc/devblog/day_442__xmpp_removal.mdwn create mode 100644 doc/devblog/day_442__xmpp_removal/comment_1_22ff11b84f855ab5e6de6dcf2553a050._comment create mode 100644 doc/devblog/day_442__xmpp_removal/comment_2_eaf64ce3daae790bb27d21887886d73b._comment create mode 100644 doc/devblog/day_443__yes_it_has_been_a_while.mdwn create mode 100644 doc/devblog/day_444__memory_leak_with_a_cold.mdwn create mode 100644 doc/devblog/day_445__configs.mdwn create mode 100644 doc/devblog/day_446__quiet_progress.mdwn create mode 100644 doc/devblog/day_447__bug_class.mdwn create mode 100644 doc/devblog/day_448__git_push_to_update_remote.mdwn create mode 100644 doc/devblog/day_449__SHA1_break_day.mdwn create mode 100644 doc/devblog/day_44__automatic_removable_drive_repair.mdwn create mode 100644 doc/devblog/day_450__hardening_against_SHA_attacks.mdwn create mode 100644 doc/devblog/day_451__annex.securehashesonly.mdwn create mode 100644 doc/devblog/day_452__GIT_SSH.mdwn create mode 100644 doc/devblog/day_453_release_prep.mdwn create mode 100644 doc/devblog/day_454__multicast.mdwn create mode 100644 doc/devblog/day_454__multicast/comment_1_137ea34cd11004513a03f24955719756._comment create mode 100644 doc/devblog/day_454__multicast/comment_2_09908606fc362cbee516999cd696f718._comment create mode 100644 doc/devblog/day_455__semi-synchronized.mdwn create mode 100644 doc/devblog/day_456__digging_in.mdwn create mode 100644 doc/devblog/day_457__improved_ssh_password_prompting.mdwn create mode 100644 doc/devblog/day_458__adeiu_MissingH.mdwn create mode 100644 doc/devblog/day_459__git_bug.mdwn create mode 100644 doc/devblog/day_45__command_line.mdwn create mode 100644 doc/devblog/day_460__move_--to_here.mdwn create mode 100644 doc/devblog/day_461__shell_completions.mdwn create mode 100644 doc/devblog/day_462__the_feature_youve_all_been_waiting_for.mdwn create mode 100644 doc/devblog/day_462__the_feature_youve_all_been_waiting_for/comment_1_6b13defcdf76691049b9bcd7ec675da6._comment create mode 100644 doc/devblog/day_463-465__back_buggy_external_special_remotes.mdwn create mode 100644 doc/devblog/day_466__export_prototype.mdwn create mode 100644 doc/devblog/day_467__export_progress.mdwn create mode 100644 doc/devblog/day_467__firming_up_export.mdwn create mode 100644 doc/devblog/day_467__firming_up_export/comment_1_382fac60766340481acbcb8c05b70f42._comment create mode 100644 doc/devblog/day_468__export_renames.mdwn create mode 100644 doc/devblog/day_468__export_renames/comment_1_4c37e6f9ac1e1571495b0d355c8af9ff._comment create mode 100644 doc/devblog/day_468__export_renames/comment_2_7fbbc5beb80acf32eff617ec704d5466._comment create mode 100644 doc/devblog/day_469__export_merged.mdwn create mode 100644 doc/devblog/day_46__wrapping_up_the_month.mdwn create mode 100644 doc/devblog/day_470__export_to_external_and_S3.mdwn create mode 100644 doc/devblog/day_471__export_to_more_remotes.mdwn create mode 100644 doc/devblog/day_472__removing_empty_directories.mdwn create mode 100644 doc/devblog/day_473__distributed_use_of_exports.mdwn create mode 100644 doc/devblog/day_474__tracking_exports.mdwn create mode 100644 doc/devblog/day_475__assistant_exports.mdwn create mode 100644 doc/devblog/day_476__third_time_lucky.mdwn create mode 100644 doc/devblog/day_477__windows_build_fixed.mdwn create mode 100644 doc/devblog/day_478__windows_the_blackhole.mdwn create mode 100644 doc/devblog/day_47__fell_off_the_blogging_wagon.mdwn create mode 100644 doc/devblog/day_482__website_login_problem.mdwn create mode 100644 doc/devblog/day_483__faster_start_with_removable_drives.mdwn create mode 100644 doc/devblog/day_484__special_remote_protocol_extensions.mdwn create mode 100644 doc/devblog/day_485__slow_and_steady.mdwn create mode 100644 doc/devblog/day_486__time_to_ditch_rsync.mdwn create mode 100644 doc/devblog/day_487__git-annex-shell_p2pstdio.mdwn create mode 100644 doc/devblog/day_488__groundwork_for_using_p2pstdio.mdwn create mode 100644 doc/devblog/day_489__zooming.mdwn create mode 100644 doc/devblog/day_489__zooming/comment_1_d840f371f1d22b0ee8f3c8df25ebe3d3._comment create mode 100644 doc/devblog/day_489__zooming/comment_2_ec579c84aeb244798a818a20ff0f50b5._comment create mode 100644 doc/devblog/day_48__direct_mode_guard_design.mdwn create mode 100644 doc/devblog/day_48__direct_mode_guard_design/comment_1_ec0147ccc55bad3a38652383f4098a65._comment create mode 100644 doc/devblog/day_490__kind_of_annoying.mdwn create mode 100644 doc/devblog/day_491__annex.verify_redux.mdwn create mode 100644 doc/devblog/day_492__concurrency_is_hard.mdwn create mode 100644 doc/devblog/day_493__two_new_special_remotes.mdwn create mode 100644 doc/devblog/day_494__url_download_changes.mdwn create mode 100644 doc/devblog/day_495__move_numcopies_safety.mdwn create mode 100644 doc/devblog/day_496__move_numcopies_safety_revisited.mdwn create mode 100644 doc/devblog/day_497__rethinking_the_android_port.mdwn create mode 100644 doc/devblog/day_497__rethinking_the_android_port/comment_1_cb30ab18753e5f221ed4d92b3ff8a32e._comment create mode 100644 doc/devblog/day_498__unexpected_release_prep.mdwn create mode 100644 doc/devblog/day_499__security_hole.mdwn create mode 100644 doc/devblog/day_49__direct_mode_guard_implementation.mdwn create mode 100644 doc/devblog/day_49__direct_mode_guard_implementation/comment_1_3ebe5c3f708070f164ecaf36b79f7bfc._comment create mode 100644 doc/devblog/day_4__unexpected_windows_day.mdwn create mode 100644 doc/devblog/day_500__security_hole_part_2.mdwn create mode 100644 doc/devblog/day_501__security_hole_part_3.mdwn create mode 100644 doc/devblog/day_502__security_hole_part_4.mdwn create mode 100644 doc/devblog/day_503__security_hole_part_5.mdwn create mode 100644 doc/devblog/day_504__security_hole_part_6.mdwn create mode 100644 doc/devblog/day_505__security_fix_release.mdwn create mode 100644 doc/devblog/day_506__summer_features.mdwn create mode 100644 doc/devblog/day_507__v6_revisited.mdwn create mode 100644 doc/devblog/day_508__git-protocol.mdwn create mode 100644 doc/devblog/day_509__filterdriver.mdwn create mode 100644 doc/devblog/day_50__grab_bag.mdwn create mode 100644 doc/devblog/day_50__grab_bag/comment_1_01846f6494fe843889391fd09fd127a0._comment create mode 100644 doc/devblog/day_50__grab_bag/comment_2_12736014aa2c1af81e4b83072505e7d5._comment create mode 100644 doc/devblog/day_510__v6_get_drop_index.mdwn create mode 100644 doc/devblog/day_510__v6_get_drop_index/comment_1_0e2eff8c8c3aaef3499b8f94b2733148._comment create mode 100644 doc/devblog/day_511__v6_improved_index_update.mdwn create mode 100644 doc/devblog/day_512__fixed_race.mdwn create mode 100644 doc/devblog/day_513__v6_reconciling_staged_changes.mdwn create mode 100644 doc/devblog/day_514__fixed_5_races_in_v6.mdwn create mode 100644 doc/devblog/day_514__v6_bug_review.mdwn create mode 100644 doc/devblog/day_515__S3_exporttree_with_versioning.mdwn create mode 100644 doc/devblog/day_516__S3_exporttree_with_versioning_continued.mdwn create mode 100644 doc/devblog/day_517__return_to_crowdfunding.mdwn create mode 100644 doc/devblog/day_518__S3_versioning_finishing_touches.mdwn create mode 100644 doc/devblog/day_518__S3_versioning_finishing_touches/comment_1_aed297f65b6e555f338fc622a8678c0f._comment create mode 100644 doc/devblog/day_518__S3_versioning_finishing_touches/comment_2_a981371786ba702ac616cd55b296bc1c._comment create mode 100644 doc/devblog/day_518__S3_versioning_finishing_touches/comment_3_08de1605f1aa8b042ba3c4b710939989._comment create mode 100644 doc/devblog/day_519__release_prep.mdwn create mode 100644 doc/devblog/day_51__direct_mode_guard_finished.mdwn create mode 100644 doc/devblog/day_520__storm_before_the_calm.mdwn create mode 100644 doc/devblog/day_521__newlines_in_filenames.mdwn create mode 100644 doc/devblog/day_522__multi.mdwn create mode 100644 doc/devblog/day_523__backlog.mdwn create mode 100644 doc/devblog/day_524__new_phone.mdwn create mode 100644 doc/devblog/day_52__slowly_but_surely.mdwn create mode 100644 doc/devblog/day_545__termux_improvements.mdwn create mode 100644 doc/devblog/day_546__deleted_40_thousand_lines_of_code.mdwn create mode 100644 doc/devblog/day_547__v6_almost_complete.mdwn create mode 100644 doc/devblog/day_548__hiding_missing_files.mdwn create mode 100644 doc/devblog/day_549__operating_on_hidden_files.mdwn create mode 100644 doc/devblog/day_549__operating_on_hidden_files/comment_1_29ded4a0926cca6f2485efc07c039b62._comment create mode 100644 doc/devblog/day_54__android_bisection_minions.mdwn create mode 100644 doc/devblog/day_54__android_bisection_minions/comment_1_bea8fbe2b87d4a4865b92fa796298fa0._comment create mode 100644 doc/devblog/day_550__a_plan_to_finish_v6.mdwn create mode 100644 doc/devblog/day_550__a_plan_to_finish_v6/comment_2_4a839c274832e43664d665e90b93146c._comment create mode 100644 doc/devblog/day_550__a_plan_to_finish_v6/comment_2_bae3f3303d61126a337f2dac71681e1d._comment create mode 100644 doc/devblog/day_551__v6_or_v7.mdwn create mode 100644 doc/devblog/day_551__v6_or_v7/comment_1_a46bd8dcc560a681405f82f13fc2e87e._comment create mode 100644 doc/devblog/day_551__v6_or_v7/comment_2_555009f3455129946b0238bc7e3bc52e._comment create mode 100644 doc/devblog/day_551__v6_or_v7/comment_3_0fa5ed098fa850fee538034f4787f35e._comment create mode 100644 doc/devblog/day_552_523__v7_release_prep.mdwn create mode 100644 doc/devblog/day_552_523__v7_release_prep/comment_1_31c6692172dbc1217d0a7ab90c074823._comment create mode 100644 doc/devblog/day_554__git-annex_user_survey_draft.mdwn create mode 100644 doc/devblog/day_555__git_annex_user_survey_live.mdwn create mode 100644 doc/devblog/day_556__snow_day.mdwn create mode 100644 doc/devblog/day_557__upgrade_bugfixes.mdwn create mode 100644 doc/devblog/day_558__new_horizons.mdwn create mode 100644 doc/devblog/day_559__surprising_win.mdwn create mode 100644 doc/devblog/day_55__fireside_porting.mdwn create mode 100644 doc/devblog/day_55__fireside_porting/comment_1_d690a52db82f9594d99ae65fe51e1f1a._comment create mode 100644 doc/devblog/day_560__into_the_weeds.mdwn create mode 100644 doc/devblog/day_561__better_benchmarking.mdwn create mode 100644 doc/devblog/day_562__on_to_metadata.mdwn create mode 100644 doc/devblog/day_563-564__log_conversion.mdwn create mode 100644 doc/devblog/day_565__bytestring_Key.mdwn create mode 100644 doc/devblog/day_566__stopping_place.mdwn create mode 100644 doc/devblog/day_567__neither_rain_nor_snow.mdwn create mode 100644 doc/devblog/day_568__release_day.mdwn create mode 100644 doc/devblog/day_569__another_week_another_release.mdwn create mode 100644 doc/devblog/day_56__git-annex_user_survey.mdwn create mode 100644 doc/devblog/day_570__brrr.mdwn create mode 100644 doc/devblog/day_571__survey_results.mdwn create mode 100644 doc/devblog/day_572__thinking_please_wait.mdwn create mode 100644 doc/devblog/day_573__starting_import_tree_implementation.mdwn create mode 100644 doc/devblog/day_574__weeds.mdwn create mode 100644 doc/devblog/day_575__core_of_import_tree_done.mdwn create mode 100644 doc/devblog/day_576__import_export.mdwn create mode 100644 doc/devblog/day_576__import_tree_details.mdwn create mode 100644 doc/devblog/day_576__import_tree_working.mdwn create mode 100644 doc/devblog/day_576__import_tree_working/comment_1_2ffd447e05466b806d36b761b4143e56._comment create mode 100644 doc/devblog/day_577__how_am_I_still_working_on_import_tree.mdwn create mode 100644 doc/devblog/day_578__import_tree_merged.mdwn create mode 100644 doc/devblog/day_579__bug_triage.mdwn create mode 100644 doc/devblog/day_57__mavericks.mdwn create mode 100644 doc/devblog/day_580__import_from_android.mdwn create mode 100644 doc/devblog/day_581__starting_import_from_S3.mdwn create mode 100644 doc/devblog/day_582__versioned_S3_import_working.mdwn create mode 100644 doc/devblog/day_583__S3_import_and_export_fully_working.mdwn create mode 100644 doc/devblog/day_584__matching_S3_histories.mdwn create mode 100644 doc/devblog/day_585__not_matching_S3_histories.mdwn create mode 100644 doc/devblog/day_586__wrapping_up_S3_import.mdwn create mode 100644 doc/devblog/day_586__wrapping_up_S3_import/s3history.png create mode 100644 doc/devblog/day_586__wrapping_up_S3_import/s3rename.png create mode 100644 doc/devblog/day_587__import_preferred_content.mdwn create mode 100644 doc/devblog/day_588__export_preferred_content.mdwn create mode 100644 doc/devblog/day_589__wrapping_up_import_export_preferred_content.mdwn create mode 100644 doc/devblog/day_58__urgle.mdwn create mode 100644 doc/devblog/day_58__urgle/comment_1_bd279f58f614b103a53215dfb0211007._comment create mode 100644 doc/devblog/day_590__toward_importing_from_externals.mdwn create mode 100644 doc/devblog/day_591__superscalar_pipelining.mdwn create mode 100644 doc/devblog/day_592__refactoring_start_messages.mdwn create mode 100644 doc/devblog/day_593__partial_success.mdwn create mode 100644 doc/devblog/day_594__finally_background_checksum_verification.mdwn create mode 100644 doc/devblog/day_594__finally_background_checksum_verification/comment_1_334c36d503abd06611a46cc102139446._comment create mode 100644 doc/devblog/day_595__cleaner_worker_pool_stages.mdwn create mode 100644 doc/devblog/day_596__back_from_summer_vacation.mdwn create mode 100644 doc/devblog/day_597__git-lfs_support.mdwn create mode 100644 doc/devblog/day_598__Windows_and_test_suite.mdwn create mode 100644 doc/devblog/day_599__dropping_direct_mode.mdwn create mode 100644 doc/devblog/day_59__release_day.mdwn create mode 100644 doc/devblog/day_5__gcrypt_special_remote_part_1.mdwn create mode 100644 doc/devblog/day_600__close_to_v7_default.mdwn create mode 100644 doc/devblog/day_601__v7_default.mdwn create mode 100644 doc/devblog/day_601__v7_default/comment_1_54af3bf0a521597d49bd8f8ef0ab5555._comment create mode 100644 doc/devblog/day_601__v7_default/comment_2_c2daec80c7834ebb62324d7169c6c158._comment create mode 100644 doc/devblog/day_602__sameas.mdwn create mode 100644 doc/devblog/day_603__sameas_working.mdwn create mode 100644 doc/devblog/day_604__unscheduled_release.mdwn create mode 100644 doc/devblog/day_605__well_Im_done_for_now.mdwn create mode 100644 doc/devblog/day_605__well_Im_done_for_now/comment_1_7366f7108495129680301d9b93bb8fb6._comment create mode 100644 doc/devblog/day_605__well_Im_done_for_now/comment_2_cd42103ea06ede8352176e66fc5434c5._comment create mode 100644 doc/devblog/day_605__well_Im_done_for_now/comment_3_774f264c555965461d621587cbdf8a1e._comment create mode 100644 doc/devblog/day_606__on_recent_events.mdwn create mode 100644 doc/devblog/day_607__v8_is_done.mdwn create mode 100644 doc/devblog/day_607__v8_is_done/comment_1_7326382d8ff23873c2fe0d6acd984454._comment create mode 100644 doc/devblog/day_607__v8_is_done/comment_2_802311f91808a13473aa99578a429497._comment create mode 100644 doc/devblog/day_607__v8_is_done/comment_3_7d3cad862be54dc5a39059f8b82834a6._comment create mode 100644 doc/devblog/day_608__easier_git-lfs_setup.mdwn create mode 100644 doc/devblog/day_608__easier_git-lfs_setup/comment_1_b72bea21d4445d12cade9f54ecc3767d._comment create mode 100644 doc/devblog/day_609__optimisation.mdwn create mode 100644 doc/devblog/day_60__damage_driven_development.mdwn create mode 100644 doc/devblog/day_610-611__ByteString_optimisation_early_days.mdwn create mode 100644 doc/devblog/day_610-611__ByteString_optimisation_early_days/comment_1_1601268fd4dba4df9cc3dc84932914a6._comment create mode 100644 doc/devblog/day_610-611__ByteString_optimisation_early_days/comment_2_21872150f9b2ff9cc08f94d52dbdf3a6._comment create mode 100644 doc/devblog/day_612__building_again.mdwn create mode 100644 doc/devblog/day_613__end-to-end_ByteString_milestone.mdwn create mode 100644 doc/devblog/day_614__bytestring_wrapping_up.mdwn create mode 100644 doc/devblog/day_615__new_year.mdwn create mode 100644 doc/devblog/day_616__remote_config_parsing.mdwn create mode 100644 doc/devblog/day_617__remote_config_parsing_continued.mdwn create mode 100644 doc/devblog/day_617__remote_config_parsing_continued/comment_1_d3ab2e85ea775cc6f39f12210374c35f._comment create mode 100644 doc/devblog/day_618__v8_merged.mdwn create mode 100644 doc/devblog/day_619__important_bugfix_release_and_v8_too.mdwn create mode 100644 doc/devblog/day_61__damage_driven_development__II.mdwn create mode 100644 doc/devblog/day_620__emergency_mode.mdwn create mode 100644 doc/devblog/day_621__back_to_normal-ish.mdwn create mode 100644 doc/devblog/day_622__behavior_changes.mdwn create mode 100644 doc/devblog/day_623__started_timeouts.mdwn create mode 100644 doc/devblog/day_624__timeouts_snag.mdwn create mode 100644 doc/devblog/day_625__import_tree_largefiles.mdwn create mode 100644 doc/devblog/day_626__performance_week.mdwn create mode 100644 doc/devblog/day_627__last_performance_work_for_now.mdwn create mode 100644 doc/devblog/day_628__external_key_backends.mdwn create mode 100644 doc/devblog/day_628__external_key_backends/comment_1_e6ff184245dd1a6cffff2ecdaeff6a66._comment create mode 100644 doc/devblog/day_629__async_external_special_remotes.mdwn create mode 100644 doc/devblog/day_62__upgrade_alerts.mdwn create mode 100644 doc/devblog/day_62__upgrade_alerts/comment_1_cdb44aaa1d2a784a72613cbf16038f89._comment create mode 100644 doc/devblog/day_62__upgrade_alerts/comment_2_b08bb946e4760d7f03b45c852c745b2e._comment create mode 100644 doc/devblog/day_630__dealing_with_git_changes.mdwn create mode 100644 doc/devblog/day_630__introspection_for_speed.mdwn create mode 100644 doc/devblog/day_631-632__memory_leak.mdwn create mode 100644 doc/devblog/day_633__ten_years.mdwn create mode 100644 doc/devblog/day_633__ten_years/comment_1_4842e53398d9ee668053ec6d4da426dd._comment create mode 100644 doc/devblog/day_633__ten_years/comment_2_48b09fc7e66cd9d9fb7c0f78f21c7ac5._comment create mode 100644 doc/devblog/day_634__new_features.mdwn create mode 100644 doc/devblog/day_635__stall_detection.mdwn create mode 100644 doc/devblog/day_636__stall_stall.mdwn create mode 100644 doc/devblog/day_637__thirdparty_of_borg.mdwn create mode 100644 doc/devblog/day_638__borg_special_remote_working.mdwn create mode 100644 doc/devblog/day_639__major_keys_database_milestone.mdwn create mode 100644 doc/devblog/day_63__leverage.mdwn create mode 100644 doc/devblog/day_640__finally_dealt_with_clock_skew.mdwn create mode 100644 doc/devblog/day_641__an_alternative_smudge_filter.mdwn create mode 100644 doc/devblog/day_641__an_alternative_smudge_filter/comment_1_ab7bbff67f34e217df5f0e75dedb7f2c._comment create mode 100644 doc/devblog/day_641__an_alternative_smudge_filter/comment_2_9bc08810306ceb39ed1f017e9f1d81e3._comment create mode 100644 doc/devblog/day_641__an_alternative_smudge_filter/comment_3_b9ffc711b4531b6f2b4af4efd1e9d9d6._comment create mode 100644 doc/devblog/day_641__an_alternative_smudge_filter/comment_4_b2a0a8f646197ce1826bc2e6859139b1._comment create mode 100644 doc/devblog/day_641__an_alternative_smudge_filter/comment_5_6a5932706a9fee097c3fdf2cd6808f1d._comment create mode 100644 doc/devblog/day_641__an_alternative_smudge_filter/comment_6_ad1d78a28887af24d77b2b9e3739b68a._comment create mode 100644 doc/devblog/day_641__an_alternative_smudge_filter/comment_7_3107429d7250a71584ea7947609207ec._comment create mode 100644 doc/devblog/day_641__an_alternative_smudge_filter/comment_8_45f97189936e7f477850aef9ef745538._comment create mode 100644 doc/devblog/day_641__an_alternative_smudge_filter/comment_9_3129a6da37ba7a1f8ee11441b7ed4d07._comment create mode 100644 doc/devblog/day_642__cost_model.mdwn create mode 100644 doc/devblog/day_642__cost_model/comment_1_36ecaafc1d7f6460758d6824a357432c._comment create mode 100644 doc/devblog/day_642__cost_model/comment_2_5bb7a20dd3141423ce4109d8fd4098c4._comment create mode 100644 doc/devblog/day_643__adjusted_view_branches.mdwn create mode 100644 doc/devblog/day_643__adjusted_view_branches/comment_1_5f2dfde34d4ef5048920f3fcabddbd56._comment create mode 100644 doc/devblog/day_643__adjusted_view_branches/comment_2_51e285666d42e08edbaf22699782392e._comment create mode 100644 doc/devblog/day_644-648__terminal_escape_sequences.mdwn create mode 100644 doc/devblog/day_649-650__speeding_up_repeated_imports.mdwn create mode 100644 doc/devblog/day_64__overkill.mdwn create mode 100644 doc/devblog/day_64__overkill/comment_1_e1db7678aae37af281d31ae211677786._comment create mode 100644 doc/devblog/day_64__overkill/comment_3_f7a96f0b6d942d0b59d9d0ec1b21c4bf._comment create mode 100644 doc/devblog/day_651__a_major_release__and_a_conference.mdwn create mode 100644 doc/devblog/day_65__wrapping_up_upgrades.mdwn create mode 100644 doc/devblog/day_66__upgrade_testing.mdwn create mode 100644 doc/devblog/day_67_thanksgiving_rush.mdwn create mode 100644 doc/devblog/day_68__bits_and_pieces.mdwn create mode 100644 doc/devblog/day_69__catching_up.mdwn create mode 100644 doc/devblog/day_6__gcrypt_fully_working.mdwn create mode 100644 doc/devblog/day_6__gcrypt_fully_working/comment_1_136bb7537a9ba93d400ce6f6ea1932ac._comment create mode 100644 doc/devblog/day_6__gcrypt_fully_working/comment_2_1f8faa65bbd56a12588b43a5bc822d96._comment create mode 100644 doc/devblog/day_70__preliminary_user_survey_analysis.mdwn create mode 100644 doc/devblog/day_71__that_was_unexpected.mdwn create mode 100644 doc/devblog/day_72__windows_webapp_not.mdwn create mode 100644 doc/devblog/day_73__EvilLinker.mdwn create mode 100644 doc/devblog/day_74__so_close.mdwn create mode 100644 doc/devblog/day_74__so_close/comment_1_b1aa185734c3d74830b81def4fe63bff._comment create mode 100644 doc/devblog/day_75__hallelujah.mdwn create mode 100644 doc/devblog/day_75__hallelujah/comment_1_df04c456e99d47743494a18c1badba8c._comment create mode 100644 doc/devblog/day_76__results.mdwn create mode 100644 doc/devblog/day_77__it_builds.mdwn create mode 100644 doc/devblog/day_78__desidetracked.mdwn create mode 100644 doc/devblog/day_79__catch_up.mdwn create mode 100644 doc/devblog/day_7__release_day.mdwn create mode 100644 doc/devblog/day_7__release_day/comment_1_12bb94d903868ecddb3e348c9c4afeaf._comment create mode 100644 doc/devblog/day_7__release_day/comment_2_d3e38d6f6bba179dab40d4d75ff061de._comment create mode 100644 doc/devblog/day_80__plumbing.mdwn create mode 100644 doc/devblog/day_81__more_standalone.mdwn create mode 100644 doc/devblog/day_81__more_standalone/comment_1_25ceb116406b55a8ff28f7b392806bc9._comment create mode 100644 doc/devblog/day_82__rpi_and_synology.mdwn create mode 100644 doc/devblog/day_82__rpi_and_synology/comment_1_d154ddcf22027fd06acf9da73e12c006._comment create mode 100644 doc/devblog/day_83__armel_webapp.mdwn create mode 100644 doc/devblog/day_84__ho_uh_oh.mdwn create mode 100644 doc/devblog/day_85__external_special_remote_protocol_types.mdwn create mode 100644 doc/devblog/day_86__external_special_remote_implementation.mdwn create mode 100644 doc/devblog/day_86__external_special_remote_implementation/comment_1_5116bcf4b60030cb46683df94a75d7ee._comment create mode 100644 doc/devblog/day_86__external_special_remote_implementation/comment_2_7b6e734f785fbd9db7883b63150023dc._comment create mode 100644 doc/devblog/day_87__external_special_remotes_done.mdwn create mode 100644 doc/devblog/day_88__lazy_sunday.mdwn create mode 100644 doc/devblog/day_89__reflections.mdwn create mode 100644 doc/devblog/day_8__ill.mdwn create mode 100644 doc/devblog/day_90__slow_start.mdwn create mode 100644 doc/devblog/day_91__wintry_mix.mdwn create mode 100644 doc/devblog/day_92-93__reconnection.mdwn create mode 100644 doc/devblog/day_94__leaks.mdwn create mode 100644 doc/devblog/day_95__reconnection_revisited.mdwn create mode 100644 doc/devblog/day_95__reconnection_revisited/comment_1_c1106e573fcf9f3d4524c0e4f4254790._comment create mode 100644 doc/devblog/day_95__reconnection_revisited/comment_2_40478739f95e0b56ce0103db6e405ef4._comment create mode 100644 doc/devblog/day_96__catching_up.mdwn create mode 100644 doc/devblog/day_97__exciting_telehash_possiblities.mdwn create mode 100644 doc/devblog/day_97__exciting_telehash_possiblities/comment_1_7c775d93cbeed0d553e224751d30fbaa._comment create mode 100644 doc/devblog/day_98__old_bug.mdwn create mode 100644 doc/devblog/day_99__catching_up_again.mdwn create mode 100644 doc/devblog/day_99__catching_up_again/comment_1_b871bf0606dc29be9b8c2e5dc150f708._comment create mode 100644 doc/devblog/day_99__catching_up_again/comment_2_c8363d47223e7bb899420e800bde3e27._comment create mode 100644 doc/devblog/day_9__Friday_the_13th.mdwn create mode 100644 doc/devblog/day_9__Friday_the_13th/comment_1_07195b4ec399ba1be6c8bdb3ae0fa50b._comment create mode 100644 doc/devblog/day__126-127__merge_fixes.mdwn create mode 100644 doc/devblog/day__228_new_AWS.mdwn create mode 100644 doc/devblog/day__329-330__a_rising_tide.mdwn create mode 100644 doc/devblog/moving_blogs.mdwn create mode 100644 doc/devblog/moving_blogs/comment_1_6caa7e67461a6ea5de8155ae9cf75fab._comment create mode 100644 doc/devblog/moving_blogs/comment_2_e3e2048fc2397b87a2f29c9fe49394cb._comment create mode 100644 doc/devblog/whither_XMPP.mdwn create mode 100644 doc/devblog/youtube-dl.mdwn create mode 100644 doc/devblog/youtube-dl/comment_1_ff062ea66ea50d2f31a92c25017bb135._comment create mode 100644 doc/devblog/youtube-dl_day_2.mdwn create mode 100644 doc/devblog/youtube-dl_day_3.mdwn create mode 100644 doc/devblog/youtube-dl_day_3/comment_1_bcf6ccc65f191c446ae4ea70c4e86c87._comment create mode 100644 doc/devblog/youtube-dl_day_3/comment_2_423d1896981b9d5de85c89fdcde2d1ab._comment create mode 100644 doc/devblog/youtube-dl_day_3/comment_3_c3735d169bfe81eaba5557197b1c0eb0._comment create mode 100644 doc/devblog/youtube-dl_day_3/comment_4_d19a698b28a5d6b583c527b9a909370d._comment create mode 100644 doc/direct_mode.mdwn create mode 100644 doc/direct_mode/comment_11_1c79c93f4b17cfc354ab920e3775cc60._comment create mode 100644 doc/direct_mode/comment_12_1b5218fdb6ee362d6df68ff1229590d4._comment create mode 100644 doc/direct_mode/comment_12_7d507b6f87085a19d8dd5014f580922b._comment create mode 100644 doc/direct_mode/comment_13_5169c5541970d3b3bc1e080e07539b22._comment create mode 100644 doc/direct_mode/comment_13_55108ac736ea450df89332ba5de4a208._comment create mode 100644 doc/direct_mode/comment_14_03a02e689d92faa596de98e02b2ffe28._comment create mode 100644 doc/direct_mode/comment_14_ff4ffc2aabc5fd174d7386ef13860f78._comment create mode 100644 doc/direct_mode/comment_15_1cd32456630b25d5aaa6d2763e6eb384._comment create mode 100644 doc/direct_mode/comment_15_599b2285d24ae1244a1945d572b2c397._comment create mode 100644 doc/direct_mode/comment_16_7f6805e090d0acd8a077b65214da5837._comment create mode 100644 doc/direct_mode/comment_17_e7c066fba8e28c61e8517c7a18a02457._comment create mode 100644 doc/direct_mode/comment_18_e46f70efa6d8d65d5ef81cdcbd844869._comment create mode 100644 doc/direct_mode/comment_19_f4f23d9be76fa3c201b6c67efab0d69c._comment create mode 100644 doc/direct_mode/comment_20_4d0077d7881df05dcbeb460bf7734b6b._comment create mode 100644 doc/direct_mode/comment_3_8020d74bddf0e38b0a297e5dae7c217b._comment create mode 100644 doc/direct_mode/comment_4_97c26bd82f623a3b2d56bab4afff0126._comment create mode 100644 doc/direct_mode/comment_5_42363bf0367f935b3eee8ad3d2eaf5cf._comment create mode 100644 doc/direct_mode/comment_6_5f03b1686c1fb3f7606a5bc724ac3812._comment create mode 100644 doc/direct_mode/comment_7_5355ac418bfb26e990762b80f4c36b77._comment create mode 100644 doc/direct_mode/comment_8_6cd15e2c5fd0bef48f60c6993322c2fc._comment create mode 100644 doc/distributed_version_control.mdwn create mode 100644 doc/download.mdwn create mode 100644 doc/download/comment_1_ec2578241a966cfcdd43f2a26a5c8709._comment create mode 100644 doc/download/comment_2_ee0d158ac59903737dbc4ef632f11fe3._comment create mode 100644 doc/download/comment_3_b59fc32a18a9fda8da120da82fade0a6._comment create mode 100644 doc/download/comment_4_bf102d87552f97ac293dd20f6822b84f._comment create mode 100644 doc/encryption.mdwn create mode 100644 doc/encryption/comment_10_6416ee43ffad1c306ef71247ae71a6c5._comment create mode 100644 doc/encryption/comment_11_30b926fbabe9a0089de1f55f6f9a5d2d._comment create mode 100644 doc/encryption/comment_12_51fd19bf174906b1dd1461efd6ce3798._comment create mode 100644 doc/encryption/comment_13_44c6a401526a6ee22d5f0316336d453b._comment create mode 100644 doc/encryption/comment_14_5832365e198284c93d4a505856932841._comment create mode 100644 doc/encryption/comment_14_fb6ec1f42789a62358605e293b678318._comment create mode 100644 doc/encryption/comment_16_5dc76b832ae6b1bb7f458bf8e2650e8e._comment create mode 100644 doc/encryption/comment_17_a2195a298f65e427fe8460c8bc380f99._comment create mode 100644 doc/encryption/comment_1_4257e3c4ae559f1c0595a903f738fd7e._comment create mode 100644 doc/encryption/comment_2_5c2da865082de475254ebfd53feb2d0a._comment create mode 100644 doc/encryption/comment_3_46e64e4856975706e06e2a012a5d8f67._comment create mode 100644 doc/encryption/comment_4_fe8b181adef9a39a039ff96a0d587188._comment create mode 100644 doc/encryption/comment_5_5c9897663aaa83ca39a7e8cb292a3fd1._comment create mode 100644 doc/encryption/comment_6_1756ce62906586f876a3491e5d9befde._comment create mode 100644 doc/encryption/comment_8_3849eb24c3682644e263bae107747dee._comment create mode 100644 doc/encryption/comment_8_66e81e89fd483ca95620522b0f63c4fd._comment create mode 100644 doc/encryption/comment_9_5ca10891d642392aaff342c1478b0550._comment create mode 100644 doc/favicon.ico create mode 100644 doc/footer/column_a.mdwn create mode 100644 doc/footer/column_b.mdwn create mode 100644 doc/forum.mdwn create mode 100644 doc/forum/--verbose_not_really_verbose__63__.mdwn create mode 100644 doc/forum/--verbose_not_really_verbose__63__/comment_1_9a7927c22a50addafc58028f34c48578._comment create mode 100644 doc/forum/--verbose_not_really_verbose__63__/comment_2_0c846317803019058f6b522bc9abd5a6._comment create mode 100644 doc/forum/--verbose_not_really_verbose__63__/comment_3_a360190fee9a9514f0ba201baeaecd7a._comment create mode 100644 doc/forum/--verbose_not_really_verbose__63__/comment_4_e4d75464af5ced1ce1f9539ddf8755f4._comment create mode 100644 doc/forum/2_clients_using_an_encrypted_server_for_syncing_-_possible__63__.mdwn create mode 100644 doc/forum/2_clients_using_an_encrypted_server_for_syncing_-_possible__63__/comment_1_924521ad5972046bac44d2e04ec296c7._comment create mode 100644 doc/forum/2_clients_using_an_encrypted_server_for_syncing_-_possible__63__/comment_2_e2a7f34a3ccc1b6467e6da611c067d66._comment create mode 100644 doc/forum/2_clients_using_an_encrypted_server_for_syncing_-_possible__63__/comment_3_f9a369a6ac69f091e6128990274d3228._comment create mode 100644 doc/forum/2_clients_using_an_encrypted_server_for_syncing_-_possible__63__/comment_4_91b422f8d55b68077245c606c4f7f87c._comment create mode 100644 doc/forum/2_clients_using_an_encrypted_server_for_syncing_-_possible__63__/comment_5_f6128fe75ff3453747f69f12e0fd0a5b._comment create mode 100644 doc/forum/2_clients_using_an_encrypted_server_for_syncing_-_possible__63__/comment_6_9b90b4031a5ed26c375903b33ed65a10._comment create mode 100644 doc/forum/2_clients_using_an_encrypted_server_for_syncing_-_possible__63__/comment_7_acd64ce1b08a97ddf730622272e9f611._comment create mode 100644 doc/forum/2_clients_using_an_encrypted_server_for_syncing_-_possible__63__/comment_8_9baacb14fc5eb449cb13e0b4a4995fb0._comment create mode 100644 doc/forum/4hr+_sync_on_new_remote___40__USB_drive__41__.mdwn create mode 100644 doc/forum/4hr+_sync_on_new_remote___40__USB_drive__41__/comment_1_01a6020d25826a3e0afb087899f6919c._comment create mode 100644 doc/forum/ARM_build_on_Zyxel_NAS.mdwn create mode 100644 doc/forum/ARM_build_on_Zyxel_NAS/comment_1_38f38755c0afd76a2b968836fec395e8._comment create mode 100644 doc/forum/ARM_build_on_Zyxel_NAS/comment_2_44c8f1af0cbe9ad51794e6d8d16be627._comment create mode 100644 doc/forum/ARM_build_on_Zyxel_NAS/comment_3_b4f6e5ac672e8ece36cceb74ff3315dd._comment create mode 100644 doc/forum/A_git-annex_helper.mdwn create mode 100644 doc/forum/A_little_help_with_headless_server_configuration.mdwn create mode 100644 doc/forum/A_little_help_with_headless_server_configuration/comment_1_d32e28e8dcacf89eb357b78aefded274._comment create mode 100644 doc/forum/A_question_an_the_nomad_use_cases__58___files_to_fetch__44___files_to_delete__44___files_to_keep__63__.mdwn create mode 100644 doc/forum/A_question_an_the_nomad_use_cases__58___files_to_fetch__44___files_to_delete__44___files_to_keep__63__/comment_1_fe291cd6cd8e2d5b8e23f8e3689d824b._comment create mode 100644 doc/forum/A_question_an_the_nomad_use_cases__58___files_to_fetch__44___files_to_delete__44___files_to_keep__63__/comment_2_f0dbc3c723999bf0f22502e3a89d1d4a._comment create mode 100644 doc/forum/A_really_stupid_question.mdwn create mode 100644 doc/forum/A_really_stupid_question/comment_1_40e02556de0b00b94f245a0196b5a89f._comment create mode 100644 doc/forum/A_tiny_filesystem__63__.mdwn create mode 100644 doc/forum/A_tiny_filesystem__63__/comment_1_993e3f5dbe4bcbb5b7bd9e08ab9554f3._comment create mode 100644 doc/forum/A_tiny_filesystem__63__/comment_2_af57591d42868c8aa1cc1eda43ca8b98._comment create mode 100644 doc/forum/A_tiny_filesystem__63__/comment_3_3869c0472b50d7cf5e29ac0720f4f20f._comment create mode 100644 doc/forum/Accessing_files_directly_on__a_USB_device.mdwn create mode 100644 doc/forum/Accessing_files_in_SSH_remotes_while_SSHed_into_remote.mdwn create mode 100644 doc/forum/Accessing_files_in_SSH_remotes_while_SSHed_into_remote/comment_1_b2f7b4aa5e7c859de9741db440292365._comment create mode 100644 doc/forum/Accessing_files_in_SSH_remotes_while_SSHed_into_remote/comment_2_6450ee0b5729beec155fbe0ce304e223._comment create mode 100644 doc/forum/Accessing_files_in_SSH_remotes_while_SSHed_into_remote/comment_3_9d8d03bda09596d03d9cfb7138a152f0._comment create mode 100644 doc/forum/Accessing_files_in_SSH_remotes_while_SSHed_into_remote/comment_4_650ebbe4e7b57361a42882f3092122f0._comment create mode 100644 doc/forum/Accessing_files_in_bare_repository.mdwn create mode 100644 doc/forum/Accessing_files_in_bare_repository/comment_10_7eb66e3806f9524e043fae2da9d57d64._comment create mode 100644 doc/forum/Accessing_files_in_bare_repository/comment_11_f0165d66865ad14f7eb5d50e900c1df4._comment create mode 100644 doc/forum/Accessing_files_in_bare_repository/comment_12_0e7ea5161b6da6e9bb9425bdb953de33._comment create mode 100644 doc/forum/Accessing_files_in_bare_repository/comment_13_f804b9bf71f7d04bd23ce32d813dc340._comment create mode 100644 doc/forum/Accessing_files_in_bare_repository/comment_1_6de649d38febd2240eb5b703da77c2d6._comment create mode 100644 doc/forum/Accessing_files_in_bare_repository/comment_2_7e8dd09915ddc3267377e900891cb02c._comment create mode 100644 doc/forum/Accessing_files_in_bare_repository/comment_3_80eae4a73f38d1a7e35f97c33b6401f8._comment create mode 100644 doc/forum/Accessing_files_in_bare_repository/comment_4_5ec13e98d3ecb69426e974d34f712f9b._comment create mode 100644 doc/forum/Accessing_files_in_bare_repository/comment_5_dccbf5793998c6381e23eb8ff6497ebf._comment create mode 100644 doc/forum/Accessing_files_in_bare_repository/comment_6_42d923916232c81f3b8bdbefa34a89d3._comment create mode 100644 doc/forum/Accessing_files_in_bare_repository/comment_7_43a0a7d222faee582aeb3150a59cef87._comment create mode 100644 doc/forum/Accessing_files_in_bare_repository/comment_8_ec1024235c1c74c113483a833df84654._comment create mode 100644 doc/forum/Accessing_files_in_bare_repository/comment_9_c156b8c1ae0f2905566bbdb13b84e577._comment create mode 100644 doc/forum/Actions_very_slow_on_a_direct___40__and_crippled__41___annex_repository.mdwn create mode 100644 doc/forum/Actions_very_slow_on_a_direct___40__and_crippled__41___annex_repository/bugs/direct_mode_sync_should_avoid_git_commit.mdwn create mode 100644 doc/forum/Actions_very_slow_on_a_direct___40__and_crippled__41___annex_repository/comment_10_06dae5709750ea1da4f7fdbee4e84efc._comment create mode 100644 doc/forum/Actions_very_slow_on_a_direct___40__and_crippled__41___annex_repository/comment_11_2069c5c41882ae0a1973fb7da583b60e._comment create mode 100644 doc/forum/Actions_very_slow_on_a_direct___40__and_crippled__41___annex_repository/comment_12_b35e3a87c30974eedd71ebe52ecbed96._comment create mode 100644 doc/forum/Actions_very_slow_on_a_direct___40__and_crippled__41___annex_repository/comment_13_84e026f9bda87bfd12a3769dcef77f8b._comment create mode 100644 doc/forum/Actions_very_slow_on_a_direct___40__and_crippled__41___annex_repository/comment_14_b2ac2ea300a5026832b40a1a6b27a7cd._comment create mode 100644 doc/forum/Actions_very_slow_on_a_direct___40__and_crippled__41___annex_repository/comment_1_ed3534196164c6736a8dbf21c65c119d._comment create mode 100644 doc/forum/Actions_very_slow_on_a_direct___40__and_crippled__41___annex_repository/comment_2_1e29bcf568f02765c48f0eac6c640673._comment create mode 100644 doc/forum/Actions_very_slow_on_a_direct___40__and_crippled__41___annex_repository/comment_3_9ea6803a94b1de15079a3fa20d59c9af._comment create mode 100644 doc/forum/Actions_very_slow_on_a_direct___40__and_crippled__41___annex_repository/comment_4_3fae5a7fa5d99d0eb4473adb43e7f6f5._comment create mode 100644 doc/forum/Actions_very_slow_on_a_direct___40__and_crippled__41___annex_repository/comment_5_57a5b73cff480266355e75c7bdc762c2._comment create mode 100644 doc/forum/Actions_very_slow_on_a_direct___40__and_crippled__41___annex_repository/comment_6_bbcf5e863c8f152e1079536e9011a404._comment create mode 100644 doc/forum/Actions_very_slow_on_a_direct___40__and_crippled__41___annex_repository/comment_7_fdcd144c22601bdf98ff844254b0120d._comment create mode 100644 doc/forum/Actions_very_slow_on_a_direct___40__and_crippled__41___annex_repository/comment_8_b77243e765b2af7ba71e963fcb5cbbb1._comment create mode 100644 doc/forum/Actions_very_slow_on_a_direct___40__and_crippled__41___annex_repository/comment_9_cb0815e96ee211d4778f2e7a4274e855._comment create mode 100644 doc/forum/Add_a___34__local__34___remote.mdwn create mode 100644 doc/forum/Add_a___34__local__34___remote/comment_1_c68ad724b465c4be5243be687168c0b3._comment create mode 100644 doc/forum/Add_annex_files_outside_git_root_directory.mdwn create mode 100644 doc/forum/Add_annex_files_outside_git_root_directory/comment_1_3d7c8917633a6632f22385b8f7a98ccf._comment create mode 100644 doc/forum/Add_annex_files_outside_git_root_directory/comment_2_312a57883d809857a69216fa47e04f17._comment create mode 100644 doc/forum/Add_file_to_git_index_while_in_direct_mode.mdwn create mode 100644 doc/forum/Add_file_to_git_index_while_in_direct_mode/comment_1_3eb43a983eba09f500b776f75b299341._comment create mode 100644 doc/forum/Add_file_to_git_index_while_in_direct_mode/comment_2_6945d9e930e7385f0abe6538622a9aa3._comment create mode 100644 doc/forum/Add_file_to_git_index_while_in_direct_mode/comment_3_8f77b5dcf582e88099b2e6e77563fb11._comment create mode 100644 doc/forum/Add_files_to_direct_mode_repos.mdwn create mode 100644 doc/forum/Add_files_to_direct_mode_repos/comment_1_41d632853d3160899b04da7e4b95475e._comment create mode 100644 doc/forum/Added_file_to_annex_but_it_doesn__39__t_show_up_in_here.mdwn create mode 100644 doc/forum/Added_file_to_annex_but_it_doesn__39__t_show_up_in_here/comment_1_6757bfdc2876b5b763c338ad414e74dc._comment create mode 100644 doc/forum/Adding_a_URL_from_wayback_machine.mdwn create mode 100644 doc/forum/Adding_a_URL_from_wayback_machine/comment_1_bc78c24becbf758da7873cdf01e2adc5._comment create mode 100644 doc/forum/Adding_a_URL_from_wayback_machine/comment_2_6df0501b103a7cfcd1eaa4120f7fa818._comment create mode 100644 doc/forum/Adding_a_URL_from_wayback_machine/comment_3_aefbb393c11ab233d145311409d405c7._comment create mode 100644 doc/forum/Adding_a_mounted_network.mdwn create mode 100644 doc/forum/Adding_a_mounted_network/comment_1_9b4bab6177856569adfec26ada6b01cd._comment create mode 100644 doc/forum/Adding_a_mounted_network/comment_2_ae3d4ac918ef002ead859ed0c962ae32._comment create mode 100644 doc/forum/Adding_a_mounted_network/comment_3_559cfec9210f8c86de6ee13de0ec2175._comment create mode 100644 doc/forum/Adding_existing_S3_bucket_to_sync_with.mdwn create mode 100644 doc/forum/Adding_existing_S3_bucket_to_sync_with/comment_1_30b9a70d367dd5b8781e9a86e42d4c3e._comment create mode 100644 doc/forum/Adding_existing_S3_bucket_to_sync_with/comment_2_a8525c1a7e5f89c30c9503fe8bfed02e._comment create mode 100644 doc/forum/Adding_existing_S3_bucket_to_sync_with/comment_3_c3878989f74e740c0ed42f440750f3a4._comment create mode 100644 doc/forum/Adding_existing_S3_bucket_to_sync_with/comment_4_c06cc86496f9d4c0c42a8c89aa5a7b35._comment create mode 100644 doc/forum/Adding_existing_S3_bucket_to_sync_with/comment_5_0a1c2dd0929511ff824be8de2c8d85eb._comment create mode 100644 doc/forum/Adding_existing_S3_bucket_to_sync_with/comment_6_1444c2f89885f028f20a4d3ce225a403._comment create mode 100644 doc/forum/Adding_existing_S3_bucket_to_sync_with/comment_7_1c30944010d541096baff18198a5560d._comment create mode 100644 doc/forum/Adding_files_to_git__58___Very_long___34__recording_state_in_git__34___phase.mdwn create mode 100644 doc/forum/Adding_files_to_git__58___Very_long___34__recording_state_in_git__34___phase/comment_1_67d8488c421da24702fea4c37afe74c3._comment create mode 100644 doc/forum/Adding_files_to_git__58___Very_long___34__recording_state_in_git__34___phase/comment_2_f9fb8b2ad05a17e8451d434c783fc7d7._comment create mode 100644 doc/forum/Adding_files_to_git__58___Very_long___34__recording_state_in_git__34___phase/comment_3_71bbf490cfa2cbfab322aab865d93261._comment create mode 100644 doc/forum/Adding_files_to_git__58___Very_long___34__recording_state_in_git__34___phase/comment_4_66dbcc3600c1df2df03896935dfce9c0._comment create mode 100644 doc/forum/Adding_files_to_git__58___Very_long___34__recording_state_in_git__34___phase/comment_5_665bdcd79b486f8d2604eb6de5c10b2b._comment create mode 100644 doc/forum/Adding_files_to_git__58___Very_long___34__recording_state_in_git__34___phase/comment_6_cf89b44d67752edabfbf577d1212e7ad._comment create mode 100644 doc/forum/Adding_files_to_git__58___Very_long___34__recording_state_in_git__34___phase/comment_7_a4e2f0e65a9dc92fc4dd85183e8f8090._comment create mode 100644 doc/forum/Adding_files_with_wildcard_on_Mac_Yosemite.mdwn create mode 100644 doc/forum/Adding_files_with_wildcard_on_Mac_Yosemite/comment_1_e0784676aab3388254cdc9e7dd2d97e7._comment create mode 100644 doc/forum/Adding_files_with_wildcard_on_Mac_Yosemite/comment_2_d9a7d2669d1524cab71e7e3139631f2a._comment create mode 100644 doc/forum/Adding_files_with_wildcard_on_Mac_Yosemite/comment_3_a0fdcd19954a38141b1dc2a51638ba30._comment create mode 100644 doc/forum/Adding_files_with_wildcard_on_Mac_Yosemite/comment_3_bc36d8f7b1d4d475018a236f71d06bb5._comment create mode 100644 doc/forum/Adding_files_with_wildcard_on_Mac_Yosemite/comment_5_a02c3cd804c2f6fd80d8839cc5c81af4._comment create mode 100644 doc/forum/Adding_files_with_wildcard_on_Mac_Yosemite/comment_6_703ecd8e1dfc5b5b58655e27c9db838a._comment create mode 100644 doc/forum/Adding_files_with_wildcard_on_Mac_Yosemite/comment_7_dbe40fef2ba65cc0f1c20f41f2daab4d._comment create mode 100644 doc/forum/Adding_files_with_wildcard_on_Mac_Yosemite/comment_8_d8620ce7b3dbb81c0d3d0b09ded1deb0._comment create mode 100644 doc/forum/Adding_files_with_wildcard_on_Mac_Yosemite/comment_9_6a43f52449c4a38a986772ec9d65f9d5._comment create mode 100644 doc/forum/Adding_normal___40__non-annexed__41___files_in_Windows.mdwn create mode 100644 doc/forum/Adding_normal___40__non-annexed__41___files_in_Windows/comment_1_e40e129fbdae305ad48f810c578fa69f._comment create mode 100644 doc/forum/Adding_normal___40__non-annexed__41___files_in_Windows/comment_2_3f2556b0a0cd8b7523aed1bea1be8484._comment create mode 100644 doc/forum/Adding_normal___40__non-annexed__41___files_in_Windows/comment_3_d50b99393009ba4adf2040f1d5d5078b._comment create mode 100644 doc/forum/Adding_public_key_to_hybrid_encrypted_repo_causes___34__remote_already_exists__34___error.mdwn create mode 100644 doc/forum/Adding_public_key_to_hybrid_encrypted_repo_causes___34__remote_already_exists__34___error/comment_1_fe2f0e7a4688865faf21c2c0467852b7._comment create mode 100644 doc/forum/Adding_selected_big_binaries_recursively.mdwn create mode 100644 doc/forum/Adding_selected_big_binaries_recursively/comment_1_6ff6031a5a44caf17f36c3569cca5512._comment create mode 100644 doc/forum/Adding_selected_big_binaries_recursively/comment_2_872bef6902ddb362b62d5e9ec1afe864._comment create mode 100644 doc/forum/Adding_selected_big_binaries_recursively/comment_3_4be5ca7a22db19a3152b54bee943f58c._comment create mode 100644 doc/forum/Adding_selected_big_binaries_recursively/comment_4_83b62738f79c434f5a2cacc9316e5d2b._comment create mode 100644 doc/forum/Adding_the_same_content_under_different_file_names.mdwn create mode 100644 doc/forum/Adding_the_same_content_under_different_file_names/comment_1_7c659668f62577612eaf8f463383a185._comment create mode 100644 doc/forum/Adding_the_same_content_under_different_file_names/comment_2_217052fe47822f73ffc765afd6386a7e._comment create mode 100644 doc/forum/Advice_needed__58___git-annex_slows_down_my_macbook.mdwn create mode 100644 doc/forum/Advice_needed__58___git-annex_slows_down_my_macbook/comment_1_af8ab0a47cd379fcb1445e50782ad086._comment create mode 100644 doc/forum/Advice_needed__58___git-annex_slows_down_my_macbook/comment_2_a7202bcbdda36a3801833d2432db1965._comment create mode 100644 doc/forum/All_repos_on_same_filesystem.mdwn create mode 100644 doc/forum/All_repos_on_same_filesystem/comment_1_a6666a89f62dc7e2d40e028782e5a25a._comment create mode 100644 doc/forum/Alternative_modes_for_annex_repos.mdwn create mode 100644 doc/forum/Alternative_to_Tor_for_remote_pairing__63__.mdwn create mode 100644 doc/forum/Alternative_to_Tor_for_remote_pairing__63__/comment_1_39417a8bd5e6834041d759ea3666d894._comment create mode 100644 doc/forum/Alternative_to_XMPP_on_Windows__63__.mdwn create mode 100644 doc/forum/Alternative_to_XMPP_on_Windows__63__/comment_1_4084abf5b26fcc92e577eea34c331a15._comment create mode 100644 doc/forum/Alternative_to_git_annex_copy_which_is_as_fast_as_git_annex_get.mdwn create mode 100644 doc/forum/Alternative_to_git_annex_copy_which_is_as_fast_as_git_annex_get/comment_1_7f62ed07749308a46f0028a9586a10a4._comment create mode 100644 doc/forum/Alternative_to_git_annex_copy_which_is_as_fast_as_git_annex_get/comment_2_a0c58c65091f36b426e016c700ec2f1c._comment create mode 100644 doc/forum/Alternative_to_git_annex_copy_which_is_as_fast_as_git_annex_get/comment_3_102047d2676af0bc62791fa0f18ac49f._comment create mode 100644 doc/forum/Alternative_to_git_annex_copy_which_is_as_fast_as_git_annex_get/comment_4_717078ebeb3b69dd9c52c8abe457824a._comment create mode 100644 doc/forum/Alternative_to_git_annex_copy_which_is_as_fast_as_git_annex_get/comment_5_0630abbcb27e1f9dc5e9269b09a99b09._comment create mode 100644 doc/forum/Always_sync_all_content_to_remote.mdwn create mode 100644 doc/forum/Always_sync_all_content_to_remote/comment_1_241c19cad6249fbd0832c76028c8b373._comment create mode 100644 doc/forum/Always_sync_all_content_to_remote/comment_4_3eda671cea0f8869f1aac0194cae7146._comment create mode 100644 doc/forum/Ambigous_argument___40__unknown_revision_or_path__41__.mdwn create mode 100644 doc/forum/Ambiguous_repo_names__63__.mdwn create mode 100644 doc/forum/Ambiguous_repo_names__63__/comment_1_9695c42113ad6c873b1eae1c1f04e70a._comment create mode 100644 doc/forum/Android_-_ext3__47__4__47__....mdwn create mode 100644 doc/forum/Android__58___Cabal_hell.mdwn create mode 100644 doc/forum/Android__58___Cabal_hell/comment_1_34e869c1092f2885f54f627fb77a6057._comment create mode 100644 doc/forum/Android__58___Cabal_hell/comment_2_ed5b2b37d37278458fdf2dc37539e741._comment create mode 100644 doc/forum/Android__58___Cabal_hell/comment_3_fe71aa84ed5e1bb1e19a7d0f4e42eccd._comment create mode 100644 doc/forum/Android__58___Cabal_hell/comment_4_da004cee7c0cf5617291dbd520af2e96._comment create mode 100644 doc/forum/Android__58___Cabal_hell/comment_5_12e2cb09ac2ee07b392cd9be064a3cbe._comment create mode 100644 doc/forum/Android__58___Encrypted_Remotes__63__.mdwn create mode 100644 doc/forum/Android__58___Encrypted_Remotes__63__/comment_1_6b16cd372a9bd4f99d4c8b09a82ce3ed._comment create mode 100644 doc/forum/Android__58___git_annex_sync_--content_not_run_in_all_repos__63__.mdwn create mode 100644 doc/forum/Android__58___git_annex_sync_--content_not_run_in_all_repos__63__/comment_1_aff6a984ab076433fbce32bacae6660e._comment create mode 100644 doc/forum/Android__58___git_annex_sync_--content_not_run_in_all_repos__63__/comment_2_5b1565955ed88554e5ef4a00c0f4a754._comment create mode 100644 doc/forum/Android__58___is_constant_high_cpu_usage_to_be_expected__63__.mdwn create mode 100644 doc/forum/Android__58___is_constant_high_cpu_usage_to_be_expected__63__/comment_1_7880fc38792a1fcbf3e5c47e8bcaabce._comment create mode 100644 doc/forum/Android__58___is_constant_high_cpu_usage_to_be_expected__63__/comment_2_840fbce18b4fdec21ee557fdf52c366e._comment create mode 100644 doc/forum/Android__58___repository_is_not_initialized_for_use_by_.mdwn create mode 100644 doc/forum/Android__58___repository_is_not_initialized_for_use_by_/comment_1_ef3dbc83f24f00c49b7d7cf626af44aa._comment create mode 100644 doc/forum/Android__58___repository_is_not_initialized_for_use_by_/comment_2_719abfa1dc9a64b1245376dedbccca6e._comment create mode 100644 doc/forum/Android__58___repository_is_not_initialized_for_use_by_/comment_3_027130ce7e8a56551e1d16cbbae6d115._comment create mode 100644 doc/forum/Android__58___repository_is_not_initialized_for_use_by_/comment_4_99d78dca3534c4d54f6925a095f1d43f._comment create mode 100644 doc/forum/Android__58___unusably_slow_with_moderately_sized_repositories.mdwn create mode 100644 doc/forum/Android__58___unusably_slow_with_moderately_sized_repositories/comment_3_c5c655ee3ec2501c1c3c60fd83574914._comment create mode 100644 doc/forum/Android___34__Bad_system_call__34__.mdwn create mode 100644 doc/forum/Android___34__Bad_system_call__34__/comment_1_d53c57d0f42e3eb5efd6ff5d47b73698._comment create mode 100644 doc/forum/Android___34__Bad_system_call__34__/comment_2_74a33b262400ed74a7e0e3bbeac651d5._comment create mode 100644 doc/forum/Android___34__Bad_system_call__34__/comment_3_818a652075a2e283e0be57a11e10a14b._comment create mode 100644 doc/forum/Android_version_does_not_sync.mdwn create mode 100644 doc/forum/Android_version_does_not_sync/comment_1_ed9e33eef2c6d651847dca9d3f7a63f6._comment create mode 100644 doc/forum/Android_version_does_not_sync/comment_2_4eafd3e989611f835c489b379bd6ec8a._comment create mode 100644 doc/forum/Android_version_does_not_sync/comment_3_2a4efec37015ea44509e7ed16b36a72d._comment create mode 100644 doc/forum/Android_version_does_not_sync/comment_4_1ad06842dd96be14e66cde67f32d50f8._comment create mode 100644 doc/forum/Annex_contents_just_disappeared__63__.mdwn create mode 100644 doc/forum/Annex_contents_just_disappeared__63__/comment_1_4ab5ca00f912c0c95fabc10f2d9600d3._comment create mode 100644 doc/forum/Annex_contents_just_disappeared__63__/comment_2_657f737c5d64d440aa133ddb41408fbc._comment create mode 100644 doc/forum/Annex_contents_just_disappeared__63__/comment_3_9b4c35feb14b37d43d053d7430da9abf._comment create mode 100644 doc/forum/Annex_contents_just_disappeared__63__/comment_4_c3625409652bff5f2165260803269a8a._comment create mode 100644 doc/forum/Annex_dropping_files.mdwn create mode 100644 doc/forum/Annex_dropping_files/comment_1_62fbea95248fda2ff075b5a8952a728f._comment create mode 100644 doc/forum/Annex_keeps_dropping_content.mdwn create mode 100644 doc/forum/Annex_slow_on_Windows__47__direct_mode.mdwn create mode 100644 doc/forum/Annex_slow_on_Windows__47__direct_mode/comment_1_d80839f4582fc2a6269db31e30e1dbab._comment create mode 100644 doc/forum/Annex_slow_on_Windows__47__direct_mode/comment_2_593e1e01b70a2b6a15ad6bca09a80c7b._comment create mode 100644 doc/forum/Annex_slow_on_Windows__47__direct_mode/comment_3_c4e4c596f31aa97645fe1e1527dc2c31._comment create mode 100644 doc/forum/Annex_slow_on_Windows__47__direct_mode/comment_4_92db0b99ada9af15a5383da41397ebd7._comment create mode 100644 doc/forum/Annex_slow_on_Windows__47__direct_mode/comment_5_3d628c9db9ebdfd5bff92af105c47719._comment create mode 100644 doc/forum/Annex_slow_on_Windows__47__direct_mode/comment_6_db7965fa928c093233769ed52b2fcd43._comment create mode 100644 doc/forum/Annex_slow_on_Windows__47__direct_mode/comment_7_674f52c5e5484207db403b18efc986c6._comment create mode 100644 doc/forum/Annex_v7_repos_and_plain_git_files.mdwn create mode 100644 doc/forum/Annex_v7_repos_and_plain_git_files/comment_1_3bf39b5e6990d4343d9154465d951a77._comment create mode 100644 doc/forum/Annex_v7_repos_and_plain_git_files/comment_2_a0628a013b57c00ea449b40b93edd385._comment create mode 100644 doc/forum/Annex_v7_repos_and_plain_git_files/comment_3_6095eaa58aa298aca72237381f567ffb._comment create mode 100644 doc/forum/Annex_v7_repos_and_plain_git_files/comment_4_fd1a3658ed6f3b6af2297c768b3f1ac2._comment create mode 100644 doc/forum/Annex_v7_repos_and_plain_git_files/comment_5_f47fec91d4ceebe653bc3fb221e2f8df._comment create mode 100644 doc/forum/Annex_v7_repos_and_plain_git_files/comment_6_21648eecfaf9673b25d40327d11f7b59._comment create mode 100644 doc/forum/Any_plan_for___40__official__41___OpenBSD_support__63__.mdwn create mode 100644 doc/forum/Any_plan_for___40__official__41___OpenBSD_support__63__/comment_1_0d87a7d0f6ae556deb999403a2fb5461._comment create mode 100644 doc/forum/Any_plan_for___40__official__41___OpenBSD_support__63__/comment_2_c7fc9be88dad09f71774664b233bc8a3._comment create mode 100644 doc/forum/Any_plan_for___40__official__41___OpenBSD_support__63__/comment_3_89330ea5d2754d59766a096e0c35d791._comment create mode 100644 doc/forum/Any_plan_for___40__official__41___OpenBSD_support__63__/comment_4_4cfc6b550dfb24c8468df97428d2cf8a._comment create mode 100644 doc/forum/Any_plan_for___40__official__41___OpenBSD_support__63__/comment_5_82ce026c2dc9627ca2f1563caedfa458._comment create mode 100644 doc/forum/Any_plan_for___40__official__41___OpenBSD_support__63__/comment_6_dfca53829fbe845f7f56e35638faf9fc._comment create mode 100644 doc/forum/Any_way_to_add_a_folder_called___34__.git__34___to_git-annex__63__.mdwn create mode 100644 doc/forum/Any_way_to_add_a_folder_called___34__.git__34___to_git-annex__63__/comment_1_51f4392e718d857e2f155d6217727a53._comment create mode 100644 doc/forum/Any_way_to_add_a_folder_called___34__.git__34___to_git-annex__63__/comment_2_9698c4a8f0d8785ee89a6228e0e85ca9._comment create mode 100644 doc/forum/Apple_M1_Silicon.mdwn create mode 100644 doc/forum/Apple_M1_Silicon/comment_10_5646c616f1897c797ce383f6d4210ce4._comment create mode 100644 doc/forum/Apple_M1_Silicon/comment_11_72129be313d82db95d4fe109793fc3fc._comment create mode 100644 doc/forum/Apple_M1_Silicon/comment_12_b62bcd53f260613fc9043008f0e9df19._comment create mode 100644 doc/forum/Apple_M1_Silicon/comment_13_c4ea06ee4c929f171eb6eaea0947bfe7._comment create mode 100644 doc/forum/Apple_M1_Silicon/comment_14_540e6d6f579174bb953824817f5822aa._comment create mode 100644 doc/forum/Apple_M1_Silicon/comment_1_e2aaf539d43951a20ea48d827082fe83._comment create mode 100644 doc/forum/Apple_M1_Silicon/comment_2_eeed553a1684f0b4ed07e5a7de62db5f._comment create mode 100644 doc/forum/Apple_M1_Silicon/comment_3_bed7d9e5565c6bb462e2ba8f4d815725._comment create mode 100644 doc/forum/Apple_M1_Silicon/comment_4_07c410bacefa5da582ce2064ef345def._comment create mode 100644 doc/forum/Apple_M1_Silicon/comment_5_2efc89b2c4f3ff408ccd015f297d743b._comment create mode 100644 doc/forum/Apple_M1_Silicon/comment_6_0fc6e261c00f1df8698c92c8de6f3a27._comment create mode 100644 doc/forum/Apple_M1_Silicon/comment_7_c60e046cb8b138aee16af2d4c66c803c._comment create mode 100644 doc/forum/Apple_M1_Silicon/comment_8_4620929361fb5ad8faea15ed3905d67f._comment create mode 100644 doc/forum/Apple_M1_Silicon/comment_9_d77519ba5ca217cb3ec6348567731b9d._comment create mode 100644 doc/forum/Archive_USB_drive_not_working_as_documented.mdwn create mode 100644 doc/forum/Archive_USB_drive_not_working_as_documented/comment_1_59de1e101e5e427abb1df3a71c6f1b04._comment create mode 100644 doc/forum/Archive_USB_drive_not_working_as_documented/comment_2_3541fdd31d398a494a8fa452ac2c277f._comment create mode 100644 doc/forum/Assistance_required_for_a_specific_workflow.mdwn create mode 100644 doc/forum/Assistance_required_for_a_specific_workflow/comment_1_7c803b6f2759f6fa74c514e79a26f369._comment create mode 100644 doc/forum/Assistance_required_for_a_specific_workflow/comment_2_4a00c4307a492ffe736cf981ced9f57a._comment create mode 100644 doc/forum/Assistant_-_pausing___47___using_lock_file_to_get_atomic__40__ish__41___states__63__.mdwn create mode 100644 doc/forum/Assistant_-_pausing___47___using_lock_file_to_get_atomic__40__ish__41___states__63__/comment_1_44c97c54066ca0487d8903cc01a356a3._comment create mode 100644 doc/forum/Assistant_-_pausing___47___using_lock_file_to_get_atomic__40__ish__41___states__63__/comment_2_98eb671596e84466e24004f55724660a._comment create mode 100644 doc/forum/Assistant_-_pausing___47___using_lock_file_to_get_atomic__40__ish__41___states__63__/comment_3_e3c506ae998a8ae681727d3c432f95d2._comment create mode 100644 doc/forum/Assistant_Droping_Files.mdwn create mode 100644 doc/forum/Assistant__58___configure_auto-sync.mdwn create mode 100644 doc/forum/Assistant__58___configure_auto-sync/comment_1_c8cabd38114582bbdbad49f2d81959d7._comment create mode 100644 doc/forum/Assistant__58___run_with___34__sync_--fast__34___to_automatically_use_only_available_remotes.mdwn create mode 100644 doc/forum/Assistant_fails_to_authenticate_to_rsync_remote.mdwn create mode 100644 doc/forum/Assistant_fails_to_authenticate_to_rsync_remote/comment_1_fdbadd7ae4c0236301944136ac62346a._comment create mode 100644 doc/forum/Assistant_fails_to_authenticate_to_rsync_remote/comment_2_a395406abd3eb4cf07dc6467506a7e77._comment create mode 100644 doc/forum/Assistant_in_windows_only_watches_one_repo_on_startup.mdwn create mode 100644 doc/forum/Assistant_in_windows_only_watches_one_repo_on_startup/comment_1_48b43fe2ec186cea5930bf641522081d._comment create mode 100644 doc/forum/Assistant_invariants.mdwn create mode 100644 doc/forum/Assistant_invariants/comment_1_0426e10ffe45f42658d89756ea5ef5be._comment create mode 100644 doc/forum/Assistant_invariants/comment_2_7d3990582435203e0f94a8a3a2f1ef5a._comment create mode 100644 doc/forum/Assistant_loosing_advantages__63__.mdwn create mode 100644 doc/forum/Assistant_loosing_advantages__63__/comment_1_cdbc827d9e00aeeaefafe45de64b8d2c._comment create mode 100644 doc/forum/Assistant_not_syncing_to_Rsync.mdwn create mode 100644 doc/forum/Assistant_not_syncing_to_Rsync/comment_1_2178a7fc0d66643e84597b0938ef65f2._comment create mode 100644 doc/forum/Assistant_not_syncing_to_Rsync/comment_2_650651398443e128c2adc6a2a2d320d0._comment create mode 100644 doc/forum/Assistant_not_syncing_to_Rsync/comment_3_e6d0c9620b148acc72342862a8b4cfef._comment create mode 100644 doc/forum/Assistant_not_syncing_to_Rsync/comment_4_b91f9febdb8b69d8b487ba4ea08c119a._comment create mode 100644 doc/forum/Assistant_not_syncing_to_Rsync/comment_5_c5ad7c1546a17d8459c995c9c8c26414._comment create mode 100644 doc/forum/Assistant_not_syncing_to_Rsync/comment_6_4c12587f972eced91c5128d4885800b5._comment create mode 100644 doc/forum/Assistant_not_syncing_to_Rsync/comment_7_6ecaaee9316bcf0c65688676d60fc055._comment create mode 100644 doc/forum/Assistant_not_syncing_to_Rsync/comment_8_daa9a9a6188afa0394833e1b682f7cd4._comment create mode 100644 doc/forum/Attempting_to_repair_fails_with_everincreasing_deltas.mdwn create mode 100644 doc/forum/Attempting_to_repair_fails_with_everincreasing_deltas/comment_1_a8effe196e4a040630d183803768c5a1._comment create mode 100644 doc/forum/Attempting_to_repair_fails_with_everincreasing_deltas/comment_2_9f032e43b132bcad656e1337ab2551ad._comment create mode 100644 doc/forum/Attempting_to_repair_fails_with_everincreasing_deltas/comment_3_5a09f65c77dce3c62236c13aa90a1191._comment create mode 100644 doc/forum/Auto_archiving.mdwn create mode 100644 doc/forum/Auto_ignore_non-reachable_repo.mdwn create mode 100644 doc/forum/Auto_ignore_non-reachable_repo/comment_1_40d7aab5e43c75ede3414ed48f0c7066._comment create mode 100644 doc/forum/Auto_ignore_non-reachable_repo/comment_2_74c297d8d5e9f7d131c461ed5e803071._comment create mode 100644 doc/forum/Auto_sync_with_music_player.mdwn create mode 100644 doc/forum/Auto_sync_with_music_player/comment_1_81ad1c15cfd753531c01dae8945d1caf._comment create mode 100644 doc/forum/Auto_sync_with_music_player/comment_2_a15e3f298c3d3faa5b3295355f9bb794._comment create mode 100644 doc/forum/Auto_sync_with_music_player/comment_3_99f65a0efaf5d5f9b8ff530acc122860._comment create mode 100644 doc/forum/Auto_update_not_working.mdwn create mode 100644 doc/forum/Automatic___96__git_annex_get__96___after_invalidation_of_local_files_due_to_external_modification__63__.mdwn create mode 100644 doc/forum/Automatic___96__git_annex_get__96___after_invalidation_of_local_files_due_to_external_modification__63__/comment_1_dab1099ee56541c194de319c593f1268._comment create mode 100644 doc/forum/Automatic___96__git_annex_get__96___after_invalidation_of_local_files_due_to_external_modification__63__/comment_2_b5faccf132fb47e3cda778a6600fd9ef._comment create mode 100644 doc/forum/Automatic_commit_messages_for_git_annex_sync.mdwn create mode 100644 doc/forum/Automatic_commit_messages_for_git_annex_sync/comment_1_ea2ec57bc695da4df8a30a35d433959d._comment create mode 100644 doc/forum/Automatic_commit_messages_for_git_annex_sync/comment_2_af71f53dbbca35d5a5c66ff131887ada._comment create mode 100644 doc/forum/Automatically_dropping_files.mdwn create mode 100644 doc/forum/Automatically_dropping_files/comment_1_f5fc608f9cb0edf3272b586b62050637._comment create mode 100644 doc/forum/Automatically_syncronise_centralised_repository.mdwn create mode 100644 doc/forum/Automatically_syncronise_centralised_repository/comment_1_6a2047daa9faf4309d2ed27d5cc48b76._comment create mode 100644 doc/forum/Automatically_syncronise_centralised_repository/comment_2_3be7b45bc2284019f17a81375637a576._comment create mode 100644 doc/forum/Autostart_the_assistant.mdwn create mode 100644 doc/forum/Autostart_the_assistant/comment_1_a5421711102fb1649d98d916e5ced86b._comment create mode 100644 doc/forum/Autostart_the_assistant/comment_2_df70bd0f5caab43503a3c9d805323289._comment create mode 100644 doc/forum/Autostart_the_assistant/comment_3_42de896f64adb49c60ec3f7e0aeebda6._comment create mode 100644 doc/forum/Autostart_the_assistant/comment_4_5c6e085b1077b0792a1805f032ac6a4b._comment create mode 100644 doc/forum/Back_up_videos_to_youtube__63__.mdwn create mode 100644 doc/forum/Back_up_videos_to_youtube__63__/comment_1_e81f72bfe678e2aceded518338be1473._comment create mode 100644 doc/forum/Back_up_videos_to_youtube__63__/comment_2_6cb19f9c371d7cb046302ed193c77489._comment create mode 100644 doc/forum/Back_up_videos_to_youtube__63__/comment_3_ccb5cb5fe520b3f2a4822d85c246296f._comment create mode 100644 doc/forum/Back_up_videos_to_youtube__63__/comment_4_303b4f755dd117f8b22c98669e7bf932._comment create mode 100644 doc/forum/Backend_migration_and_special_remotes.mdwn create mode 100644 doc/forum/Backend_migration_and_special_remotes/comment_1_cf6d45c43b14719fc5ea41d0cbfb612d._comment create mode 100644 doc/forum/Backing_up_photos_to_the_cloud.mdwn create mode 100644 doc/forum/Backup_of_git-annex_repos.mdwn create mode 100644 doc/forum/Backup_of_git-annex_repos/comment_1_ed90e524606e394f7669fcba10846930._comment create mode 100644 doc/forum/Backup_of_whole_Linux_system.mdwn create mode 100644 doc/forum/Backup_of_whole_Linux_system/comment_1_bf48d93872bfadb5daaf02a10e699b79._comment create mode 100644 doc/forum/Backup_of_whole_Linux_system/comment_2_af49edff9174c2ee17391e78ac97d5f3._comment create mode 100644 doc/forum/Balanced_Parity.mdwn create mode 100644 doc/forum/Bare_repo_on_USB_drive_not_providing_files.mdwn create mode 100644 doc/forum/Bare_repo_on_USB_drive_not_providing_files/comment_1_0738174fb6984b777ec0a221502106ac._comment create mode 100644 doc/forum/Bare_repo_on_USB_drive_not_providing_files/comment_2_1e07d1a9ddb88c0e1d84d8d88b7b4cc4._comment create mode 100644 doc/forum/Bare_repo_on_USB_drive_not_providing_files/comment_2_65d007284287e709a8f6f07dd8630f15._comment create mode 100644 doc/forum/Bare_repo_on_USB_drive_not_providing_files/comment_4_3bbce5d12ece481b669be10ef9a70f40._comment create mode 100644 doc/forum/Bare_repo_on_USB_drive_not_providing_files/comment_5_5e6202c319e75a9758bb8c2f32152e0f._comment create mode 100644 doc/forum/Basic_set_up_with_one_remote.mdwn create mode 100644 doc/forum/Basic_set_up_with_one_remote/comment_1_3ad06a0dbebf62e6440f549e77af59b6._comment create mode 100644 doc/forum/Basic_set_up_with_one_remote/comment_2_59e18e759c907b8adabf8c34eef08065._comment create mode 100644 doc/forum/Basic_set_up_with_one_remote/comment_3_5221a713ee3f65fa2740c9fa6cb1db0f._comment create mode 100644 doc/forum/Basic_set_up_with_one_remote/comment_4_62e554a546e4b50d211f5f65446fd289._comment create mode 100644 doc/forum/Batch_process__44___git_rm__44___and_locking.mdwn create mode 100644 doc/forum/Batch_process__44___git_rm__44___and_locking/comment_1_6cb866b48f6426e7ecc4f8d6af5b710d._comment create mode 100644 doc/forum/Batch_process__44___git_rm__44___and_locking/comment_2_51667179ddb52ca5fa1166196c5d37e2._comment create mode 100644 doc/forum/Batch_process__44___git_rm__44___and_locking/comment_3_593879cc70e9a07a49fa663677f5c045._comment create mode 100644 doc/forum/Beginners_questions__58___limit_content_on_special_remotes___38___use_non-git_clients_for_r__47__w_access_on_shared_git-annex_server.mdwn create mode 100644 doc/forum/Beginners_questions__58___limit_content_on_special_remotes___38___use_non-git_clients_for_r__47__w_access_on_shared_git-annex_server/comment_1_871b5a42f1134a059df520993bb55268._comment create mode 100644 doc/forum/Beginners_questions__58___limit_content_on_special_remotes___38___use_non-git_clients_for_r__47__w_access_on_shared_git-annex_server/comment_2_68d675096d9ea32780b8ec8526544b12._comment create mode 100644 doc/forum/Behaviour_of_fsck.mdwn create mode 100644 doc/forum/Behaviour_of_fsck/comment_1_0e40f158b3f4ccdcaab1408d858b68b8._comment create mode 100644 doc/forum/Behaviour_of_fsck/comment_2_ead36a23c3e6efa1c41e4555f93e014e._comment create mode 100644 doc/forum/Behaviour_of_fsck/comment_3_97848f9a3db89c0427cfb671ba13300e._comment create mode 100644 doc/forum/Behaviour_of_fsck/comment_4_e4911dc6793f98fb81151daacbe49968._comment create mode 100644 doc/forum/Benefit_and_drawback_of_new_unlocked_file_mode_V6_vs_locked_mode.mdwn create mode 100644 doc/forum/Benefit_and_drawback_of_new_unlocked_file_mode_V6_vs_locked_mode/comment_1_fef0122752291bdc583fdcfdd400d250._comment create mode 100644 doc/forum/Best_approach_for_central_sharing_and_multiple_users.mdwn create mode 100644 doc/forum/Best_approach_for_central_sharing_and_multiple_users/comment_1_48ffb50b92588daec6887bf08f1b97f5._comment create mode 100644 doc/forum/Best_approach_for_central_sharing_and_multiple_users/comment_2_6b9a20f9707da9d2cfc3697a538d6935._comment create mode 100644 doc/forum/Best_option_for_dropable_compression_+_encryption.mdwn create mode 100644 doc/forum/Best_option_for_dropable_compression_+_encryption/comment_1_1d55eb39e46eee8c5dd6e142e71289ad._comment create mode 100644 doc/forum/Best_option_for_dropable_compression_+_encryption/comment_2_704eed4d3607ebbfc9c6f5c64e7a1507._comment create mode 100644 doc/forum/Best_way_to_extract_git-annex_object_files___40__with_correct_names__41___in_absence_of_git_log.mdwn create mode 100644 doc/forum/Best_way_to_extract_git-annex_object_files___40__with_correct_names__41___in_absence_of_git_log/comment_1_a1827481a3ac140d58a4184121328d87._comment create mode 100644 doc/forum/Best_way_to_manage_files_on_removable_media__63__.mdwn create mode 100644 doc/forum/Best_way_to_re-add_a_file_in_a_direct_and_crippled_annex_repository.mdwn create mode 100644 doc/forum/Best_way_to_re-add_a_file_in_a_direct_and_crippled_annex_repository/comment_1_552e74f9573a34ec178f396b83252c3e._comment create mode 100644 doc/forum/Best_way_to_re-add_a_file_in_a_direct_and_crippled_annex_repository/comment_2_33c57922714f204fc63c260b838f3712._comment create mode 100644 doc/forum/Best_way_to_remove_old_version_of_specific_file.mdwn create mode 100644 doc/forum/Best_way_to_remove_old_version_of_specific_file/comment_1_1663dd9118cb1fee92ae3f8d812df79c._comment create mode 100644 doc/forum/Best_way_to_remove_old_version_of_specific_file/comment_2_6580f6790404694b55d07a0e57d83336._comment create mode 100644 doc/forum/Best_way_to_remove_old_version_of_specific_file/comment_3_c1f34ec908d7c4ad05c4360e29e68fb4._comment create mode 100644 doc/forum/Best_way_to_remove_old_version_of_specific_file/comment_4_160011717157fa8fca3a33b543c4d28d._comment create mode 100644 doc/forum/Best_way_to_remove_old_version_of_specific_file/comment_5_dfec54344742e2c8d6904333ff848c8c._comment create mode 100644 doc/forum/Best_way_to_remove_old_version_of_specific_file/comment_6_e854d6b778bcb7dc1578cbc9c8fcaa42._comment create mode 100644 doc/forum/Big_repository_vs._multiple_small.mdwn create mode 100644 doc/forum/Big_repository_vs._multiple_small/comment_1_8e21ee3c674ef6e595bdab53dd5c2356._comment create mode 100644 doc/forum/Big_repository_vs._multiple_small/comment_2_656c62351502492d20e8490242e51169._comment create mode 100644 doc/forum/Big_repository_vs._multiple_small/comment_3_e9c44ea364513f090844f46af2ea46a1._comment create mode 100644 doc/forum/Big_repository_vs._multiple_small/comment_4_82e13580426dc648688e4c26e7ed91ec._comment create mode 100644 doc/forum/Big_repository_vs._multiple_small/comment_5_632aceb71dc6a4a9a4bb03de25a9b21a._comment create mode 100644 doc/forum/Bitbucket_gcrypt_repository_doesn__39__t_appear_in_the_Assistant.mdwn create mode 100644 doc/forum/Bitbucket_gcrypt_repository_doesn__39__t_appear_in_the_Assistant/comment_1_239ae08d8eb8b0d7fe52991b0bddc653._comment create mode 100644 doc/forum/Bitbucket_gcrypt_repository_doesn__39__t_appear_in_the_Assistant/comment_2_8b91328473b384f347710ec634be710a._comment create mode 100644 doc/forum/Bitbucket_gcrypt_repository_doesn__39__t_appear_in_the_Assistant/comment_3_12a6bc61a7492650fd2baf9a1b796997._comment create mode 100644 doc/forum/Blacklisting_files___40__so_that_they_get_removed_any_time_a_copy_is_found__41__.mdwn create mode 100644 doc/forum/Blacklisting_files___40__so_that_they_get_removed_any_time_a_copy_is_found__41__/comment_1_a224bf8ed9502053e9b95317db7b4bfa._comment create mode 100644 doc/forum/Blacklisting_files___40__so_that_they_get_removed_any_time_a_copy_is_found__41__/comment_2_0f2e7cf29ad9d41e0041924e69425050._comment create mode 100644 doc/forum/Blacklisting_files___40__so_that_they_get_removed_any_time_a_copy_is_found__41__/comment_3_a2cac051ef2d36e1ffb550c4a788c111._comment create mode 100644 doc/forum/Blacklisting_files___40__so_that_they_get_removed_any_time_a_copy_is_found__41__/comment_4_d95647d91a33d1164a87344939cb769a._comment create mode 100644 doc/forum/Borg_and_xattrs.mdwn create mode 100644 doc/forum/Borg_and_xattrs/comment_1_703c9a9be1e0b0ca9ce4dd0309546a04._comment create mode 100644 doc/forum/Borg_and_xattrs/comment_2_a1f4e0758c3e02f4f8558d167a26c0c4._comment create mode 100644 doc/forum/Box.com_hasn__39__t_been_working_for_a_few_days.mdwn create mode 100644 doc/forum/Box.com_hasn__39__t_been_working_for_a_few_days/comment_1_6ca872c241399b9129cf9a18f42ebd43._comment create mode 100644 doc/forum/Broken_symlinks_remain_after_drop.mdwn create mode 100644 doc/forum/Broken_symlinks_remain_after_drop/comment_1_d4a59b9e58d43d7a3d437e521dd5c4e1._comment create mode 100644 doc/forum/Broken_symlinks_remain_after_drop/comment_2_399ba969a17a41a022c69a1f7c480857._comment create mode 100644 doc/forum/Building_Android_app_fails.mdwn create mode 100644 doc/forum/Building_Android_app_fails/comment_1_094b90cbc1e2e069900c0037fec145ad._comment create mode 100644 doc/forum/Building_a_Debian_package_of_git-annex.mdwn create mode 100644 doc/forum/Building_a_Debian_package_of_git-annex/comment_1_0848513c46f3efa21bc34784554ae88a._comment create mode 100644 doc/forum/Building_git-annex-3.20121112-19309.mdwn create mode 100644 doc/forum/Building_git-annex-3.20121112-19309/comment_1_b115e28c77fe748ee6643c41f766beb4._comment create mode 100644 doc/forum/Building_git-annex-3.20121112-19309/comment_2_8c6ae1fd74f14da12ccfa77dbd27fc65._comment create mode 100644 doc/forum/Building_git-annex-3.20121112-19309/comment_3_2f30b301c14f3a7fa0f52715d6140353._comment create mode 100644 doc/forum/Building_git-annex-3.20121112-19309/comment_4_1e3c3903a71a2ff7109372aa4dd5742a._comment create mode 100644 doc/forum/CD-R_as_special_remote.mdwn create mode 100644 doc/forum/CD-R_as_special_remote/comment_1_e5d6d72953575d2bbfb6c620bb4c9454._comment create mode 100644 doc/forum/Cabal__58___Could_not_resolve_dependencies___40__yesod__41__.mdwn create mode 100644 doc/forum/Cabal__58___Could_not_resolve_dependencies___40__yesod__41__/comment_1_2eb4f410b54a25fcc895893a3c631c43._comment create mode 100644 doc/forum/Cabal__58___Could_not_resolve_dependencies___40__yesod__41__/comment_2_44cd6f6dd674df105d6f0b3f320f3236._comment create mode 100644 doc/forum/Cabal__58___Could_not_resolve_dependencies___40__yesod__41__/comment_3_992af6855901df79a2018a07941cb8b6._comment create mode 100644 doc/forum/Calculating_Annex_Cost_by_Ping_Times.mdwn create mode 100644 doc/forum/Calculating_Annex_Cost_by_Ping_Times/comment_1_9b4a6bc8d52ecbbdd537e8cf76757a80._comment create mode 100644 doc/forum/Calculating_Annex_Cost_by_Ping_Times/comment_2_7e04f85c6ba74c18c8dde148aef9bf80._comment create mode 100644 doc/forum/Can_I_purge_.git__47__annex__47__transfer_directory___63__.mdwn create mode 100644 doc/forum/Can_I_purge_.git__47__annex__47__transfer_directory___63__/comment_1_3510190e7c5d08f906b24e5743245f87._comment create mode 100644 doc/forum/Can_I_purge_.git__47__annex__47__transfer_directory___63__/comment_2_bfd829aed28817a5aada3f237496c865._comment create mode 100644 doc/forum/Can_I_purge_.git__47__annex__47__transfer_directory___63__/comment_3_cf2ae4db1fdb421b59d85edd9e58b868._comment create mode 100644 doc/forum/Can_I_remove_a_groupwanted_expression__63__.mdwn create mode 100644 doc/forum/Can_I_remove_a_groupwanted_expression__63__/comment_2_23d18b52d87468ffadf0a3e04bf8052d._comment create mode 100644 doc/forum/Can_I_store_normal_files_in_the_git-annex_git_repository__63__.mdwn create mode 100644 doc/forum/Can_I_store_normal_files_in_the_git-annex_git_repository__63__/comment_1_c8f9923d8dc76b8bed25dce5ae09b520._comment create mode 100644 doc/forum/Can_Not_Sync_to_Git_Repo.mdwn create mode 100644 doc/forum/Can_Not_Sync_to_Git_Repo/comment_10_e0f82074eb1a4b8258729d9a23a7f421._comment create mode 100644 doc/forum/Can_Not_Sync_to_Git_Repo/comment_11_842aaf685aa843c21bf3eef0b61f8630._comment create mode 100644 doc/forum/Can_Not_Sync_to_Git_Repo/comment_12_b4f8be428a08db01dbd004e1f06dcffd._comment create mode 100644 doc/forum/Can_Not_Sync_to_Git_Repo/comment_13_45132d348807fbf8ed32198e110d2caa._comment create mode 100644 doc/forum/Can_Not_Sync_to_Git_Repo/comment_14_d2bb44a7607f3b2cddfd98cc2fa456d6._comment create mode 100644 doc/forum/Can_Not_Sync_to_Git_Repo/comment_1_80344c54804ddee81d89c0b40731fb9c._comment create mode 100644 doc/forum/Can_Not_Sync_to_Git_Repo/comment_2_1797c2fef5c20e885b56b8a2c6330ff0._comment create mode 100644 doc/forum/Can_Not_Sync_to_Git_Repo/comment_3_fb23d640f9634cab2da91848f1848627._comment create mode 100644 doc/forum/Can_Not_Sync_to_Git_Repo/comment_4_a947736911e68856f2c3494963063df8._comment create mode 100644 doc/forum/Can_Not_Sync_to_Git_Repo/comment_5_ce0e77143cfd2d578b1e5a71e35060da._comment create mode 100644 doc/forum/Can_Not_Sync_to_Git_Repo/comment_6_10e114da6a2bb54b860b44767ba1ca94._comment create mode 100644 doc/forum/Can_Not_Sync_to_Git_Repo/comment_7_415bab6a7ab564e671f42cfad83e0e58._comment create mode 100644 doc/forum/Can_Not_Sync_to_Git_Repo/comment_8_36abd829ea71a44c7cded1123a7c913d._comment create mode 100644 doc/forum/Can_Not_Sync_to_Git_Repo/comment_9_2fb745aaffe544f97bbdc670261fd4fd._comment create mode 100644 doc/forum/Can__39__t_drop_a_file_present_in_special_remotes_only.mdwn create mode 100644 doc/forum/Can__39__t_drop_a_file_present_in_special_remotes_only/comment_1_e03ec3be310f5c0e02457ac053e6afdd._comment create mode 100644 doc/forum/Can__39__t_drop_a_file_present_in_special_remotes_only/comment_2_1bea8772a170277420faa898dcf2ab83._comment create mode 100644 doc/forum/Can__39__t_drop_a_file_present_in_special_remotes_only/comment_3_c061fef62b272d34b605d94a176cd577._comment create mode 100644 doc/forum/Can__39__t_drop_a_file_present_in_special_remotes_only/comment_4_2f6d31ada3a8f3f43bc53ce9ee2c70b8._comment create mode 100644 doc/forum/Can__39__t_drop_a_file_present_in_special_remotes_only/comment_5_d25b7eb756f08c94a2b2ada472cd0f87._comment create mode 100644 doc/forum/Can__39__t_get_git-annex_merge_to_work_from_git_hook.mdwn create mode 100644 doc/forum/Can__39__t_get_git-annex_merge_to_work_from_git_hook/comment_1_8b71cb6772b219c27c17392d5099907a._comment create mode 100644 doc/forum/Can__39__t_get_git-annex_merge_to_work_from_git_hook/comment_2_af2a2634d8d128868022d033d6adb549._comment create mode 100644 doc/forum/Can__39__t_get_git-annex_merge_to_work_from_git_hook/comment_3_31ec762a0684d2ce87d229ed2924db93._comment create mode 100644 doc/forum/Can__39__t_get_git-annex_merge_to_work_from_git_hook/comment_4_cfa52c727baaf683e91c3fbb1c78072c._comment create mode 100644 doc/forum/Can__39__t_get_jabber_working.mdwn create mode 100644 doc/forum/Can__39__t_get_jabber_working/comment_1_def20bf0b3c1a188e4dad5ec67b455d8._comment create mode 100644 doc/forum/Can__39__t_get_jabber_working/comment_2_7cb49c0ebfec6e0fe6784e189ed65d40._comment create mode 100644 doc/forum/Can__39__t_get_jabber_working/comment_3_852dc402a286e38b77b99f174c33f8d1._comment create mode 100644 doc/forum/Can__39__t_get_jabber_working/comment_4_259741e146906ff70540390bdfe07002._comment create mode 100644 doc/forum/Can__39__t_get_pairing_to_work.mdwn create mode 100644 doc/forum/Can__39__t_get_pairing_to_work/comment_1_b981977b4fb942fd109c37fcf40f35d7._comment create mode 100644 doc/forum/Can__39__t_get_pairing_to_work/comment_2_341e2ff6c88ace1b1422e16781edf580._comment create mode 100644 doc/forum/Can__39__t_get_pairing_to_work/comment_3_0c8cce48f179f2564ff0844bb7ef6bd1._comment create mode 100644 doc/forum/Can__39__t_get_pairing_to_work/comment_4_169d77b30cea05125068ee1eeb2ef328._comment create mode 100644 doc/forum/Can__39__t_get_pairing_to_work/comment_5_70e6c4f4f01277be1767b38ca8374793._comment create mode 100644 doc/forum/Can__39__t_get_pairing_to_work/comment_6_2cd014a76fac6e08269dfd8146957418._comment create mode 100644 doc/forum/Can__39__t_get_pairing_to_work/comment_7_b9b715084d5a5562998b1724699d49e5._comment create mode 100644 doc/forum/Can__39__t_get_some_files_from_bare_repo.mdwn create mode 100644 doc/forum/Can__39__t_get_some_files_from_bare_repo/comment_1_ead60b63efb06249c99202631ef0b247._comment create mode 100644 doc/forum/Can__39__t_get_some_files_from_bare_repo/comment_2_82a5d9005dca476916e4b5df671e3111._comment create mode 100644 doc/forum/Can__39__t_get_some_files_from_bare_repo/comment_3_430c7854e33ff3e821ebd00b436dbf45._comment create mode 100644 doc/forum/Can__39__t_init_git_annex.mdwn create mode 100644 doc/forum/Can__39__t_init_git_annex/comment_10_c4d2ab1ecf69718a2211c3ea7b27092b._comment create mode 100644 doc/forum/Can__39__t_init_git_annex/comment_12_fca9ed3707e097bee2cd642424681005._comment create mode 100644 doc/forum/Can__39__t_init_git_annex/comment_1_a294b5e7e52aa9f66a708866be16f137._comment create mode 100644 doc/forum/Can__39__t_init_git_annex/comment_2_fcf678d5188821d63b4c9ea5b59474a8._comment create mode 100644 doc/forum/Can__39__t_init_git_annex/comment_3_c83f7dea7d5304e226e52eb3c43ef14a._comment create mode 100644 doc/forum/Can__39__t_init_git_annex/comment_4_06a01dd51ffbfd006c0afb8eab40b530._comment create mode 100644 doc/forum/Can__39__t_init_git_annex/comment_5_53c33484bded57abc60f0449331c7b05._comment create mode 100644 doc/forum/Can__39__t_init_git_annex/comment_6_9e0ff44f6e62581bfc83f9f1da3e0100._comment create mode 100644 doc/forum/Can__39__t_init_git_annex/comment_7_7f96b5ef05e2faf4a3dbe8bfc39b810e._comment create mode 100644 doc/forum/Can__39__t_init_git_annex/comment_8_65ab8463716f4ddd7721a5bcfcd18fa0._comment create mode 100644 doc/forum/Can__39__t_init_git_annex/comment_9_31a45f6a72266190b3ed7a7b02e03d5b._comment create mode 100644 doc/forum/Can__39__t_install__58___Mac_OS_10.8.2.mdwn create mode 100644 doc/forum/Can__39__t_install__58___Mac_OS_10.8.2/comment_1_c44023d81e9e4f7c9341af0e4271a1e4._comment create mode 100644 doc/forum/Can__39__t_install__58___Mac_OS_10.8.2/comment_2_dfbcd39eedff28dc9ed866a8f1411ef3._comment create mode 100644 doc/forum/Can__39__t_install__58___Mac_OS_10.8.2/comment_3_b37b2a9906ffb956cca91adb4bb4e521._comment create mode 100644 doc/forum/Can__39__t_install__58___Mac_OS_10.8.2/comment_4_afddf16f8faedc78d458835480f10dc3._comment create mode 100644 doc/forum/Can__39__t_upload_data_to_glacier_remote.mdwn create mode 100644 doc/forum/Can__39__t_upload_data_to_glacier_remote/comment_1_cb18d5d63663f73a343c8972faadc83a._comment create mode 100644 doc/forum/Can__39__t_upload_data_to_glacier_remote/comment_2_9b6a397d1c85da87481d36b8a4bd1ba6._comment create mode 100644 doc/forum/Can__39__t_upload_data_to_glacier_remote/comment_3_6625da96f8cdc8b367b4c2bc275f2aee._comment create mode 100644 doc/forum/Can_a_repo_be_marked_as___34__must_have_file__63____34__.mdwn create mode 100644 doc/forum/Can_a_repo_be_marked_as___34__must_have_file__63____34__/comment_1_14d4d3f84eacc36dcc55af783d189619._comment create mode 100644 doc/forum/Can_a_repo_be_marked_as___34__must_have_file__63____34__/comment_2_409d6a97f5c3d1f1fc5e932a2965e227._comment create mode 100644 doc/forum/Can_git-annex-import_--clean-duplicates_honour_multiple_backends__63__.mdwn create mode 100644 doc/forum/Can_git-annex-import_--clean-duplicates_honour_multiple_backends__63__/comment_1_5730767d5247e8997b4fa5b20c4cb281._comment create mode 100644 doc/forum/Can_git-annex-import_--clean-duplicates_honour_multiple_backends__63__/comment_2_c2846031bd79fa60cd903fb4d5bcebaf._comment create mode 100644 doc/forum/Can_git_annex___40__mostly__41___be_an_Ubuntu_One___40__or_Dropbox...__41___substitute__63__.mdwn create mode 100644 doc/forum/Can_git_annex___40__mostly__41___be_an_Ubuntu_One___40__or_Dropbox...__41___substitute__63__/comment_1_a3fbae205c0312436f8861f432643811._comment create mode 100644 doc/forum/Can_git_annex___40__mostly__41___be_an_Ubuntu_One___40__or_Dropbox...__41___substitute__63__/comment_2_de49cf261c644a6e7f6ac881a48d4e6c._comment create mode 100644 doc/forum/Can_not_delete_Repository.mdwn create mode 100644 doc/forum/Can_not_delete_Repository/comment_1_b1a9420974e2e50c9c86a379ad62502c._comment create mode 100644 doc/forum/Can_not_drop_unused_file.mdwn create mode 100644 doc/forum/Can_not_drop_unused_file/comment_1_cea83dfdf4cdb4f6efb3f2b33a39a51f._comment create mode 100644 doc/forum/Can_not_drop_unused_file/comment_2_ed1543cff5e6e81ca18c43b716ca8199._comment create mode 100644 doc/forum/Can_not_drop_unused_file/comment_3_0c9c9c0ed557af4845a67434c21bb4bc._comment create mode 100644 doc/forum/Can_the_assistant_sync_files_if_committed_manually___40__autocommit__61__false__41____63__.mdwn create mode 100644 doc/forum/Can_the_assistant_sync_files_if_committed_manually___40__autocommit__61__false__41____63__/comment_1_bc838634442883e541de1ceab520d71e._comment create mode 100644 doc/forum/Can_the_assistant_sync_files_if_committed_manually___40__autocommit__61__false__41____63__/comment_2_676a8c3586d16afedff9e47d9ffd7431._comment create mode 100644 doc/forum/Can_the_assistant_sync_files_if_committed_manually___40__autocommit__61__false__41____63__/comment_3_e584a99e46f881358bf848131a94e293._comment create mode 100644 doc/forum/Can_we_have_remotes_that_aren__39__t_tracked__63___.mdwn create mode 100644 doc/forum/Can_we_have_remotes_that_aren__39__t_tracked__63___/comment_1_35e5a963b9e58ed7773dfcb884f8ecbd._comment create mode 100644 doc/forum/Can_we_have_remotes_that_aren__39__t_tracked__63___/comment_2_7cde9785886c8450e1475f0b54481ae3._comment create mode 100644 doc/forum/Can_you_use_git_annex_on_gocryptfs__63__.mdwn create mode 100644 doc/forum/Can_you_use_git_annex_on_gocryptfs__63__/comment_1_3e8c83a9d0a8dbb7a5a3fd25136cf0b4._comment create mode 100644 doc/forum/Can_you_use_git_annex_on_gocryptfs__63__/comment_2_9a46e613745c8c80dedce6a3cd799e0b._comment create mode 100644 doc/forum/Can_you_use_git_annex_on_gocryptfs__63__/comment_3_de92ff891493737021cb264394a0a6bb._comment create mode 100644 doc/forum/Can_you_use_git_annex_on_gocryptfs__63__/comment_4_2689a87a68dc459615d9542ad908b7a3._comment create mode 100644 doc/forum/Can_you_use_git_annex_on_gocryptfs__63__/comment_5_a1f8d718be941f4dd5e7b06fd6431c10._comment create mode 100644 doc/forum/Can_you_use_git_annex_on_gocryptfs__63__/comment_7_375b8234fc79d75f3cb39004cbe4d9e3._comment create mode 100644 doc/forum/Can_you_use_git_annex_on_gocryptfs__63__/comment_7_ff7f26601e375146a08b454a2e448f1b._comment create mode 100644 doc/forum/Cannot_find_git-annex_in_server.mdwn create mode 100644 doc/forum/Cannot_find_git-annex_in_server/comment_1_bf7e98e6130698ad0dc92e3a6a63ade3._comment create mode 100644 doc/forum/Cannot_find_git-annex_in_server/comment_2_168dda4aed09f90a510bc453e8a7cda7._comment create mode 100644 doc/forum/Cannot_get_file_from_special_remote.mdwn create mode 100644 doc/forum/Cannot_get_file_from_special_remote/comment_1_7fd5cebf26042ff0de30746bf8a6adcf._comment create mode 100644 doc/forum/Cannot_get_file_from_special_remote/comment_2_bbb832f022d23b1f020d07f3fe99577f._comment create mode 100644 doc/forum/Cannot_get_file_from_special_remote/comment_3_81a6054bc3b64f1325f4d85979f2b12a._comment create mode 100644 doc/forum/Cannot_get_file_from_special_remote/comment_4_6e7252449b3eb9ca5d45b5c3889cacd4._comment create mode 100644 doc/forum/Cannot_get_file_with_git-annex.mdwn create mode 100644 doc/forum/Cannot_get_file_with_git-annex/comment_1_d16cff700d5899c56011f66b655ad9ff._comment create mode 100644 doc/forum/Cannot_get_file_with_git-annex/comment_2_50c375c6af20b38dec08eff10113dee2._comment create mode 100644 doc/forum/Cannot_get_unlocked_file_contents.mdwn create mode 100644 doc/forum/Cannot_get_unlocked_file_contents/comment_1_1905d2a9ae0142838f42aff4efd5c643._comment create mode 100644 doc/forum/Cannot_get_unlocked_file_contents/comment_2_496503ae9878d402261910e2dd9bc385._comment create mode 100644 doc/forum/Cannot_get_unlocked_file_contents/comment_3_57ee489f24b26b73b28f64566e2b8ff5._comment create mode 100644 doc/forum/Cannot_get_unlocked_file_contents/comment_3_be1f3ec26c14ca9adc9d8f24ea096976._comment create mode 100644 doc/forum/Cannot_launch_webapp_on_ubuntu_12.04_using_ppa.mdwn create mode 100644 doc/forum/Cannot_launch_webapp_on_ubuntu_12.04_using_ppa/comment_1_9345551f5772c3a6f1490b00e1edbf69._comment create mode 100644 doc/forum/Cannot_launch_webapp_on_ubuntu_12.04_using_ppa/comment_2_0b688a442b6a911a0353e73097a24cb6._comment create mode 100644 doc/forum/Cannot_launch_webapp_on_ubuntu_12.04_using_ppa/comment_3_7e246caa00005560bb489c927c663046._comment create mode 100644 doc/forum/Cannot_launch_webapp_on_ubuntu_12.04_using_ppa/comment_4_1d8025aabe8bc72711a77f691f67da5f._comment create mode 100644 doc/forum/Cannot_launch_webapp_on_ubuntu_12.04_using_ppa/comment_5_7c2f95da65190016192424e7c622122f._comment create mode 100644 doc/forum/Cannot_launch_webapp_on_ubuntu_12.04_using_ppa/comment_6_9b8465cefe609e7a696e7573b8892e38._comment create mode 100644 doc/forum/Cannot_launch_webapp_on_ubuntu_12.04_using_ppa/comment_7_af6472762a598a454ba52ac0caa059aa._comment create mode 100644 doc/forum/Cant_see_git-annex-shell_via_SSH_in_OSX.mdwn create mode 100644 doc/forum/Cant_see_git-annex-shell_via_SSH_in_OSX/comment_1_1fafdc4ed4a0f601918361dca688aa6c._comment create mode 100644 doc/forum/Case-insensitive_search_with_find_list_whereis__63__.mdwn create mode 100644 doc/forum/Case-insensitive_search_with_find_list_whereis__63__/comment_1_b893fd9a250d25ebc62913131cb0a479._comment create mode 100644 doc/forum/Case-insensitive_search_with_find_list_whereis__63__/comment_2_e19abfe33b0f071ffc059e9976fc6d91._comment create mode 100644 doc/forum/Central_git_annex_server_that_always_keeps_one_copy.mdwn create mode 100644 doc/forum/Central_git_annex_server_that_always_keeps_one_copy/comment_1_e786c8df6e48d88cf15b555af1b8639a._comment create mode 100644 doc/forum/Central_git_annex_server_that_always_keeps_one_copy/comment_2_b0a091e11c18c8640888b0aedfbff5c5._comment create mode 100644 doc/forum/Central_server_with_automatically_merged_working_tree.mdwn create mode 100644 doc/forum/Central_server_with_automatically_merged_working_tree/comment_1_bc850e25e48598a09353850021c6368c._comment create mode 100644 doc/forum/Centralized_repository_with_webapp.mdwn create mode 100644 doc/forum/Centralized_repository_with_webapp/comment_1_dcb9b07fd154f4d4fdef4809cc37ce77._comment create mode 100644 doc/forum/Centralized_repository_with_webapp/comment_2_08c84f2703f89dc12982eba9dd2a06d1._comment create mode 100644 doc/forum/Change_a_special_remote__39__s_type.mdwn create mode 100644 doc/forum/Change_a_special_remote__39__s_type/comment_1_9d7c23f5c985d44ffa78b3957ddc3d15._comment create mode 100644 doc/forum/Change_a_special_remote__39__s_type/comment_2_c514ca0dd8b883e02de7c70b46991152._comment create mode 100644 doc/forum/Change_a_special_remote__39__s_type/comment_3_b89db83045d4baa82cc96b7610caecda._comment create mode 100644 doc/forum/Change_annex_id_after_harddrive_clone.mdwn create mode 100644 doc/forum/Change_annex_id_after_harddrive_clone/comment_1_2e8ba624f404edf2923d08ae27d12a60._comment create mode 100644 doc/forum/Change_or_add_S3_credentials.mdwn create mode 100644 doc/forum/Change_or_add_S3_credentials/comment_1_864932114dcc7aaf1d88edb0673f1d86._comment create mode 100644 doc/forum/Change_remote_server_address.mdwn create mode 100644 doc/forum/Change_remote_server_address/comment_1_401c3d2530ac7ba41dd3857ab4737ed5._comment create mode 100644 doc/forum/Change_remote_server_address/comment_2_93a4c44d552efe6d51584e0aab3605e7._comment create mode 100644 doc/forum/Changing_files_during_git_annex_runs.mdwn create mode 100644 doc/forum/Changing_files_during_git_annex_runs/comment_1_8067077c49dafbe2afa7d182b3314df4._comment create mode 100644 doc/forum/Changing_the_target_of_an_external_special_remote.mdwn create mode 100644 doc/forum/Changing_the_target_of_an_external_special_remote/comment_1_db1112fb1b4626f2d2c1b7b78ab3f5e5._comment create mode 100644 doc/forum/Cheapest_test_for_an_initialized_annex__63__.mdwn create mode 100644 doc/forum/Cheapest_test_for_an_initialized_annex__63__/comment_1_abe1af7fc49f91e3aa15915190dc5dfd._comment create mode 100644 doc/forum/Cheapest_test_for_an_initialized_annex__63__/comment_2_3d6f353d087cb945a0288f0594a1d1e0._comment create mode 100644 doc/forum/Check_if_remote_is_using_GPG__63__.mdwn create mode 100644 doc/forum/Check_if_remote_is_using_GPG__63__/comment_1_db8ce8ef50fc33a28860ee475988450f._comment create mode 100644 doc/forum/Check_if_remote_is_using_GPG__63__/comment_2_11c7033904c9c7a1df766e915632c386._comment create mode 100644 doc/forum/Check_if_remote_is_using_GPG__63__/comment_3_a7ab70ad87a334c36761ddb3d830d99b._comment create mode 100644 doc/forum/Check_when_your_last_fsck_was__63__.mdwn create mode 100644 doc/forum/Check_when_your_last_fsck_was__63__/comment_1_ee98a1fcd796fe4fd7af6f77d0c1837d._comment create mode 100644 doc/forum/Check_when_your_last_fsck_was__63__/comment_2_7238740d7904a6a9715c1cd7d8a529d4._comment create mode 100644 doc/forum/Check_when_your_last_fsck_was__63__/comment_3_8fa3680b084fad45d7a184d1191fedce._comment create mode 100644 doc/forum/Checking_for_missing_files_in_S3___40__reduced_redundancy__41__.mdwn create mode 100644 doc/forum/Checking_for_missing_files_in_S3___40__reduced_redundancy__41__/comment_2_793b3d9f78562f3aecf27dd926bbcf82._comment create mode 100644 doc/forum/Checking_that_everything_is_committed.mdwn create mode 100644 doc/forum/Checking_that_everything_is_committed/comment_1_875c22110d65c0d8e6ef6aebced87e95._comment create mode 100644 doc/forum/Checkout_only_some_files_with_the_assistant.mdwn create mode 100644 doc/forum/Checkout_only_some_files_with_the_assistant/comment_1_23d8ab1a05e3e9d3611bd12a4ba70b0c._comment create mode 100644 doc/forum/Checkout_only_some_files_with_the_assistant/comment_2_bf095ff5b5af95b062ae1f7da566a279._comment create mode 100644 doc/forum/Checkout_only_some_files_with_the_assistant/comment_3_7c026e36e1cdd52053c34638c87d793c._comment create mode 100644 doc/forum/Clarification_in_usage_case.mdwn create mode 100644 doc/forum/Clarification_in_usage_case/comment_1_555ff0df9be2e25dcc784bc7956dcfe7._comment create mode 100644 doc/forum/Clarification_in_usage_case/comment_2_8b43bc642656243cdf43cf77ae1c1851._comment create mode 100644 doc/forum/Clarifications_about_how_to_work_with_git-annex.mdwn create mode 100644 doc/forum/Clarifications_about_how_to_work_with_git-annex/comment_1_7f9857887a25df617a99cdab119761d8._comment create mode 100644 doc/forum/Cleaning_up_after_aborted_sync_in_direct_mode.mdwn create mode 100644 doc/forum/Cleaning_up_after_aborted_sync_in_direct_mode/comment_1_3440b2e1662d3b113c18283afcbf4520._comment create mode 100644 doc/forum/Cleaning_up_after_aborted_sync_in_direct_mode/comment_2_9a61ba8ac4a375f1d69cd09b5a6f8091._comment create mode 100644 doc/forum/Cleaning_up_after_aborted_sync_in_direct_mode/comment_3_6b9d8c48547f3d0a911310622ba91df7._comment create mode 100644 doc/forum/Combine_tags_in_view_branches.mdwn create mode 100644 doc/forum/Coming_from_git_world.mdwn create mode 100644 doc/forum/Coming_from_git_world/comment_10_098bef38c2688607e869425a557cc482._comment create mode 100644 doc/forum/Coming_from_git_world/comment_11_98d75a1415e0c3689ab4231855e61233._comment create mode 100644 doc/forum/Coming_from_git_world/comment_12_5e7079e9bf3e4d97191333c66ac00e52._comment create mode 100644 doc/forum/Coming_from_git_world/comment_1_357443dc601ae38784c01cf18552f4d5._comment create mode 100644 doc/forum/Coming_from_git_world/comment_2_ed1847dd3f47a9d013b8dd0455fb80ff._comment create mode 100644 doc/forum/Coming_from_git_world/comment_3_09c6bb83a73d34dff2b8bc185a14a1db._comment create mode 100644 doc/forum/Coming_from_git_world/comment_4_6c731bb9a8d21dd9ab8c09612b23f908._comment create mode 100644 doc/forum/Coming_from_git_world/comment_5_e719d99af5afd90da3d3db692eff28dc._comment create mode 100644 doc/forum/Coming_from_git_world/comment_6_85a42106944dba9995fb3f4bfee3443a._comment create mode 100644 doc/forum/Coming_from_git_world/comment_7_90623294b910ceca3dc8ebd41b50fc9b._comment create mode 100644 doc/forum/Coming_from_git_world/comment_8_28dbee30eb54877418f72eb8935302d8._comment create mode 100644 doc/forum/Coming_from_git_world/comment_9_6edb36ea9535030fa3766937398e5bc7._comment create mode 100644 doc/forum/Comparison_with_other_big_files_solutions.mdwn create mode 100644 doc/forum/Compile_Problem_with_latest_git_pull_version.mdwn create mode 100644 doc/forum/Compile_Problem_with_latest_git_pull_version/comment_1_0b87183756e860d93b8c0197bac3c0b1._comment create mode 100644 doc/forum/Compile_Problem_with_latest_git_pull_version/comment_2_1dd40ce31bcf994656fdfee7f8af43d2._comment create mode 100644 doc/forum/Compile_Problem_with_latest_git_pull_version/comment_3_f8e52610a592c68f9bc733bd31fa9659._comment create mode 100644 doc/forum/Compression_in_special_remotes___40__specifically_S3__41____63__.mdwn create mode 100644 doc/forum/Compression_in_special_remotes___40__specifically_S3__41____63__/comment_1_9c6c4ca0c9dc6976ba7cf27e84683bf0._comment create mode 100644 doc/forum/Confusion_about_Webapp___40__on_OSX__41__.mdwn create mode 100644 doc/forum/Confusion_about_Webapp___40__on_OSX__41__/comment_1_868b326cc5eb0767390ffdf45a594cff._comment create mode 100644 doc/forum/Confusion_about_Webapp___40__on_OSX__41__/comment_2_9b38b92d584395e5468bed03395c927f._comment create mode 100644 doc/forum/Confusion_about_Webapp___40__on_OSX__41__/comment_3_7d790a158b7c22206b0b523a4227bacb._comment create mode 100644 doc/forum/Consistency_Check_for_S3.mdwn create mode 100644 doc/forum/Consistency_Check_for_S3/comment_1_40385806ef1cc082232cd2723a24be1a._comment create mode 100644 doc/forum/Consistency_Check_for_S3/comment_2_ebfe40d9f777c9c0a83c44afd0f5802d._comment create mode 100644 doc/forum/Consistency_Check_for_S3/comment_3_ec9de6882a0eef4d2786e55b583ad020._comment create mode 100644 doc/forum/Content-sensitive_chunking__63__.mdwn create mode 100644 doc/forum/Content_branch.mdwn create mode 100644 doc/forum/Content_branch/comment_1_564724cb1508524700b71950b81a5058._comment create mode 100644 doc/forum/Content_not_present_and_get_doesn__39__t_retrieve_it.mdwn create mode 100644 doc/forum/Content_not_present_and_get_doesn__39__t_retrieve_it/comment_1_55e676477623db9e26e871d7189a1a88._comment create mode 100644 doc/forum/Content_not_present_and_get_doesn__39__t_retrieve_it/comment_2_cb404061683de3bfd5c24ce7e5ee6b82._comment create mode 100644 doc/forum/Content_not_present_and_get_doesn__39__t_retrieve_it/comment_3_74055eed54696331af07ba1721055562._comment create mode 100644 doc/forum/Controlling_content_on_mobile_device.mdwn create mode 100644 doc/forum/Controlling_content_on_mobile_device/comment_1_708649b7f30d8619d7b34dcb0ef46515._comment create mode 100644 doc/forum/Controlling_content_on_mobile_device/comment_2_dba1a1b0917332a1dee387b1183bd2cb._comment create mode 100644 doc/forum/Convert_regular_git-annex_repo_to_a_rsync_repo.mdwn create mode 100644 doc/forum/Convert_regular_git-annex_repo_to_a_rsync_repo/comment_1_e6065f9c44c85030c7628e2cfa0fd0fa._comment create mode 100644 doc/forum/Convert_regular_git-annex_repo_to_a_rsync_repo/comment_2_76bfb11396dc20a5105376b22e7e773b._comment create mode 100644 doc/forum/Convert_regular_git-annex_repo_to_a_rsync_repo/comment_3_b34d6ae0718ab0ff6bc1d7b8f2470b9b._comment create mode 100644 doc/forum/Convert_regular_git-annex_repo_to_a_rsync_repo/comment_4_8f5e323b29745591f9f2f0f867353f69._comment create mode 100644 doc/forum/Convert_regular_git-annex_repo_to_a_rsync_repo/comment_5_9824c953694770afa0611ff7276737bf._comment create mode 100644 doc/forum/Convert_regular_git-annex_repo_to_a_rsync_repo/comment_6_5899741cb7f83e1b22c5ee3509c5ff21._comment create mode 100644 doc/forum/Copy_contents_of_directory_to_rsync_remotes_possible__63__.mdwn create mode 100644 doc/forum/Copy_contents_of_directory_to_rsync_remotes_possible__63__/comment_1_6a598b2a0fc6c241aa051f663dca9842._comment create mode 100644 doc/forum/Copy_contents_of_directory_to_rsync_remotes_possible__63__/comment_3_09b7f1dd1fa4589b3fe0be0086849bf3._comment create mode 100644 doc/forum/Copy_modified_content_to_a_repo_that_only_wants_content_already_present.mdwn create mode 100644 doc/forum/Copy_modified_content_to_a_repo_that_only_wants_content_already_present/comment_1_fb09f84abeebc55df9741b059dc50674._comment create mode 100644 doc/forum/Copy_modified_content_to_a_repo_that_only_wants_content_already_present/comment_2_0b13914351aeb57fd7684ff2041618ee._comment create mode 100644 doc/forum/Copying_and_dropping_right_after.mdwn create mode 100644 doc/forum/Copying_and_dropping_right_after/comment_1_87d81911964c2628ccb6156b0b631aa0._comment create mode 100644 doc/forum/Copying_and_dropping_right_after/comment_2_87a14d14014aefc33f811bb15ea27e13._comment create mode 100644 doc/forum/Copying_to_S3_does_not_work_-_chunking_does_not_work.mdwn create mode 100644 doc/forum/Copying_to_S3_does_not_work_-_chunking_does_not_work/comment_1_ec390a7d521c697eb6b17e8db1dc9d1d._comment create mode 100644 doc/forum/Copying_to_S3_does_not_work_-_chunking_does_not_work/comment_2_14a584567ef42d5b7955ee970200e74d._comment create mode 100644 doc/forum/Copying_to_S3_does_not_work_-_chunking_does_not_work/comment_3_6cbd7329f1f11edf8dd90df27d45158f._comment create mode 100644 doc/forum/Correct_way_to_use_somewhat_unreliable_private_server_and_box.com.mdwn create mode 100644 doc/forum/Correct_way_to_use_somewhat_unreliable_private_server_and_box.com/comment_1_9c357a4a99930936124a58ffe105f87f._comment create mode 100644 doc/forum/Correct_way_to_use_somewhat_unreliable_private_server_and_box.com/comment_2_b4aec96cbcd8752f273ecd810400acef._comment create mode 100644 doc/forum/Corrupt_Repository_Invalid_Object.mdwn create mode 100644 doc/forum/Corrupt_Repository_Invalid_Object/comment_1_b7fd4b6212b50400342931e70684b96c._comment create mode 100644 doc/forum/Corrupted_repository__44___can_not_be_repaired.mdwn create mode 100644 doc/forum/Corrupted_repository__44___can_not_be_repaired/comment_1_297ea9c13096f6360358b3a3e7197c03._comment create mode 100644 doc/forum/Corrupted_repository__44___can_not_be_repaired/comment_2_c3aabffbe9568cf7acb4018e445f22a5._comment create mode 100644 doc/forum/Corrupted_repository__44___can_not_be_repaired/comment_3_baee46af6b2dbaf92be406ab22007a85._comment create mode 100644 doc/forum/Create_lightweight_checkouts_on_the_same_filesystem.mdwn create mode 100644 doc/forum/Create_lightweight_checkouts_on_the_same_filesystem/comment_1_dc219eec54b62803831c854a620aceae._comment create mode 100644 doc/forum/Create_lightweight_checkouts_on_the_same_filesystem/comment_2_1263830d015a458024a2346540f10f31._comment create mode 100644 doc/forum/Creating_a_more_secure_shared_encryption.mdwn create mode 100644 doc/forum/Crippled_FS__58___remove_read_perms_from_dropped_files__63___.mdwn create mode 100644 doc/forum/Crippled_FS__58___remove_read_perms_from_dropped_files__63___/comment_1_53941b83ff173025934e002a26031d9b._comment create mode 100644 doc/forum/Curious_file_in_repository.mdwn create mode 100644 doc/forum/DBus_on_Ubuntu_12.04__63__.mdwn create mode 100644 doc/forum/DBus_on_Ubuntu_12.04__63__/comment_1_dc14a40b64b7eda94d1a3fd766cd39cc._comment create mode 100644 doc/forum/DBus_on_Ubuntu_12.04__63__/comment_2_608a30e274e6a691a39f69503720e320._comment create mode 100644 doc/forum/DBus_on_Ubuntu_12.04__63__/comment_3_791b9978b410c1aff7fd8ef05c38f5f9._comment create mode 100644 doc/forum/DBus_on_Ubuntu_12.04__63__/comment_4_8665c95299916138c4af375626d9ec7d._comment create mode 100644 doc/forum/DO_NOT_use_ntfs-3g_on_mac_osx_for_annex.mdwn create mode 100644 doc/forum/DS__95__Store_files_are_not_added.mdwn create mode 100644 doc/forum/DS__95__Store_files_are_not_added/comment_1_30687306da9bd35ec02a806193c5e240._comment create mode 100644 doc/forum/DVD-R-based_archive_--_lack_of_backward_compatibility_seems_like_a_showstopper.mdwn create mode 100644 doc/forum/DVD-R-based_archive_--_lack_of_backward_compatibility_seems_like_a_showstopper/comment_1_d2640d4cd5bd28df5ecf389d17a2e52b._comment create mode 100644 doc/forum/Data_loss_if_symlink_target_edited.mdwn create mode 100644 doc/forum/Data_loss_if_symlink_target_edited/comment_1_599b96a2299f3c998f0317f4321eeff4._comment create mode 100644 doc/forum/Data_not_synced_from_my_local_repos_to_amazon.mdwn create mode 100644 doc/forum/Dead_repo_content_is_not_considered_unused.mdwn create mode 100644 doc/forum/Dead_repo_content_is_not_considered_unused/comment_1_e78552e939891b950a8352e4e3bdff92._comment create mode 100644 doc/forum/Dealing_with_crippled_Android_file_system.mdwn create mode 100644 doc/forum/Dealing_with_crippled_Android_file_system/comment_1_1b17852211108d9ab4d3959d7f57a9df._comment create mode 100644 doc/forum/Dealing_with_crippled_Android_file_system/comment_2_af66edabeeafcefb45b1d5c5d13dda92._comment create mode 100644 doc/forum/Dealing_with_crippled_Android_file_system/comment_3_8a555490bf1735c2f05a95cdb281ec80._comment create mode 100644 doc/forum/Dealing_with_crippled_Android_file_system/comment_4_051a08b7acd718ebae66a6aab69edb6e._comment create mode 100644 doc/forum/Dealing_with_crippled_Android_file_system/comment_5_a210b77d8567643667bbe92b40b5bef0._comment create mode 100644 doc/forum/Dealing_with_crippled_Android_file_system/comment_6_91f81669519dbf1dfbad2259f48ab99d._comment create mode 100644 doc/forum/Dealing_with_crippled_Android_file_system/comment_7_087fdae633144482473c7391ea338c5c._comment create mode 100644 doc/forum/Dealing_with_crippled_Android_file_system/comment_8_a2bafe08ff3e7a236ba560dafc9c4d85._comment create mode 100644 doc/forum/Dealing_with_long_filenames.mdwn create mode 100644 doc/forum/Dealing_with_long_filenames/comment_1_373798ea9763d3a0be5ce78f7e3f79f0._comment create mode 100644 doc/forum/Debugging_Git_Annex.mdwn create mode 100644 doc/forum/Debugging_Git_Annex/comment_1_ce63b2ee641a2338f1ad5ded9e6f09a8._comment create mode 100644 doc/forum/Debugging_Git_Annex/comment_2_1d70ff052d00f33c34fd45730ea13040._comment create mode 100644 doc/forum/Debugging_of_transfer_considerations.mdwn create mode 100644 doc/forum/Debugging_of_transfer_considerations/comment_1_e68ab187c15b3b6f9384a990da07f358._comment create mode 100644 doc/forum/Debugging_of_transfer_considerations/comment_2_f7cd207b08fe365d0a6248316c91ed78._comment create mode 100644 doc/forum/Debugging_of_transfer_considerations/comment_3_508b5b4155f0f9c0c2a7d2e990a1bf92._comment create mode 100644 doc/forum/Deduplication_in_direct_mode.mdwn create mode 100644 doc/forum/Deduplication_in_direct_mode/comment_1_cb8eaa8c19f5bb9e145a5e4c8995a8ca._comment create mode 100644 doc/forum/Default_annex.largefiles.mdwn create mode 100644 doc/forum/Default_annex.largefiles/comment_1_74a3ad2388e41f1ff17f64a00485a35a._comment create mode 100644 doc/forum/Default_text__47__html_handler.mdwn create mode 100644 doc/forum/Default_text__47__html_handler/comment_1_4730061916c7e12b7a41906152f847ee._comment create mode 100644 doc/forum/Delete_unused_files__47__metadata.mdwn create mode 100644 doc/forum/Delete_unused_files__47__metadata/comment_1_3efc19895c8dec89b71ae3778b583fea._comment create mode 100644 doc/forum/Delete_unused_files__47__metadata/comment_2_23597d9468347b3d94257f3c02afe1b8._comment create mode 100644 doc/forum/Deleting_remotes_doesn__39__t_work__8230__.mdwn create mode 100644 doc/forum/Deleting_remotes_doesn__39__t_work__8230__/comment_1_01d244f44d439ad08681af88284103c8._comment create mode 100644 doc/forum/Deleting_remotes_doesn__39__t_work__8230__/comment_2_a33c699726e5a913da72671ceb9be989._comment create mode 100644 doc/forum/Desktop_as_transfer_repository.mdwn create mode 100644 doc/forum/Desktop_as_transfer_repository/comment_1_b211b8f0ab58b8e59ce31d6ed6cb3c8c._comment create mode 100644 doc/forum/Desktop_as_transfer_repository/comment_2_9a943bcfe7679e469acc6fa1f78324b7._comment create mode 100644 doc/forum/Desktop_as_transfer_repository/comment_3_17165386df0c8c0085de29659f46f084._comment create mode 100644 doc/forum/Desktop_as_transfer_repository/comment_4_986e7d7bb536685f48731ffbbab4dc7c._comment create mode 100644 doc/forum/Detached_git_work_tree__63__.mdwn create mode 100644 doc/forum/Detached_git_work_tree__63__/comment_10_656c737772bf92be2c7a2f33bd2bb0f0._comment create mode 100644 doc/forum/Detached_git_work_tree__63__/comment_1_28ac35a325fba250721d9f1b7c994960._comment create mode 100644 doc/forum/Detached_git_work_tree__63__/comment_2_7128c26bbc8efea04a5a317edf0ca9f2._comment create mode 100644 doc/forum/Detached_git_work_tree__63__/comment_3_a3c22f905748ff2c803e8621c74a87a0._comment create mode 100644 doc/forum/Detached_git_work_tree__63__/comment_4_8063921241760458349e7cb0cadf3d4e._comment create mode 100644 doc/forum/Detached_git_work_tree__63__/comment_5_4510a787255cb03e7d0c3e7b830b7d52._comment create mode 100644 doc/forum/Detached_git_work_tree__63__/comment_6_ffd9c67ecc5b46ae98996018573f5591._comment create mode 100644 doc/forum/Detached_git_work_tree__63__/comment_7_36ca007643c983604fc4aed6ec8cb3d2._comment create mode 100644 doc/forum/Detached_git_work_tree__63__/comment_8_b7a2da4fbace7156e11c48a496a19dc9._comment create mode 100644 doc/forum/Detached_git_work_tree__63__/comment_9_f9fa237a693d28178f0451799209f7e2._comment create mode 100644 doc/forum/Difference_between_copy__44___move_and_get__63__.mdwn create mode 100644 doc/forum/Difference_between_copy__44___move_and_get__63__/comment_1_26ee8192af3a62178c1ccf17c6da5ca5._comment create mode 100644 doc/forum/Differences_between_unlocked_and_directory_remote.mdwn create mode 100644 doc/forum/Differences_between_unlocked_and_directory_remote/comment_1_6f4501e32029b1dbb52c9a7b4d2f17a0._comment create mode 100644 doc/forum/Differences_between_unlocked_and_directory_remote/comment_2_164489438245c38383645822a93cb80c._comment create mode 100644 doc/forum/Different_annexes_pointing_to_same_special_remote__63__.mdwn create mode 100644 doc/forum/Different_annexes_pointing_to_same_special_remote__63__/comment_1_359f46805e6508d03aadd90429937546._comment create mode 100644 doc/forum/Different_branches_for_different_devices__63__.mdwn create mode 100644 doc/forum/Different_branches_for_different_devices__63__/comment_1_a7d2c26298e8da715e1deb13baaf002e._comment create mode 100644 doc/forum/Different_branches_for_different_devices__63__/comment_2_214c71d2ab43e4d1bf564ea8337909b7._comment create mode 100644 doc/forum/Different_branches_for_different_devices__63__/comment_3_534f1e2cfcc0b6d184ef4968ec33dc89._comment create mode 100644 doc/forum/Different_preferred_content_for_subdirs.mdwn create mode 100644 doc/forum/Different_preferred_content_for_subdirs/comment_1_5c1e1e6375360cc9416821085b5a68a8._comment create mode 100644 doc/forum/Different_preferred_content_for_subdirs/comment_2_cc72b229b0a9a8f0ae0f42d6c2a145fd._comment create mode 100644 doc/forum/Different_preferred_content_for_subdirs/comment_3_c6764ea73c13b59645f1b378e77984b6._comment create mode 100644 doc/forum/Direct_Mode_-_Restore_file_from_Full_Backup_Repository__63__.mdwn create mode 100644 doc/forum/Direct_Mode_-_Restore_file_from_Full_Backup_Repository__63__/comment_1_67ac7e8b53a4374baf640d32dac79030._comment create mode 100644 doc/forum/Direct_Mode_-_Restore_file_from_Full_Backup_Repository__63__/comment_2_eb6df2bfcb3892ae22050a8c5f67ee90._comment create mode 100644 doc/forum/Direct_Mode_-_Restore_file_from_Full_Backup_Repository__63__/comment_3_15f36487383a631f16e041e2885c44ec._comment create mode 100644 doc/forum/Direct_Mode_-_Restore_file_from_Full_Backup_Repository__63__/comment_4_9293831aff5b6cef490f65d03638d34d._comment create mode 100644 doc/forum/Direct_special_remotes.mdwn create mode 100644 doc/forum/Direct_special_remotes/comment_1_50357130a1c57ad2fab70f71925faf02._comment create mode 100644 doc/forum/Direct_special_remotes/comment_2_e94a722ca056a068bcc16eb822008602._comment create mode 100644 doc/forum/Direct_special_remotes/comment_4_187036bbfee0508e2914afb51ead3c71._comment create mode 100644 doc/forum/Direct_special_remotes/comment_4_6bfbf60f2061d49b7d34c844e7e1dea2._comment create mode 100644 doc/forum/Direct_special_remotes/comment_5_69c34c655e4b153dfc0d1b8580091124._comment create mode 100644 doc/forum/Direct_special_remotes/comment_6_b054cfc3d3f81873f3faae7eb4f5337c._comment create mode 100644 doc/forum/Direct_special_remotes/comment_7_5f9d8a0ef2f13f242594848825d29ee7._comment create mode 100644 doc/forum/Disable_autoswitching_to_adjusted__40__unlocked__41___branch.mdwn create mode 100644 doc/forum/Disable_ssl_verification__63__.mdwn create mode 100644 doc/forum/Disable_ssl_verification__63__/comment_1_39af4df2a16e363f93f75a7a57af048c._comment create mode 100644 doc/forum/Disable_ssl_verification__63__/comment_2_8ff8769a1e62caf4f515b04db38d13f0._comment create mode 100644 doc/forum/Disable_ssl_verification__63__/comment_3_cf39af1d8ff11ab602363a717be074c6._comment create mode 100644 doc/forum/Disadvantages_of_WORM__58___long_filename__63__.mdwn create mode 100644 doc/forum/Disadvantages_of_WORM__58___long_filename__63__/comment_1_cc5502b55fb71c8fdb235ea9d17216ff._comment create mode 100644 doc/forum/Disadvantages_of_WORM__58___long_filename__63__/comment_2_d04b7adcc17a305fb1d7f1c1a3641be1._comment create mode 100644 doc/forum/Disconnected_Archive_and_Backups.mdwn create mode 100644 doc/forum/Disconnected_Archive_and_Backups/comment_1_c56f2d3328c0d127efc21067dc52df15._comment create mode 100644 doc/forum/Disconnected_Archive_and_Backups/comment_2_63b934b773b5f7a3c128dd9685f671ab._comment create mode 100644 doc/forum/Disconnected_Archive_and_Backups/comment_3_fae320f7453cf8c7147a109f19be22ba._comment create mode 100644 doc/forum/Disconnected_Archive_and_Backups/comment_4_b3d39d1b85489ce4059a72b9a912624c._comment create mode 100644 doc/forum/Disconnected_Archive_and_Backups/comment_5_93bed4629304725297f88cfa3d494720._comment create mode 100644 doc/forum/Disk_usage_during___96__import__96__.mdwn create mode 100644 doc/forum/Disk_usage_during___96__import__96__/comment_1_3ed4d9a36cacb9be96860cfaae8cee90._comment create mode 100644 doc/forum/Distributing_data_to_a_set_of_drives.mdwn create mode 100644 doc/forum/Distributing_data_to_a_set_of_drives/comment_1_f1fa72879f4e1db13bf59dea33c91624._comment create mode 100644 doc/forum/Distributing_data_to_a_set_of_drives/comment_2_e13b4e5c1e6f1f503f93d521b504d5c1._comment create mode 100644 doc/forum/Do_I_have_naming_ssh_remote_issue__63__.mdwn create mode 100644 doc/forum/Do_I_have_naming_ssh_remote_issue__63__/comment_1_f3e5ef9d7440cba467ebda1f2e8b12ea._comment create mode 100644 doc/forum/Does_Jabber_syncing_work_when_the_buddy_is_offline__63__.mdwn create mode 100644 doc/forum/Does_Jabber_syncing_work_when_the_buddy_is_offline__63__/comment_1_f290dd8547176793934f8077374e1c0a._comment create mode 100644 doc/forum/Does_Jabber_syncing_work_when_the_buddy_is_offline__63__/comment_2_c358eb51047f333e582bd824be5e0e65._comment create mode 100644 doc/forum/Does_Jabber_syncing_work_when_the_buddy_is_offline__63__/comment_3_a2332c0e7b29110b9aed2ab69ce9d8c4._comment create mode 100644 doc/forum/Does_git-annex_version_big_files__63__.mdwn create mode 100644 doc/forum/Does_git-annex_version_big_files__63__/comment_1_0b44003c1dc53adb807298ae452f8004._comment create mode 100644 doc/forum/Does_git-annex_version_big_files__63__/comment_2_ca40b67abd7bd36155d16d0396d7472c._comment create mode 100644 doc/forum/Does_git-annex_version_big_files__63__/comment_3_32de3501feedce51b43ed9dcc399c7a9._comment create mode 100644 doc/forum/Does_git-annex_version_big_files__63__/comment_4_8c65a7f8bda3c876971c2801fb6a76a1._comment create mode 100644 doc/forum/Does_git_annex_support_my_weird_workflow__63_____40__A_single__44___effectively___95__read_only__95___source__41__.mdwn create mode 100644 doc/forum/Does_git_annex_support_my_weird_workflow__63_____40__A_single__44___effectively___95__read_only__95___source__41__/comment_1_25572571debe2c91447b0ed952f45cb2._comment create mode 100644 doc/forum/Does_git_annex_support_my_weird_workflow__63_____40__A_single__44___effectively___95__read_only__95___source__41__/comment_2_46c27b242c6df76f9df198bbd6f14030._comment create mode 100644 doc/forum/Does_git_annex_support_my_weird_workflow__63_____40__A_single__44___effectively___95__read_only__95___source__41__/comment_3_2d9baeb81857b354931251a8b8a756e5._comment create mode 100644 doc/forum/Does_migrate_ensure_data_integrity__63__.mdwn create mode 100644 doc/forum/Does_migrate_ensure_data_integrity__63__/comment_1_cef50b32c46f4406c6f918c5866ddc15._comment create mode 100644 doc/forum/Does_migrate_ensure_data_integrity__63__/comment_2_f389b924c8531b35fdf5dedd10fc8000._comment create mode 100644 doc/forum/Does_the_windows_version_install_iStartSurf_malware__63__.mdwn create mode 100644 doc/forum/Does_the_windows_version_install_iStartSurf_malware__63__/comment_1_0536085a1f969802a7e8607093eee97d._comment create mode 100644 doc/forum/Don__39__t_copy_files_to_exporttree__61__no_remote.mdwn create mode 100644 doc/forum/Don__39__t_copy_files_to_exporttree__61__no_remote/comment_1_9f8e1ac58e319540b3d9a5b9962e1f8f._comment create mode 100644 doc/forum/Don__39__t_copy_files_to_exporttree__61__no_remote/comment_2_f398f38ff29d2e681548b1640080dff3._comment create mode 100644 doc/forum/Don__39__t_copy_files_to_exporttree__61__no_remote/comment_3_53759e189b2f13b8ea1f48f3b6fb7fca._comment create mode 100644 doc/forum/Don__39__t_copy_files_to_exporttree__61__no_remote/comment_4_c3d9048668596f6be3975026ec1debc1._comment create mode 100644 doc/forum/Don__39__t_copy_files_to_exporttree__61__no_remote/comment_5_e9ea995c99785dd6dffba91ef0fceb02._comment create mode 100644 doc/forum/Don__39__t_understand_how_to_delete__47__recover_files.mdwn create mode 100644 doc/forum/Don__39__t_understand_how_to_delete__47__recover_files/comment_1_b307bfb0b70d649897f411eb753bd50a._comment create mode 100644 doc/forum/Don__39__t_understand_how_to_delete__47__recover_files/comment_2_58a6a1476274b8c4feb3d43ecd998759._comment create mode 100644 doc/forum/Don__39__t_understand_how_to_delete__47__recover_files/comment_3_4b857f481db7b2437ac9f8137a8510e2._comment create mode 100644 doc/forum/Don__39__t_understand_how_to_delete__47__recover_files/comment_4_828db3bf2863d98c0b0fb4074aa7f066._comment create mode 100644 doc/forum/Don__39__t_understand_how_to_delete__47__recover_files/comment_5_cb2063d6a4e08a5c12bf3723d0fa74e0._comment create mode 100644 doc/forum/Don__39__t_understand_how_to_delete__47__recover_files/comment_6_1759bcd5708f591f91b9c410f6dc5c54._comment create mode 100644 doc/forum/Don__39__t_understand_how_to_delete__47__recover_files/comment_7_2a389f01eb5131042ea1e71a73c9787a._comment create mode 100644 doc/forum/Don__39__t_understand_local_vs._known_keys.mdwn create mode 100644 doc/forum/Don__39__t_understand_local_vs._known_keys/comment_1_10749c0d76e824217dd1ff8c8a6e42a5._comment create mode 100644 doc/forum/Don__39__t_understand_local_vs._known_keys/comment_2_db9f1b6d9638c2b0a7e241c2727e8cfb._comment create mode 100644 doc/forum/Don__39__t_understand_sync_with_ssh_remote.mdwn create mode 100644 doc/forum/Don__39__t_understand_sync_with_ssh_remote/comment_1_be10d6b564e130f4a516d438831681d1._comment create mode 100644 doc/forum/Drop__47__move_unused_files_older_than_x.mdwn create mode 100644 doc/forum/Drop__47__move_unused_files_older_than_x/comment_1_626facc640a9018a04f203d10aff7676._comment create mode 100644 doc/forum/Drop_some_unused_objects_keeping___35__n_more_recent.mdwn create mode 100644 doc/forum/Drop_some_unused_objects_keeping___35__n_more_recent/comment_1_2e16a4c08568ea37c16f4ea74203ae12._comment create mode 100644 doc/forum/Drop_with_assistant.mdwn create mode 100644 doc/forum/Drop_with_assistant/comment_1_048f5a31c549afb19b76a65bddd0cd24._comment create mode 100644 doc/forum/Drop_with_assistant/comment_2_527d7b6a8efa85b904111f179912d926._comment create mode 100644 doc/forum/Drop_with_assistant/comment_3_c50857506869bb1cd306b66acf37fba8._comment create mode 100644 doc/forum/Drop_with_assistant/comment_4_1ea37445d5eb96c3efa182e88e07b867._comment create mode 100644 doc/forum/Drop_with_assistant/comment_5_c08908ea5232cbe067c73ecd12d0e218._comment create mode 100644 doc/forum/Drop_with_assistant/comment_6_015134228cb865f97326fbb7193636ea._comment create mode 100644 doc/forum/Drop_with_assistant/comment_7_950759930667588f21659cd6d7065fbb._comment create mode 100644 doc/forum/Drop_with_assistant/comment_8_773e540e46adc43487323e8d38ceb2d9._comment create mode 100644 doc/forum/Drop_with_assistant/comment_9_d85d120d7219ea6c179c2619a17bdae9._comment create mode 100644 doc/forum/Dropping_checksum_from_URL_key.mdwn create mode 100644 doc/forum/Dropping_checksum_from_URL_key/comment_1_ce952a9db35d398a9e67adcd7f927d59._comment create mode 100644 doc/forum/Dropping_checksum_from_URL_key/comment_2_bb458296d464c2025f96502338f34000._comment create mode 100644 doc/forum/Dropping_files_in_an_annex.thin_v7_repository.mdwn create mode 100644 doc/forum/Dropping_files_in_an_annex.thin_v7_repository/comment_1_9f2dcdfe6a689902f348211db6b7a758._comment create mode 100644 doc/forum/Duplicate_entries_in_location_tracking_logs.mdwn create mode 100644 doc/forum/Duplicate_entries_in_location_tracking_logs/comment_1_3afb76397519b8ca8b55958a344f1871._comment create mode 100644 doc/forum/Duplicate_entries_in_location_tracking_logs/comment_2_6f327444772ee1e660a12e7442162df5._comment create mode 100644 doc/forum/Duplicate_files_not_detected.mdwn create mode 100644 doc/forum/Duplicate_files_not_detected/comment_1_d49a34aae5decafed804f45a573c0027._comment create mode 100644 doc/forum/Duplicate_files_not_detected/comment_2_c1afe87e818ac3eea66d5216bb15d727._comment create mode 100644 doc/forum/Duplicate_files_not_detected/comment_3_c07b9634f571b5f12665b368c0ad3c80._comment create mode 100644 doc/forum/Editing_Metadata_in_your___36__EDITOR.mdwn create mode 100644 doc/forum/Editing_files_in_metadata_driven_view.mdwn create mode 100644 doc/forum/Editing_files_in_metadata_driven_view/comment_1_acb4656e0dafc5689c84d4cca760bafa._comment create mode 100644 doc/forum/Effectively_replicating_backup_files.mdwn create mode 100644 doc/forum/Effectively_replicating_backup_files/comment_1_b1ab0da82db076c5244b0dcc95282ddd._comment create mode 100644 doc/forum/Effectively_replicating_backup_files/comment_2_472ab9c973b475f7f3ce7e3934f94281._comment create mode 100644 doc/forum/Effectively_replicating_backup_files/comment_3_826493bd59b81786c1f6a56f1c438004._comment create mode 100644 doc/forum/Efficiently_move_files_from_one_repo_to_another.mdwn create mode 100644 doc/forum/Efficiently_move_files_from_one_repo_to_another/comment_10_191ca3a984412be76f64aa31b55b8d50._comment create mode 100644 doc/forum/Efficiently_move_files_from_one_repo_to_another/comment_1_0cc04ef5e511241a5152a0702f943538._comment create mode 100644 doc/forum/Efficiently_move_files_from_one_repo_to_another/comment_2_be029c0880e76d6b5672eed394140438._comment create mode 100644 doc/forum/Efficiently_move_files_from_one_repo_to_another/comment_3_c2f4b10fa1789a4966aed298e00dbc75._comment create mode 100644 doc/forum/Efficiently_move_files_from_one_repo_to_another/comment_4_65bbee3637d09bb6078ec7b118852fd8._comment create mode 100644 doc/forum/Efficiently_move_files_from_one_repo_to_another/comment_5_45c1788b39953cd7237f014fa94e086b._comment create mode 100644 doc/forum/Efficiently_move_files_from_one_repo_to_another/comment_6_23b3a1a1412866fa06e736f0f5bab583._comment create mode 100644 doc/forum/Efficiently_move_files_from_one_repo_to_another/comment_7_fba097cd3187d1d8b7517594d875c373._comment create mode 100644 doc/forum/Efficiently_move_files_from_one_repo_to_another/comment_8_b8f81522e519bab56036cc8628f29ce9._comment create mode 100644 doc/forum/Efficiently_move_files_from_one_repo_to_another/comment_9_3e5f41a5cce30c21cea629009f91dd31._comment create mode 100644 doc/forum/Encrypted_Content_Remote_Daemon_.mdwn create mode 100644 doc/forum/Encrypted_Content_Remote_Daemon_/comment_1_96f63e509e23c081c48302274e21db78._comment create mode 100644 doc/forum/Encrypted_Content_Remote_Daemon_/comment_2_acd0ffdc3f5079265858073c2af81557._comment create mode 100644 doc/forum/Encrypted_ssh_remote__44___synced_folders.mdwn create mode 100644 doc/forum/Encrypted_ssh_remote__44___synced_folders/comment_1_7b9b4ef614c90e0b222d24678d1b9026._comment create mode 100644 doc/forum/Ensure_all_versions_are_on_remotes.mdwn create mode 100644 doc/forum/Ensure_all_versions_are_on_remotes/comment_1_b8b674dc99999dcdb5a435f34b96c1ea._comment create mode 100644 doc/forum/Ensure_all_versions_are_on_remotes/comment_2_ad5f1f0b98032361e64bb7275d23e97c._comment create mode 100644 doc/forum/Ensure_all_versions_are_on_remotes/comment_3_d9bd5f9ef8c8a8cc08cc39396f0a6f67._comment create mode 100644 doc/forum/Ensure_all_versions_are_on_remotes/comment_4_8d07699b69676d9afd53744f267bb615._comment create mode 100644 doc/forum/Ensure_all_versions_are_on_remotes/comment_5_2202121e5311b56b1d73f9bb1503c5e3._comment create mode 100644 doc/forum/Equivalent_to_git_bundle__63__.mdwn create mode 100644 doc/forum/Equivalent_to_git_bundle__63__/comment_1_e42936a9bc36fbee69f48e32df303dee._comment create mode 100644 doc/forum/Equivalent_to_git_bundle__63__/comment_2_2b8b5c237d8572fdd27202f3502bea96._comment create mode 100644 doc/forum/Error__58___failed_to_push_some_refs.mdwn create mode 100644 doc/forum/Error_adding_ssh_remote_in_assistant.mdwn create mode 100644 doc/forum/Error_adding_ssh_remote_in_assistant/comment_1_eecc0660db4083cc91c5330587f74610._comment create mode 100644 doc/forum/Error_adding_ssh_remote_in_assistant/comment_2_3e6aad22e8020b12ff7ef914b75281d1._comment create mode 100644 doc/forum/Error_adding_ssh_remote_in_assistant/comment_3_3ea529e16502071fc0980c6d5c60a036._comment create mode 100644 doc/forum/Error_from_git-annex-shell_on_creation_of_gcrypt_special_remote.mdwn create mode 100644 doc/forum/Error_from_git-annex-shell_on_creation_of_gcrypt_special_remote/comment_1_2a69ce8607f97aabdf3cc402c1091d7a._comment create mode 100644 doc/forum/Error_from_git-annex-shell_on_creation_of_gcrypt_special_remote/comment_2_a112f0bc1a30fa41504e3f52f679053b._comment create mode 100644 doc/forum/Exactly_what_does_a_v5_to_v7_upgrade_entail__63__.mdwn create mode 100644 doc/forum/Exactly_what_does_a_v5_to_v7_upgrade_entail__63__/comment_3_04a920f5b86a203d050ee4a9a0f8a33d._comment create mode 100644 doc/forum/Exactly_what_does_a_v5_to_v7_upgrade_entail__63__/comment_4_b43fda0acca8cc9027f36f51b9489aa3._comment create mode 100644 doc/forum/Exactly_what_does_a_v5_to_v7_upgrade_entail__63__/comment_5_380240e562358efb25a8acb65b5d4cc7._comment create mode 100644 doc/forum/Exactly_what_does_a_v5_to_v7_upgrade_entail__63__/comment_5_752b1c3e2394ef432c1e21a5639648be._comment create mode 100644 doc/forum/Exactly_what_does_a_v5_to_v7_upgrade_entail__63__/comment_6_e5d4ba2bb9f78380dfa94446cb1f4b54._comment create mode 100644 doc/forum/Exactly_what_does_a_v5_to_v7_upgrade_entail__63__/comment_7_cec779ef77336ea30728815739be78b6._comment create mode 100644 doc/forum/Exactly_what_does_a_v5_to_v7_upgrade_entail__63__/comment_7_e349403ef92a96a08195a7dd1dbf9561._comment create mode 100644 doc/forum/Exactly_what_does_a_v5_to_v7_upgrade_entail__63__/comment_8_bca507381436a8282645a931aa39fb20._comment create mode 100644 doc/forum/Exclude_specific_files_from_a_special_remote.mdwn create mode 100644 doc/forum/Exclude_specific_files_from_a_special_remote/comment_1_d5a9f3308e09a9b9460014904d23ef48._comment create mode 100644 doc/forum/Exclude_specific_files_from_a_special_remote/comment_2_671790686bd4724aadcadd8d8aad2c98._comment create mode 100644 doc/forum/Export_files_that_aren__39__t_locally_present__63__.mdwn create mode 100644 doc/forum/Export_files_that_aren__39__t_locally_present__63__/comment_1_278b70c7bd7397e634df4a257fb604f9._comment create mode 100644 doc/forum/Exporting_files_to_special_remote__44___even_if_not_in_preferred_contents.mdwn create mode 100644 doc/forum/Exporting_files_to_special_remote__44___even_if_not_in_preferred_contents/comment_1_8276c225867733e7a79ba47be2447b1e._comment create mode 100644 doc/forum/Exporting_files_to_special_remote__44___even_if_not_in_preferred_contents/comment_2_dc1e718d0043686987abc9526a459dc3._comment create mode 100644 doc/forum/External_drive_syncs_git-annex_branch_but_not_master_branch.mdwn create mode 100644 doc/forum/External_drive_syncs_git-annex_branch_but_not_master_branch/comment_1_9a909e3d89061adacbd8ed370520250c._comment create mode 100644 doc/forum/External_drive_syncs_git-annex_branch_but_not_master_branch/comment_2_0dd489b264374b7b1065b89e1ff7561b._comment create mode 100644 doc/forum/Extra___38___missing_folders_on_remote.mdwn create mode 100644 doc/forum/Failed_to_push_on_git-lfs.mdwn create mode 100644 doc/forum/Failed_to_push_on_git-lfs/comment_1_f83dbcfdd09de3ce908c0d4a9daef458._comment create mode 100644 doc/forum/Failed_to_push_on_git-lfs/comment_2_52051b251bea7a5ed452769d0320602a._comment create mode 100644 doc/forum/Failing_to_get_files_from_rclone_special_remote.mdwn create mode 100644 doc/forum/Failing_to_get_files_from_rclone_special_remote/comment_1_4a762c369e4049bdedecca4a32242f18._comment create mode 100644 doc/forum/Failing_to_get_files_from_rclone_special_remote/comment_2_cfb6be6c940350dbed6cc9e98ee1d633._comment create mode 100644 doc/forum/Failing_to_get_files_from_rclone_special_remote/comment_3_58282be918139a3154938850793a80fb._comment create mode 100644 doc/forum/Failing_to_get_files_from_rclone_special_remote/comment_4_1360ee3e3b711990f59e0320e7892cd2._comment create mode 100644 doc/forum/Fails_to_get_file_from_s3._How_to_recover__63__.mdwn create mode 100644 doc/forum/Fails_to_get_file_from_s3._How_to_recover__63__/comment_1_c769dcbb9d5f082d54b8a091a44c9de4._comment create mode 100644 doc/forum/Fails_to_get_file_from_s3._How_to_recover__63__/comment_2_50e35159f7e670ca6b7280121821b494._comment create mode 100644 doc/forum/Fails_to_get_file_from_s3._How_to_recover__63__/comment_3_471ff0cdb00b311f2a3d801b04e9edef._comment create mode 100644 doc/forum/Fails_to_get_file_from_s3._How_to_recover__63__/comment_4_e0f80d306a2b4d19d65d268cde25ac31._comment create mode 100644 doc/forum/Fails_to_get_file_from_s3._How_to_recover__63__/comment_4_f648049cc1a82f183bbc7dc84cd170e2._comment create mode 100644 doc/forum/Fails_to_get_file_from_s3._How_to_recover__63__/comment_6_c2686480c6c77ea7297f739780ea6d3b._comment create mode 100644 doc/forum/Fails_to_get_file_from_s3._How_to_recover__63__/comment_7_6f3d056e449366746aef4f45673515d5._comment create mode 100644 doc/forum/Fails_to_get_file_from_s3._How_to_recover__63__/comment_8_785e012f478631f4b69fefbd0394f1b8._comment create mode 100644 doc/forum/Fails_to_get_file_from_s3._How_to_recover__63__/comment_9_e021705e0fae6645a0b6459757260084._comment create mode 100644 doc/forum/Fast_cloning_a_repo_initially.mdwn create mode 100644 doc/forum/Fast_cloning_a_repo_initially/comment_1_0db0caafe30dd1b6f15fb1679dec8f9f._comment create mode 100644 doc/forum/Fast_cloning_a_repo_initially/comment_2_e17abc209c2b3ba20158be76801ce04a._comment create mode 100644 doc/forum/Feature_Request__58___Specify_file_size_when_adding_files_to_URL_backend.mdwn create mode 100644 doc/forum/Feature_Request__58___Specify_file_size_when_adding_files_to_URL_backend/comment_1_9d2fa7d796fd40718d0df9feeea654aa._comment create mode 100644 doc/forum/Feature_Request__58___add_filename_to_hash_objects.mdwn create mode 100644 doc/forum/Feature_Request__58___add_filename_to_hash_objects/comment_1_73dc0a9cad486cf2d34faf064c6193b1._comment create mode 100644 doc/forum/Feature_Request__58___add_filename_to_hash_objects/comment_2_f818b3ecfeb1d1dd83df4668c061718a._comment create mode 100644 doc/forum/Feature_request__58___--quiet_for_fsck__44___import__44___etc.mdwn create mode 100644 doc/forum/Feature_request__58___--quiet_for_fsck__44___import__44___etc/comment_1_cbcc3df01a346c6ee6720c90421ee023._comment create mode 100644 doc/forum/Feature_request__58___Multiple_concurrent_transfers.mdwn create mode 100644 doc/forum/Feature_request__58___Multiple_concurrent_transfers/comment_1_aa666349e9b524fd5394a259ad622c3b._comment create mode 100644 doc/forum/Feature_request__58___git_annex_copy_--auto_does_the_right_thing.mdwn create mode 100644 doc/forum/Feature_request__58___git_annex_copy_--auto_does_the_right_thing/comment_1_bbac7d0810a79eb1f42a01e1b31d5c4c._comment create mode 100644 doc/forum/Feature_request__58___webapp_support_for_centralized_bare_repos.mdwn create mode 100644 doc/forum/Feature_request__58___webapp_support_for_centralized_bare_repos/comment_1_0522e3df450efb6b2d264857e07997dc._comment create mode 100644 doc/forum/Feature_request__58___webapp_support_for_centralized_bare_repos/comment_2_e0fc126b0d500d41a563b076a4f6ed6d._comment create mode 100644 doc/forum/File_downloaded_again_and_again.mdwn create mode 100644 doc/forum/File_downloaded_again_and_again/comment_1_666b907935d467d5d7c0e57831d76631._comment create mode 100644 doc/forum/File_history.mdwn create mode 100644 doc/forum/File_history/comment_1_6c15cdf71b99ae3bf8fd5de489a7d3ee._comment create mode 100644 doc/forum/File_history/comment_2_ebe8025d4769d22cafa81ad0f2ae969a._comment create mode 100644 doc/forum/File_history/comment_3_16aae9a5fdd5cfed816f5cdd96adf7ba._comment create mode 100644 doc/forum/File_history/comment_4_1b72655106507f111192231ab62cbe7e._comment create mode 100644 doc/forum/File_history/comment_5_72d1b2ff307df69add474a288f92d8c3._comment create mode 100644 doc/forum/File_still_symlinked_after_git_annex_unannex.mdwn create mode 100644 doc/forum/File_still_symlinked_after_git_annex_unannex/comment_1_55f1a5f16fe2f8a85034a85c5450bad2._comment create mode 100644 doc/forum/File_too_big_for_file_system_of_git_remote.mdwn create mode 100644 doc/forum/File_too_big_for_file_system_of_git_remote/comment_1_937df2f51506c42ddd2345735efd8f21._comment create mode 100644 doc/forum/Filesystem_recommendation___40__ext4__44___btrfs__44___xfs__44___you_name_it__41____63__.mdwn create mode 100644 doc/forum/Filesystem_recommendation___40__ext4__44___btrfs__44___xfs__44___you_name_it__41____63__/comment_1_fcf7f132f771de28553bd20f4fb014cb._comment create mode 100644 doc/forum/Filing_issues_with_Mac_dmg_packaging_on_downloads.kitenet.net__63__.mdwn create mode 100644 doc/forum/Filing_issues_with_Mac_dmg_packaging_on_downloads.kitenet.net__63__/comment_1_0d89d709e799442d77b0fc92f97fc3ae._comment create mode 100644 doc/forum/Filing_issues_with_Mac_dmg_packaging_on_downloads.kitenet.net__63__/comment_2_cccbc5c1d9b010ae38a8b5cfd9056cfe._comment create mode 100644 doc/forum/Find_files_that_lack_a_certain_field_in_metadata.mdwn create mode 100644 doc/forum/Find_files_that_lack_a_certain_field_in_metadata/comment_1_476e52563ccd3ad1b43e3a2da4dfaa82._comment create mode 100644 doc/forum/Find_out_if_file_is_in_annex__63__.mdwn create mode 100644 doc/forum/Find_out_if_file_is_in_annex__63__/comment_1_3936ff53d5c9f7e5795b15beadf437c7._comment create mode 100644 doc/forum/Find_unlocked__47__locked_files.mdwn create mode 100644 doc/forum/Find_unlocked__47__locked_files/comment_1_a34ce29b644c80789bf8cbfd575ffe1a._comment create mode 100644 doc/forum/Find_unlocked__47__locked_files/comment_2_85d90a43142d087e7b6183dd9f8be8cf._comment create mode 100644 doc/forum/Finding_out_why_file_is_not_being_auto-dropped.mdwn create mode 100644 doc/forum/Finding_out_why_file_is_not_being_auto-dropped/comment_1_d3881fe94e3588c90e74c6bb3db2783c._comment create mode 100644 doc/forum/First_attempt_at_an_OSX_launcher___40__.app__41__.mdwn create mode 100644 doc/forum/First_attempt_at_an_OSX_launcher___40__.app__41__/comment_1_97c261b9080c5ecc5424683066bbe05b._comment create mode 100644 doc/forum/First_attempt_at_an_OSX_launcher___40__.app__41__/comment_2_ae45f9703b635c235409682cf252d36c._comment create mode 100644 doc/forum/First_attempt_at_an_OSX_launcher___40__.app__41__/comment_3_066ca31a2e5dfe55a58092ba85231c7c._comment create mode 100644 doc/forum/First_attempt_at_an_OSX_launcher___40__.app__41__/comment_4_a0a9f7f44cadb8036fcddfc21bb0781f._comment create mode 100644 doc/forum/First_attempt_at_an_OSX_launcher___40__.app__41__/comment_5_92240b3f8629f1f2bbe1829700082a79._comment create mode 100644 doc/forum/Fix_duplicate_UUID.mdwn create mode 100644 doc/forum/Fix_duplicate_UUID/comment_1_1186caf5aa6830c2412f8584a43d8d86._comment create mode 100644 doc/forum/Fix_duplicate_UUID/comment_2_b0f06b58ef63dbb770773f28dfa1a29d._comment create mode 100644 doc/forum/Fix_duplicate_UUID/comment_3_525b2838985392eb65e705ad354d02c4._comment create mode 100644 doc/forum/Fix_duplicate_UUID/comment_4_ce58bf264e63a07a214956436d96f1a5._comment create mode 100644 doc/forum/Fix_wrong_rsync_with_git_annex_reinit__63__.mdwn create mode 100644 doc/forum/Fix_wrong_rsync_with_git_annex_reinit__63__/comment_1_26cb6d46a408c1002aa2fbc6618242f3._comment create mode 100644 doc/forum/Fix_wrong_rsync_with_git_annex_reinit__63__/comment_2_14ddf5ddf2b85c9d5ed5ca070744f1fe._comment create mode 100644 doc/forum/Fixing_up_corrupt_annexes.mdwn create mode 100644 doc/forum/Fixing_up_corrupt_annexes/comment_1_cea21f96bcfb56aaab7ea03c1c804d2d._comment create mode 100644 doc/forum/Fixing_up_corrupt_annexes/comment_2_5cdd2fcfa61b3f6255e5ad63a3ab00ce._comment create mode 100644 doc/forum/Folders_for___34__actions__34___-_now_that_views_have_disrupted_the_file_structure__63__.mdwn create mode 100644 doc/forum/Forcing_offline_copies_seem_available.mdwn create mode 100644 doc/forum/Forcing_offline_copies_seem_available/comment_1_75e8597a24c925981edf83c517d5a799._comment create mode 100644 doc/forum/Forcing_offline_copies_seem_available/comment_2_7d0e219628ad19093c6b6410d24c5f9a._comment create mode 100644 doc/forum/Forcing_offline_copies_seem_available/comment_3_3d57e187679b36be62f3918eb996c3df._comment create mode 100644 doc/forum/Forcing_one_repo_to_contain_a_copy_of_all_files.mdwn create mode 100644 doc/forum/Forcing_one_repo_to_contain_a_copy_of_all_files/comment_1_702b1b94c735f1b9cde16daa77a80c12._comment create mode 100644 doc/forum/Forcing_one_repo_to_contain_a_copy_of_all_files/comment_2_3df7fcbcd482bb9377ead238b314995b._comment create mode 100644 doc/forum/Forget_about_accidentally_added_file__63__.mdwn create mode 100644 doc/forum/Forget_about_accidentally_added_file__63__/comment_1_a7e6b1f6abe4caf8bd93be879c960cec._comment create mode 100644 doc/forum/Forget_about_accidentally_added_file__63__/comment_2_6beeec3a8bc9697481aa08738902203a._comment create mode 100644 doc/forum/Forget_about_accidentally_added_file__63__/comment_3_6bf46255cd212942d8db8b01c95443b2._comment create mode 100644 doc/forum/Forget_about_accidentally_added_file__63__/comment_4_2183fee162740918e5f67f9bd460b18d._comment create mode 100644 doc/forum/Forget_about_accidentally_added_file__63__/comment_5_2b248738c6fb871875cf1aa7413198cc._comment create mode 100644 doc/forum/Forget_about_accidentally_added_file__63__/comment_6_1fcfcb5dca366d8fd610c03654e15704._comment create mode 100644 doc/forum/Forget_about_accidentally_added_file__63__/comment_7_a982dd633e7f29ec80c8e4362ebc064a._comment create mode 100644 doc/forum/Forget_about_accidentally_added_file__63__/comment_8_ed88d2b82fc3283540caf3a255a88188._comment create mode 100644 doc/forum/Forget_about_accidentally_added_file__63__/comment_9_23cc8cec09f9e8fb56c0cb81c9b361bc._comment create mode 100644 doc/forum/Fsck_by_refs_or_keys__63__.mdwn create mode 100644 doc/forum/Fsck_by_refs_or_keys__63__/comment_1_345daa76cdd13538054e886a755bf29d._comment create mode 100644 doc/forum/Fsck_by_refs_or_keys__63__/comment_2_1d74ad47cf3bef9bcc0ccdff4ccb69b9._comment create mode 100644 doc/forum/Fsck_by_refs_or_keys__63__/comment_3_b00a9522bb6dd91fed5d1c790153a230._comment create mode 100644 doc/forum/Full_restore_from_an_encrypted_special_remote.mdwn create mode 100644 doc/forum/Full_restore_from_an_encrypted_special_remote/comment_1_f3a7a766ae1fe8e586cd67148761f156._comment create mode 100644 doc/forum/Full_workflow_guide.mdwn create mode 100644 doc/forum/Full_workflow_guide/comment_1_14664efebb1218a1449577eaa4653a77._comment create mode 100644 doc/forum/Future_proofing___47___disaster_recovery_with_an_encrypted_special_remote.mdwn create mode 100644 doc/forum/Future_proofing___47___disaster_recovery_with_an_encrypted_special_remote/comment_10_2eb2f05477a86f1352e734d163301ffa._comment create mode 100644 doc/forum/Future_proofing___47___disaster_recovery_with_an_encrypted_special_remote/comment_1_c2f7542ac9a4c423c5ae06c16d42a24f._comment create mode 100644 doc/forum/Future_proofing___47___disaster_recovery_with_an_encrypted_special_remote/comment_2_9a9da0ad1538ba59e76a5c4f9fc7fcf7._comment create mode 100644 doc/forum/Future_proofing___47___disaster_recovery_with_an_encrypted_special_remote/comment_3_27901f1c2c5de211f697972d9b21c104._comment create mode 100644 doc/forum/Future_proofing___47___disaster_recovery_with_an_encrypted_special_remote/comment_4_56994d9252e8651b3f33044f5c8599b3._comment create mode 100644 doc/forum/Future_proofing___47___disaster_recovery_with_an_encrypted_special_remote/comment_5_5aecb8c58d501e929e746d5536032c81._comment create mode 100644 doc/forum/Future_proofing___47___disaster_recovery_with_an_encrypted_special_remote/comment_6_ab0b660e5a3d7fc7d3d3a4b460022da5._comment create mode 100644 doc/forum/Future_proofing___47___disaster_recovery_with_an_encrypted_special_remote/comment_7_b96077c98792997cdf344725374abb5c._comment create mode 100644 doc/forum/Future_proofing___47___disaster_recovery_with_an_encrypted_special_remote/comment_8_e9597062bbc530920343e5159a7b7ea1._comment create mode 100644 doc/forum/Future_proofing___47___disaster_recovery_with_an_encrypted_special_remote/comment_9_756aeeee7be8cb67c5cc9dfa6ea7b82c._comment create mode 100644 doc/forum/Fuzzy_local_sensitive_hashing___40__LSH__41__.mdwn create mode 100644 doc/forum/Fuzzy_local_sensitive_hashing___40__LSH__41__/comment_1_29f2396e04251d266b68ba68b8b32215._comment create mode 100644 doc/forum/GIT__95__SSH.mdwn create mode 100644 doc/forum/GIT__95__SSH/comment_1_c2e827eeac7524845cad42671d77af95._comment create mode 100644 doc/forum/GPG_passphrase_handling.mdwn create mode 100644 doc/forum/GPG_passphrase_handling/comment_1_11ba130e8bea6698858d0a1a5b01830f._comment create mode 100644 doc/forum/GPG_passphrase_handling/comment_2_ef9d58d15b7bbe0b3c7140bb01d73a31._comment create mode 100644 doc/forum/GPG_passphrase_handling/comment_3_84eb129c8483b87b3ae6ecaf8b4a8309._comment create mode 100644 doc/forum/GPG_passphrase_handling/comment_4_8724297f6d7ac140ab395a940bab0d7d._comment create mode 100644 doc/forum/General_questions_and_help.mdwn create mode 100644 doc/forum/General_questions_and_help/comment_1_adfef0ecc191dd2ad85b4e0f6a4df67d._comment create mode 100644 doc/forum/General_questions_and_help/comment_2_972231014d3da4fcd8fb2a77d76e7b77._comment create mode 100644 doc/forum/General_questions_and_help/comment_3_1a071d4a7e62701c47d8531c4faa9dcb._comment create mode 100644 doc/forum/General_questions_and_help/comment_4_51b8cd9f1b8b53bcf880ea56d1858f23._comment create mode 100644 doc/forum/General_questions_and_help/comment_5_0105e241e13f9469bf749735cb9f3e03._comment create mode 100644 doc/forum/Generating_a_Temp_View_of_Available_Files.mdwn create mode 100644 doc/forum/Get___39__source__39___group_to_automatically_drop_with_assistant.mdwn create mode 100644 doc/forum/Get___39__source__39___group_to_automatically_drop_with_assistant/comment_1_ead4b5b7ec0d085d4fa87fb4e29c4d55._comment create mode 100644 doc/forum/Get___39__source__39___group_to_automatically_drop_with_assistant/comment_2_835dba9de7a5eea868635dc793d4e75b._comment create mode 100644 doc/forum/Get___39__source__39___group_to_automatically_drop_with_assistant/comment_3_553542a4a2b2530863a006a1afe91637._comment create mode 100644 doc/forum/Get___39__source__39___group_to_automatically_drop_with_assistant/comment_4_4540a15672f9b48b0f9310c97f1a0b86._comment create mode 100644 doc/forum/Get_annex.dotfiles__61__true_behavior_without_persistent_configuration__63__.mdwn create mode 100644 doc/forum/Get_annex.dotfiles__61__true_behavior_without_persistent_configuration__63__/comment_10_0ae170680841f86279b95febaafa0440._comment create mode 100644 doc/forum/Get_annex.dotfiles__61__true_behavior_without_persistent_configuration__63__/comment_11_1f46bcb05d7866af35779830ceb632e2._comment create mode 100644 doc/forum/Get_annex.dotfiles__61__true_behavior_without_persistent_configuration__63__/comment_12_177db535bf756cfb4c231a41cd02e137._comment create mode 100644 doc/forum/Get_annex.dotfiles__61__true_behavior_without_persistent_configuration__63__/comment_13_cb4f95866113ac6f689ed9f219a1d8e1._comment create mode 100644 doc/forum/Get_annex.dotfiles__61__true_behavior_without_persistent_configuration__63__/comment_14_748a794bf4cda242923177352e34976c._comment create mode 100644 doc/forum/Get_annex.dotfiles__61__true_behavior_without_persistent_configuration__63__/comment_15_994e3e64184a020f9afe21cd9ea34b38._comment create mode 100644 doc/forum/Get_annex.dotfiles__61__true_behavior_without_persistent_configuration__63__/comment_1_b215a9ab1c37688cc22dbe4ec63347ad._comment create mode 100644 doc/forum/Get_annex.dotfiles__61__true_behavior_without_persistent_configuration__63__/comment_2_15de9ba04480697bdf4086cdf91226e4._comment create mode 100644 doc/forum/Get_annex.dotfiles__61__true_behavior_without_persistent_configuration__63__/comment_3_f642798f8d1c753dca3aad67d0bd9ace._comment create mode 100644 doc/forum/Get_annex.dotfiles__61__true_behavior_without_persistent_configuration__63__/comment_4_018442fba01a2aac43531f2eaecc1117._comment create mode 100644 doc/forum/Get_annex.dotfiles__61__true_behavior_without_persistent_configuration__63__/comment_5_577c3dfc1f77ad0821ed8fcbbac3772c._comment create mode 100644 doc/forum/Get_annex.dotfiles__61__true_behavior_without_persistent_configuration__63__/comment_6_7a3a21b3995f79710ebb5a8428709f66._comment create mode 100644 doc/forum/Get_annex.dotfiles__61__true_behavior_without_persistent_configuration__63__/comment_7_95fe371e2e5083c8dc06b24b2f8d87e1._comment create mode 100644 doc/forum/Get_annex.dotfiles__61__true_behavior_without_persistent_configuration__63__/comment_8_ae600abfb5a82f69981f59e9de55c056._comment create mode 100644 doc/forum/Get_annex.dotfiles__61__true_behavior_without_persistent_configuration__63__/comment_9_d97c211a0e87212ffd2617a96263faa2._comment create mode 100644 doc/forum/Get_files_in_repository_A__44___that_do_not_exist_in_repository_B.mdwn create mode 100644 doc/forum/Get_files_in_repository_A__44___that_do_not_exist_in_repository_B/comment_1_c09c45c64f75bd30deaae9c8d8633236._comment create mode 100644 doc/forum/Get_most_recent_git-annex_version_with_anaconda.mdwn create mode 100644 doc/forum/Get_most_recent_git-annex_version_with_anaconda/comment_1_2987d3516235e90621335d055426a808._comment create mode 100644 doc/forum/Get_most_recent_git-annex_version_with_anaconda/comment_2_3046a4711853c88ba7f763fb04b73a5a._comment create mode 100644 doc/forum/Get_most_recent_git-annex_version_with_anaconda/comment_3_ece2ad657025186c267aeb20405ea1e5._comment create mode 100644 doc/forum/Get_most_recent_git-annex_version_with_anaconda/comment_4_f54f3ef05da471ff4d370511e3629e05._comment create mode 100644 doc/forum/Get_most_recent_git-annex_version_with_anaconda/comment_5_59365f2d382103f1f8c30d4c52085fd6._comment create mode 100644 doc/forum/Getting__58___hGetChar__58___illegal_operation___40__handle_is_closed__41__.mdwn create mode 100644 doc/forum/Getting__58___hGetChar__58___illegal_operation___40__handle_is_closed__41__/comment_1_9ff60145d7dfb6785bb11f2a23040948._comment create mode 100644 doc/forum/Getting__58___hGetChar__58___illegal_operation___40__handle_is_closed__41__/comment_2_7c88ebd9d7cdf4a009aa2580cc55787d._comment create mode 100644 doc/forum/Getting__58___hGetChar__58___illegal_operation___40__handle_is_closed__41__/comment_3_976cb63e97774859023123536bdc9d99._comment create mode 100644 doc/forum/Getting_metadata.mdwn create mode 100644 doc/forum/Getting_metadata/comment_1_24bef8f59f370897d6fd6b2b43ed1f39._comment create mode 100644 doc/forum/Getting_started_with_Amazon_S3.mdwn create mode 100644 doc/forum/Getting_started_with_Amazon_S3/comment_1_f50883133d5d4903cc95c0dcaa52d052._comment create mode 100644 doc/forum/Getting_started_with_Amazon_S3/comment_2_e90aa3259d9a12cd67daa27d42d69ab5._comment create mode 100644 doc/forum/Getting_started_with_Amazon_S3/comment_3_c3adce7c0f29e71ed9dd07103ede2c1a._comment create mode 100644 doc/forum/Getting_the_status_of_a_remotely_changed_annex_file.mdwn create mode 100644 doc/forum/Getting_the_status_of_a_remotely_changed_annex_file/comment_1_e323c21d27bb0946993ba1438429c457._comment create mode 100644 doc/forum/Git-Annex_Android_sync_files_are_missing_on_Linuxx.mdwn create mode 100644 doc/forum/Git-Annex_Android_sync_files_are_missing_on_Linuxx/comment_1_72d7811990e78fba0b7fc2e1c7ee515f._comment create mode 100644 doc/forum/Git-Annex_Android_sync_files_are_missing_on_Linuxx/comment_2_cfb7139958ed24c1c64f8b133c99f336._comment create mode 100644 doc/forum/Git-Annex_with_Asustor_NAS.mdwn create mode 100644 doc/forum/Git-Annex_with_Asustor_NAS/comment_1_44445200e5b716caeec225972a5d5dce._comment create mode 100644 doc/forum/Git-annex_and_Microsoft_Office_files_on_OS_X.mdwn create mode 100644 doc/forum/Git-annex_and_Microsoft_Office_files_on_OS_X/comment_1_71fdd5e7061d6deb357290057804cc27._comment create mode 100644 doc/forum/Git-annex_assistant__58___where_are_deleted_files_and_older_versions_saved__63__.mdwn create mode 100644 doc/forum/Git-annex_assistant__58___where_are_deleted_files_and_older_versions_saved__63__/comment_10_645af86feb8506c3ea2134badac68e0b._comment create mode 100644 doc/forum/Git-annex_assistant__58___where_are_deleted_files_and_older_versions_saved__63__/comment_1_d9acd44c00676d814e19613d6fd276a2._comment create mode 100644 doc/forum/Git-annex_assistant__58___where_are_deleted_files_and_older_versions_saved__63__/comment_2_45928886d1ae4a76e2daefb355967729._comment create mode 100644 doc/forum/Git-annex_assistant__58___where_are_deleted_files_and_older_versions_saved__63__/comment_3_1249bf921ea7709b4f7ae25e613bf60a._comment create mode 100644 doc/forum/Git-annex_assistant__58___where_are_deleted_files_and_older_versions_saved__63__/comment_4_616cb76a510fa32c2aa48c25d24c6044._comment create mode 100644 doc/forum/Git-annex_assistant__58___where_are_deleted_files_and_older_versions_saved__63__/comment_5_100fc29a95923e5ef92eaf87d76bbc6f._comment create mode 100644 doc/forum/Git-annex_assistant__58___where_are_deleted_files_and_older_versions_saved__63__/comment_6_9b19ae8e8c0c70e3827c9f362c1c1dea._comment create mode 100644 doc/forum/Git-annex_assistant__58___where_are_deleted_files_and_older_versions_saved__63__/comment_7_0c1c76bb082c108f3074b725bcc272c9._comment create mode 100644 doc/forum/Git-annex_assistant__58___where_are_deleted_files_and_older_versions_saved__63__/comment_8_1d7c8c8c5b34cbc7166f8d4d52b91761._comment create mode 100644 doc/forum/Git-annex_assistant__58___where_are_deleted_files_and_older_versions_saved__63__/comment_9_2bfb2eaf1a72e0822341cfeba9058aa7._comment create mode 100644 doc/forum/Git-annex_assistant_configuration_file__40__s__41___location__40__s__41__.mdwn create mode 100644 doc/forum/Git-annex_assistant_configuration_file__40__s__41___location__40__s__41__/comment_1_5baffd4d6994bbcb23614b17777a0ffe._comment create mode 100644 doc/forum/Git-annex_deleted_all_my_files__44___how_can_I_recover_them__63__.mdwn create mode 100644 doc/forum/Git-annex_deleted_all_my_files__44___how_can_I_recover_them__63__/comment_1_65b41a6eb28261e04e4fe8732f97a1f1._comment create mode 100644 doc/forum/Git-annex_deleted_all_my_files__44___how_can_I_recover_them__63__/comment_2_200a869f335909566b9ddab3032fd5a2._comment create mode 100644 doc/forum/Git-annex_fsck_backend_warning.mdwn create mode 100644 doc/forum/Git-annex_fsck_backend_warning/comment_1_a504439397db6661788d916cb7c96da1._comment create mode 100644 doc/forum/Git-annex_fsck_backend_warning/comment_2_a5415299d07283f393319b37ba9335ff._comment create mode 100644 doc/forum/Git-annex_fsck_backend_warning/comment_3_300bbfdd90d18619e88310de5a128ef0._comment create mode 100644 doc/forum/Git-annex_init_gets_stuck_on_exFAT.mdwn create mode 100644 doc/forum/Git-annex_init_gets_stuck_on_exFAT/comment_1_48da28dbc7da82d4e06fd3ce7962dfc5._comment create mode 100644 doc/forum/Git-annex_link_to_different_file_names.mdwn create mode 100644 doc/forum/Git-annex_link_to_different_file_names/comment_1_17ab85276bcf495a656c7091753c086f._comment create mode 100644 doc/forum/Git-annex_sync_very_slow._Why__63___How_to_fix_this__63__.mdwn create mode 100644 doc/forum/Git-annex_sync_very_slow._Why__63___How_to_fix_this__63__/comment_1_e102345b520423eafb4c202a0d6e276d._comment create mode 100644 doc/forum/Git-annex_sync_very_slow._Why__63___How_to_fix_this__63__/comment_2_dd1cce225e4d4791b37dad5480936f76._comment create mode 100644 doc/forum/Git-annex_sync_very_slow._Why__63___How_to_fix_this__63__/comment_3_56c132612785da00b09f088c75f903a7._comment create mode 100644 doc/forum/Git-annex_sync_very_slow._Why__63___How_to_fix_this__63__/comment_4_b92198e15a0d6154c951cb731eca828a._comment create mode 100644 doc/forum/Git-annex_with_dumb_FAT32_devices_not_a_valid_use_case__63__.mdwn create mode 100644 doc/forum/Git-annex_with_dumb_FAT32_devices_not_a_valid_use_case__63__/comment_1_ee72caf2aeab4a8a2818f87653dc1cd2._comment create mode 100644 doc/forum/Git-annex_with_dumb_FAT32_devices_not_a_valid_use_case__63__/comment_2_3be98f57bcb2ba838046105276d1afd4._comment create mode 100644 doc/forum/Git-annex_with_dumb_FAT32_devices_not_a_valid_use_case__63__/comment_3_b17f2361b18420c950eef25d3fff8841._comment create mode 100644 doc/forum/Git-annex_with_dumb_FAT32_devices_not_a_valid_use_case__63__/comment_4_a8a79961d97fe773c1855632b4772c5b._comment create mode 100644 doc/forum/Git-annex_with_dumb_FAT32_devices_not_a_valid_use_case__63__/comment_5_da422adacdeb36163186a38f1aa6c06b._comment create mode 100644 doc/forum/Git-annex_with_dumb_FAT32_devices_not_a_valid_use_case__63__/comment_6_6f16af7d1668320d1b80472c76f892fb._comment create mode 100644 doc/forum/Git-annex_with_dumb_FAT32_devices_not_a_valid_use_case__63__/comment_7_2d9460736189575a8af99c50557a8e50._comment create mode 100644 doc/forum/GitBlit_as_a_centralized_repository.mdwn create mode 100644 doc/forum/GitBlit_as_a_centralized_repository/comment_1_06bedf5fbac45415e0cc81f41b25a5a0._comment create mode 100644 doc/forum/Git_Annex_Assistant_Occassionally_Loses_Files_and_Gives_Dangling_Symlink.mdwn create mode 100644 doc/forum/Git_Annex_Assistant_Occassionally_Loses_Files_and_Gives_Dangling_Symlink/comment_1_7b3cb1d52767b89cf46d57005bf57b06._comment create mode 100644 doc/forum/Git_Annex_Assistant_Occassionally_Loses_Files_and_Gives_Dangling_Symlink/comment_2_52ad16f63ec47b34485a0d0f4db9e2c8._comment create mode 100644 doc/forum/Git_Annex_Assistant_Occassionally_Loses_Files_and_Gives_Dangling_Symlink/comment_3_a60bc9a6e766c0f29835c088c0863cf5._comment create mode 100644 doc/forum/Git_Annex_Assistant_Occassionally_Loses_Files_and_Gives_Dangling_Symlink/comment_4_c8088fd093312685f130af07e5ca2e22._comment create mode 100644 doc/forum/Git_Annex_Assistant__58___How_to_add_a_remote__63__.mdwn create mode 100644 doc/forum/Git_Annex_Assistant__58___How_to_add_a_remote__63__/comment_1_d0a3d0090928790d5a05e9f8e5f05320._comment create mode 100644 doc/forum/Git_Annex_Assistant_won__39__t_backup_files_to_removable_drive.mdwn create mode 100644 doc/forum/Git_Annex_Assistant_won__39__t_backup_files_to_removable_drive/comment_1_a1d1ae9488924b08682b355aff51130d._comment create mode 100644 doc/forum/Git_Annex_Assistant_won__39__t_backup_files_to_removable_drive/comment_2_6649077583bc14730a08aaaca7ccb62e._comment create mode 100644 doc/forum/Git_Annex_Assistant_won__39__t_backup_files_to_removable_drive/comment_3_f359d9b9356de7ee10b9e725a011cc43._comment create mode 100644 doc/forum/Git_Annex_Sync_Delinks_Files.mdwn create mode 100644 doc/forum/Git_Annex_Sync_Delinks_Files/comment_1_8b03707777a9d8e38715cb77d2a0addc._comment create mode 100644 doc/forum/Git_Annex_Sync_Delinks_Files/comment_2_a625e7d88e321532ace103548b31b67b._comment create mode 100644 doc/forum/Git_Annex_Sync_Delinks_Files/comment_3_5278164dab570755ed58afe466dfad42._comment create mode 100644 doc/forum/Git_Annex_Sync_Delinks_Files/comment_4_e43ede0bdc20de9aa10ab6ce387d8582._comment create mode 100644 doc/forum/Git_Annex_Sync_Delinks_Files/comment_5_dc71987f0e19f04a920561201f9552b4._comment create mode 100644 doc/forum/Git_Annex_Sync_Delinks_Files/comment_6_257a89f81858659c4dac4d116e7cf0a3._comment create mode 100644 doc/forum/Git_Annex_Transfer_Protocols.mdwn create mode 100644 doc/forum/Git_Annex_Transfer_Protocols/comment_1_a870ec991078c95a6bb683d6962ab56e._comment create mode 100644 doc/forum/Git_Annex_Transfer_Protocols/comment_2_71419376ef50a679ea8f0f9e16991c17._comment create mode 100644 doc/forum/Git_Annex_Transfer_Protocols/comment_3_fea43664a500111ca99f4043e0dadb14._comment create mode 100644 doc/forum/Git_Annex_Transfer_Protocols/comment_4_56fb2dab1d4030c9820be32b495afdf0._comment create mode 100644 doc/forum/Git_Annex_Transfer_Protocols/comment_5_a6ec9c5a4a3c0bac1df87f1df9be140b._comment create mode 100644 doc/forum/Git_Annex_Transfer_Protocols/comment_6_1678452fb7114aeabcf0cc3d5f6c69b0._comment create mode 100644 doc/forum/Git_Annex_not_dropping_unused_content.mdwn create mode 100644 doc/forum/Git_Annex_not_dropping_unused_content/comment_1_da47b6af512b19cba077499f41455189._comment create mode 100644 doc/forum/Git_Annex_shirts_at_hellotux.com.mdwn create mode 100644 doc/forum/Git_Annex_shirts_at_hellotux.com/comment_1_fa72689070c39054d166d32fa144fabc._comment create mode 100644 doc/forum/Git_LFS_lock_feature.mdwn create mode 100644 doc/forum/Git_LFS_lock_feature/comment_1_8f5878db6dd2a21893cc6b5a1200b010._comment create mode 100644 doc/forum/Git_annex__44___bup__44___windows_and_remote_linux_issue.mdwn create mode 100644 doc/forum/Git_annex__44___bup__44___windows_and_remote_linux_issue/comment_1_c9239f9c67b2441ab0e1ac42c53db531._comment create mode 100644 doc/forum/Git_annex___39__corrupting__39___itself.mdwn create mode 100644 doc/forum/Git_annex___39__corrupting__39___itself/comment_1_bcf50a215e2f8771e098aadfff4c300c._comment create mode 100644 doc/forum/Git_annex___39__corrupting__39___itself/comment_3_75f957e7be6c1ad8936c0a2a5374db3e._comment create mode 100644 doc/forum/Git_annex___39__corrupting__39___itself/comment_3_ab062b1df3b55fd49852a6220c98249e._comment create mode 100644 doc/forum/Git_annex___39__corrupting__39___itself/comment_4_45974f60a81ed2d00b87ffb1a7963c6f._comment create mode 100644 doc/forum/Git_annex_assistant_can__39__t_find_rsync_nor_git-annex_on_server.mdwn create mode 100644 doc/forum/Git_annex_assistant_can__39__t_find_rsync_nor_git-annex_on_server/comment_1_75c599cc26e7d3645f69173861d4f8be._comment create mode 100644 doc/forum/Git_annex_assistant_can__39__t_find_rsync_nor_git-annex_on_server/comment_2_496e2f3a61b609ebb28ab55e5c30022b._comment create mode 100644 doc/forum/Git_annex_assistant_can__39__t_find_rsync_nor_git-annex_on_server/comment_3_e202a6dd2803f733bd30ec8b6ddbe7bf._comment create mode 100644 doc/forum/Git_annex_assistant_in_command_line.mdwn create mode 100644 doc/forum/Git_annex_assistant_in_command_line/comment_1_ce05226307ade8db90ada2dbf290bd58._comment create mode 100644 doc/forum/Git_annex_assistant_on_EC2.mdwn create mode 100644 doc/forum/Git_annex_assistant_on_EC2/comment_1_bbdb4611373117a2176c225378110a05._comment create mode 100644 doc/forum/Git_annex_assistant_on_EC2/comment_2_614ed11f7134137d6376d36a61c293f5._comment create mode 100644 doc/forum/Git_annex_drop.mdwn create mode 100644 doc/forum/Git_annex_drop/comment_1_541399d5fff0db0627c786f5e056fabb._comment create mode 100644 doc/forum/Git_annex_drop/comment_2_423ffd4abca9dbb8dba8ce887dee5faf._comment create mode 100644 doc/forum/Git_annex_hangs.mdwn create mode 100644 doc/forum/Git_annex_hangs/comment_10_ce5355b358f1acc63270331f3749fdcd._comment create mode 100644 doc/forum/Git_annex_hangs/comment_11_e0b4616c25405fa3c496f7e85800ac43._comment create mode 100644 doc/forum/Git_annex_hangs/comment_12_053666d256e26803b911d68622257cd5._comment create mode 100644 doc/forum/Git_annex_hangs/comment_13_f28528c9b9766fe8e2d344e5f27ade65._comment create mode 100644 doc/forum/Git_annex_hangs/comment_1_e6b854d4625ae3015aea9c5de71a28ef._comment create mode 100644 doc/forum/Git_annex_hangs/comment_2_4f848771e60c38321a97361b0d1b33dd._comment create mode 100644 doc/forum/Git_annex_hangs/comment_3_a07abdd1dc21a69ad6be0526edaeffc1._comment create mode 100644 doc/forum/Git_annex_hangs/comment_4_2ba5992c32753ed03ddd5c12264e9acf._comment create mode 100644 doc/forum/Git_annex_hangs/comment_5_5fd749f92343079b3916a4d32ddf39c7._comment create mode 100644 doc/forum/Git_annex_hangs/comment_6_4abe6aa966feea4e1881f6a2fbe7a007._comment create mode 100644 doc/forum/Git_annex_hangs/comment_7_f3ea42dc6699275143ba44e7f57e7d5e._comment create mode 100644 doc/forum/Git_annex_hangs/comment_8_1bad17001364d192e0d9affe5f0ea554._comment create mode 100644 doc/forum/Git_annex_hangs/comment_9_07ae4582a4403b4f0185dbc1830642ad._comment create mode 100644 doc/forum/Git_annex_status_always_showing_annexed_files_as_modified.mdwn create mode 100644 doc/forum/Git_annex_status_always_showing_annexed_files_as_modified/comment_1_b6e8f634187d1f5840641633cb82301a._comment create mode 100644 doc/forum/Git_annex_status_always_showing_annexed_files_as_modified/comment_2_ab24dacf101a1a7e33e5976f72f6fe05._comment create mode 100644 doc/forum/Git_annex_status_always_showing_annexed_files_as_modified/comment_3_cade18a9487c583329249c2d3e72ca46._comment create mode 100644 doc/forum/Git_annex_status_always_showing_annexed_files_as_modified/comment_4_1d2281f79cd0c2a1a3599cae42df0187._comment create mode 100644 doc/forum/Git_annex_status_always_showing_annexed_files_as_modified/comment_5_5f2f2275ee9de47273671a8009217fb9._comment create mode 100644 doc/forum/Git_annex_status_always_showing_annexed_files_as_modified/comment_6_54155343eef8c6f95574dffb3910fc61._comment create mode 100644 doc/forum/Git_annex_status_always_showing_annexed_files_as_modified/comment_7_cbf7035b218566a9fa1cb656290a9cf0._comment create mode 100644 doc/forum/Git_annex_syncing_speed__44___possible__63__.mdwn create mode 100644 doc/forum/Git_annex_syncing_speed__44___possible__63__/comment_1_8aa224b3016dc38e4cea8ee1865a3ab6._comment create mode 100644 doc/forum/Git_filters__58___smudgeToFile_and_cleanFromFile.mdwn create mode 100644 doc/forum/Git_filters__58___smudgeToFile_and_cleanFromFile/comment_1_f21dc5255ce986ef0317503ebd40b4f5._comment create mode 100644 doc/forum/Git_filters__58___smudgeToFile_and_cleanFromFile/comment_2_4ded2a4b866102450ef96c76b7be94fe._comment create mode 100644 doc/forum/Git_remote__63_____40__bitbucket__44___github__41__.mdwn create mode 100644 doc/forum/Git_remote__63_____40__bitbucket__44___github__41__/comment_1_8a6de753ac0aa56f470b2aefca628388._comment create mode 100644 doc/forum/Git_repos_in_git_annex__63__.mdwn create mode 100644 doc/forum/Git_repos_in_git_annex__63__/comment_1_8aaa0d83e8fcd5997f6b0097f3b21622._comment create mode 100644 doc/forum/Git_repos_in_git_annex__63__/comment_2_8546341a561a5f55216c2f437f8ec0c2._comment create mode 100644 doc/forum/Git_repos_in_git_annex__63__/comment_3_88e37911a0280d817559b2d51ddb1d4e._comment create mode 100644 doc/forum/Git_repositories_in_the_annex__63__.mdwn create mode 100644 doc/forum/Github_pull_request_with_git-annex.mdwn create mode 100644 doc/forum/Github_pull_request_with_git-annex/comment_1_03023d2fba47e84d03573d996e8366cf._comment create mode 100644 doc/forum/Gitolite_problems.mdwn create mode 100644 doc/forum/Gitolite_problems/comment_1_3a41f9b6bddc060b1fa9e35b9ce8b55f._comment create mode 100644 doc/forum/Gitolite_problems/comment_2_ef156bf7a1e17496c5fc1f592d45f2ad._comment create mode 100644 doc/forum/HTTP_uploads.mdwn create mode 100644 doc/forum/HTTP_uploads/comment_1_e22213816c53e6e3555532c452eceb49._comment create mode 100644 doc/forum/HTTP_uploads/comment_2_d99641f1908073724f45dc3b170f3794._comment create mode 100644 doc/forum/Handling_a_large_number_of_files.mdwn create mode 100644 doc/forum/Handling_a_large_number_of_files/comment_1_33d2e19fbfdf5a0bfb7b4fbc840824a2._comment create mode 100644 doc/forum/Handling_a_large_number_of_files/comment_2_a46bde96e3be5a105eb1c87bf637f8b6._comment create mode 100644 doc/forum/Handling_a_large_number_of_files/comment_3_c6564d8cfc217c5b70b2a7a8fe60039b._comment create mode 100644 doc/forum/Handling_a_large_number_of_files/comment_4_f9e25d63417d0354de158c47235cb3be._comment create mode 100644 doc/forum/Handling_merge_conflicts_in_direct_mode.mdwn create mode 100644 doc/forum/Handling_merge_conflicts_in_direct_mode/comment_1_7046393b0c4329466a0d6803b718f786._comment create mode 100644 doc/forum/Handling_permissions_in_a_shared_folder.mdwn create mode 100644 doc/forum/Handling_permissions_in_a_shared_folder/comment_1_220b33912339f06fbc9f6c9fbe1a4756._comment create mode 100644 doc/forum/Handling_permissions_in_a_shared_folder/comment_2_f0d010731ad51bf8512e5ff93864fb53._comment create mode 100644 doc/forum/Handling_permissions_in_a_shared_folder/comment_3_9ceff336ab112ada10db1f22436dee43._comment create mode 100644 doc/forum/Handling_permissions_in_a_shared_folder/comment_4_9ce6d042fc1826d814f8362ae2716251._comment create mode 100644 doc/forum/Handling_web_special_remote_when_content_changes__63__.mdwn create mode 100644 doc/forum/Handling_web_special_remote_when_content_changes__63__/comment_1_05ee6a1b1943ef3c90634e52233bde1c._comment create mode 100644 doc/forum/Handling_web_special_remote_when_content_changes__63__/comment_2_48d82e391812d8ec0d4e6562d0607fe7._comment create mode 100644 doc/forum/Hardlinks_instead_of_symlinks_in_locked+thin_mode.mdwn create mode 100644 doc/forum/Hardlinks_instead_of_symlinks_in_locked+thin_mode/comment_1_ae978190d2d4fc1c4cdadc8256e6ca3d._comment create mode 100644 doc/forum/Hardlinks_instead_of_symlinks_in_locked+thin_mode/comment_2_6498a44801996cc5a412558c75f6157e._comment create mode 100644 doc/forum/Hardlinks_instead_of_symlinks_in_locked+thin_mode/comment_3_4bd03153c8ad61596ba55b719ad287ee._comment create mode 100644 doc/forum/Hashes_instead_of_content_in_files.mdwn create mode 100644 doc/forum/Hashes_instead_of_content_in_files/comment_1_800d875c0d980614792207641cedb3ea._comment create mode 100644 doc/forum/Hashes_instead_of_content_in_files/comment_2_a111296eecf7d69ff30f6a82e9f1e6d4._comment create mode 100644 doc/forum/Hashes_instead_of_content_in_files/comment_3_574964b83563df3afea9049754b1cfa2._comment create mode 100644 doc/forum/Hashes_instead_of_content_in_files/comment_4_67733580e8f8806b5036406e6712b6a1._comment create mode 100644 doc/forum/Help_Windows_walkthrough.mdwn create mode 100644 doc/forum/Help_Windows_walkthrough/comment_1_5fc22393a1b28235eabb2871ad83d0a7._comment create mode 100644 doc/forum/Help_fixing_S3_mistake.mdwn create mode 100644 doc/forum/Help_fixing_S3_mistake/comment_1_dc60d08da4c0b90705b0b88b4c834f05._comment create mode 100644 doc/forum/Help_fixing_S3_mistake/comment_2_f105714b9bac7f45fdcb9a47e77255ac._comment create mode 100644 doc/forum/Help_fixing_S3_mistake/comment_3_a00bca3b6b0d7b6c20ca1ca749c93469._comment create mode 100644 doc/forum/Help_fixing_S3_mistake/comment_4_34333d0f3eeaf2929089535632759ba1._comment create mode 100644 doc/forum/Help_fixing_S3_mistake/comment_5_7060bcd3424caab3570dcc7cbd3df93e._comment create mode 100644 doc/forum/Help_on_my_usecase.mdwn create mode 100644 doc/forum/Help_on_my_usecase/comment_1_a35b35c7927640f21d47c3df4f91dabb._comment create mode 100644 doc/forum/Help_with_assistant_and_Adobe_Lightroom.mdwn create mode 100644 doc/forum/Help_with_assistant_and_Adobe_Lightroom/comment_1_3adf9f5c60558b3c70a8aa041dbbe966._comment create mode 100644 doc/forum/Help_with_get.mdwn create mode 100644 doc/forum/Help_with_get/comment_1_439c7562d94a969fd841cc44628abedd._comment create mode 100644 doc/forum/Help_with_get/comment_2_137f89ea9c381cdbf57da78308a46078._comment create mode 100644 doc/forum/Help_with_get/comment_3_f523e44daca53b3d99350e0d3f7a8874._comment create mode 100644 doc/forum/Help_with_get/comment_4_863d03a8e52335d8a210320d8a02c553._comment create mode 100644 doc/forum/Help_with_get/comment_5_92e48d21fd83c0f7e69a5bb7b4c4f4ee._comment create mode 100644 doc/forum/Help_with_git-annex_and_controlmaster.mdwn create mode 100644 doc/forum/Help_with_git-annex_and_controlmaster/comment_1_2742e65d9faebab80bc5fa0877ef7d29._comment create mode 100644 doc/forum/Help_with_git-annex_and_controlmaster/comment_2_5e57d563d351cc8c850c9cc4726ad23b._comment create mode 100644 doc/forum/Help_with_git-annex_and_controlmaster/comment_3_4fe0973f6b7f912e2e4163ebf5dfc5d4._comment create mode 100644 doc/forum/Help_with_git-annex_and_controlmaster/comment_4_51312d1662d0794e4258551c59877434._comment create mode 100644 doc/forum/Help_with_git-annex_and_controlmaster/comment_5_0b4e2314c23df5eda18661c245f9f057._comment create mode 100644 doc/forum/Help_with_syncing_file_contents.mdwn create mode 100644 doc/forum/Help_with_syncing_file_contents/comment_1_7ec34de3140983739080115c82966bf5._comment create mode 100644 doc/forum/Help_with_syncing_file_contents/comment_2_7dba58d3c62d6f64a270298e4e4329a4._comment create mode 100644 doc/forum/Help_with_syncing_file_contents/comment_3_b26cfa20dc81517d93e760f4809bdc24._comment create mode 100644 doc/forum/HowTo_Conflict_Resolution.mdwn create mode 100644 doc/forum/HowTo_Conflict_Resolution/comment_1_81c06a0590ee828749b8d07e008028bb._comment create mode 100644 doc/forum/HowTo_Conflict_Resolution/comment_2_e0ec78f09e5aba83ad3a7252695e4d96._comment create mode 100644 doc/forum/HowTo_Conflict_Resolution/comment_3_495aea6e73fd7a2d7a387f539496ac3a._comment create mode 100644 doc/forum/HowTo_Conflict_Resolution/comment_4_b209d4527bec4620e1014fe759cbdde7._comment create mode 100644 doc/forum/HowTo_Conflict_Resolution/comment_5_446186626e5b2d08d078e3b48be06bfa._comment create mode 100644 doc/forum/HowTo_Conflict_Resolution/comment_6_83cafddb480fa9e5b5d87d27b994b2bc._comment create mode 100644 doc/forum/How_To_Permanently_Delete_a_File__63__.mdwn create mode 100644 doc/forum/How_To_Permanently_Delete_a_File__63__/comment_1_7f2cefb0991789be5a960eb9c0a9df3f._comment create mode 100644 doc/forum/How_To_Permanently_Delete_a_File__63__/comment_2_d13b456c5b3990082c16e78a50f5db91._comment create mode 100644 doc/forum/How_To_Permanently_Delete_a_File__63__/comment_3_854c17ff8cb38486c4bef618d1e94919._comment create mode 100644 doc/forum/How_To_Permanently_Delete_a_File__63__/comment_4_9572ad02bbf6845b1ab6d7c612c12a2a._comment create mode 100644 doc/forum/How_To_Permanently_Delete_a_File__63__/comment_5_9c28faabb7d7bd1e83d551e2938d3532._comment create mode 100644 doc/forum/How_are_people_handling_the_v8_repo_upgrade__63__.mdwn create mode 100644 doc/forum/How_are_people_handling_the_v8_repo_upgrade__63__/comment_1_30fb300ec5dbdb166f2bb979c6f2ee78._comment create mode 100644 doc/forum/How_are_people_handling_the_v8_repo_upgrade__63__/comment_2_23cfa4b9abe96e4477f06c5271b706b2._comment create mode 100644 doc/forum/How_are_people_handling_the_v8_repo_upgrade__63__/comment_3_b05a8c63d2594290769aeeaabc91f491._comment create mode 100644 doc/forum/How_big_can_a_git-annex_repo_get_and_still_be_reliable_and_fast__63__.mdwn create mode 100644 doc/forum/How_big_can_a_git-annex_repo_get_and_still_be_reliable_and_fast__63__/comment_1_99e7e1b178bbb17fffea0892538d4049._comment create mode 100644 doc/forum/How_big_can_a_git-annex_repo_get_and_still_be_reliable_and_fast__63__/comment_2_6a7a3c372599eed7c52d5f54e5287577._comment create mode 100644 doc/forum/How_big_can_a_git-annex_repo_get_and_still_be_reliable_and_fast__63__/comment_3_cc62f722b3e1db7d75d6976ef3854f94._comment create mode 100644 doc/forum/How_can_I_determine_why_a_given_file_is___34__used__34____63__.mdwn create mode 100644 doc/forum/How_can_I_determine_why_a_given_file_is___34__used__34____63__/comment_1_30217e593a04cefa30619025d0a58108._comment create mode 100644 doc/forum/How_can_I_determine_why_a_given_file_is___34__used__34____63__/comment_1_6793035e1c0fb329b3094bf66a982fa3._comment create mode 100644 doc/forum/How_can_I_determine_why_a_given_file_is___34__used__34____63__/comment_3_7cc944d96f4620e98fe22a554684ad22._comment create mode 100644 doc/forum/How_can_I_determine_why_a_given_file_is___34__used__34____63__/comment_4_8323e9160d81a4a65f2ca545c4469869._comment create mode 100644 doc/forum/How_can_I_determine_why_a_given_file_is___34__used__34____63__/comment_5_a74ece6acb2184c4990b434d7357ea00._comment create mode 100644 doc/forum/How_can_I_recover_from_misadventure__63__.mdwn create mode 100644 doc/forum/How_can_I_recover_from_misadventure__63__/comment_1_1e8ce32e1e8adf32acf7af28c7ab0d0b._comment create mode 100644 doc/forum/How_can_I_recover_from_misadventure__63__/comment_2_94f5435529802ea9d1980ee07025c6eb._comment create mode 100644 doc/forum/How_can_I_recover_from_misadventure__63__/comment_3_484fc154c68ba59939aae4452c663ce6._comment create mode 100644 doc/forum/How_can_I_use_git-annex_get_a_list_of_files_in_directory_that_have_content__63___.mdwn create mode 100644 doc/forum/How_can_I_use_git-annex_get_a_list_of_files_in_directory_that_have_content__63___/comment_1_e897d8fc10474cf865279dc22f22ecb7._comment create mode 100644 doc/forum/How_can_I_use_git-annex_get_a_list_of_files_in_directory_that_have_content__63___/comment_2_3af326205db6ee04f2a8644baa1dd566._comment create mode 100644 doc/forum/How_do_I_backup_my_data_to_blue_ray_disks__63__.mdwn create mode 100644 doc/forum/How_do_I_backup_my_data_to_blue_ray_disks__63__/comment_1_ea2f6ca0768c55fa136606cf091471cd._comment create mode 100644 doc/forum/How_do_I_backup_my_data_to_blue_ray_disks__63__/comment_2_d79387905af9f8dce77f9aa85f2d6a03._comment create mode 100644 doc/forum/How_do_I_cleanly_remove_an_Android_git-annex_installation__63__.mdwn create mode 100644 doc/forum/How_do_I_cleanly_remove_an_Android_git-annex_installation__63__/comment_1_e14757c2c106770c2d7069ace4987b3b._comment create mode 100644 doc/forum/How_do_I_do_with_.gitrefs__47_____63__.mdwn create mode 100644 doc/forum/How_do_I_do_with_.gitrefs__47_____63__/comment_1_5e235af2ea13fd4f6a226c842f69965e._comment create mode 100644 doc/forum/How_do_I_do_with_.gitrefs__47_____63__/comment_2_50d0c643537175b514d5eae604fb5bea._comment create mode 100644 doc/forum/How_do_I_do_with_.gitrefs__47_____63__/comment_3_3d342c32b14c7edbece596ba970a8415._comment create mode 100644 doc/forum/How_do_I_dropunused_with_an_rsync_remote__63__.mdwn create mode 100644 doc/forum/How_do_I_dropunused_with_an_rsync_remote__63__/comment_1_8db3cb5348b845eb99c2c829957db9ea._comment create mode 100644 doc/forum/How_do_I_dropunused_with_an_rsync_remote__63__/comment_2_6cc909d9d74bc1ccb8a7b0d7d234c7cd._comment create mode 100644 doc/forum/How_do_I_dropunused_with_an_rsync_remote__63__/comment_3_f24d678e4192a70322aa164ed9b71fc8._comment create mode 100644 doc/forum/How_do_I_dropunused_with_an_rsync_remote__63__/comment_4_9233decd0aaf9211447f36e0d9346445._comment create mode 100644 doc/forum/How_do_I_dropunused_with_an_rsync_remote__63__/comment_5_e1deb110f752e5495d5c77ec444abac5._comment create mode 100644 doc/forum/How_do_I_get_rid_of_a_wrong_remote_uuid__63__.mdwn create mode 100644 doc/forum/How_do_I_get_rid_of_a_wrong_remote_uuid__63__/comment_1_b3c215cedba51fb47992ef10c60d6acc._comment create mode 100644 doc/forum/How_do_I_get_rid_of_a_wrong_remote_uuid__63__/comment_2_85415e1fceb737919cc1cd9f37242458._comment create mode 100644 doc/forum/How_do_I_get_rid_of_a_wrong_remote_uuid__63__/comment_3_fb3a591dc60182f7922fc2b5c24f50f1._comment create mode 100644 doc/forum/How_do_I_get_rid_of_a_wrong_remote_uuid__63__/comment_4_aed0be32e579c7a39c63aa7e3ec5f67b._comment create mode 100644 doc/forum/How_do_I_get_rid_of_a_wrong_remote_uuid__63__/comment_5_0c9a6c8a92d6c6e04ae3a8349b799c60._comment create mode 100644 doc/forum/How_do_I_hide_files_not_present_in_the_local_annex__63__.mdwn create mode 100644 doc/forum/How_do_I_hide_files_not_present_in_the_local_annex__63__/comment_1_005e9254a1239164df34ab5fbf2115a8._comment create mode 100644 doc/forum/How_do_I_hide_files_not_present_in_the_local_annex__63__/comment_2_f376604560c36a0aa5afa4619797b396._comment create mode 100644 doc/forum/How_do_I_hide_files_not_present_in_the_local_annex__63__/comment_5_1ed5e10e51078a0aa7e6968ef48687a3._comment create mode 100644 doc/forum/How_do_I_list_links_with_0_copies__63__.mdwn create mode 100644 doc/forum/How_do_I_list_links_with_0_copies__63__/comment_1_ee222f0e227f1c65f84f73af399239e5._comment create mode 100644 doc/forum/How_do_I_list_links_with_0_copies__63__/comment_2_1528b3c96d6ad5637c2fdda33057c12f._comment create mode 100644 doc/forum/How_do_I_list_links_with_0_copies__63__/comment_3_e629a5393e56755a42581be9f6942adb._comment create mode 100644 doc/forum/How_do_I_list_links_with_0_copies__63__/comment_4_61a441f83ef690da8e799b0503526c47._comment create mode 100644 doc/forum/How_do_I_list_links_with_0_copies__63__/comment_5_66def7cfeef20866eb3caced831b0d3e._comment create mode 100644 doc/forum/How_do_I_revert_back_to_specific_commit_with_git_annex.mdwn create mode 100644 doc/forum/How_do_I_revert_back_to_specific_commit_with_git_annex/comment_1_ab8896c4f0e20fb351477e3dc92a35d8._comment create mode 100644 doc/forum/How_do_I_revert_back_to_specific_commit_with_git_annex/comment_2_8f02d0c400d22866e38cc521dd55b2c2._comment create mode 100644 doc/forum/How_do_I_revert_back_to_specific_commit_with_git_annex/comment_3_1b84261a9e6389bcad1766b82add4930._comment create mode 100644 doc/forum/How_do_I_revert_back_to_specific_commit_with_git_annex/comment_4_577f586843c1d7e54d115796988f912d._comment create mode 100644 doc/forum/How_do_I_set_up_git_annex_with_nextcloud.mdwn create mode 100644 doc/forum/How_do_I_set_up_git_annex_with_nextcloud/comment_1_2528e595b04232de60571279ded4c2e8._comment create mode 100644 doc/forum/How_do_I_set_up_git_annex_with_nextcloud/comment_2_562dbc96302644f915a0b8e33428c69a._comment create mode 100644 doc/forum/How_do_I_set_up_git_annex_with_nextcloud/comment_3_7fa312e85acd3f9afbfd97d46057e6db._comment create mode 100644 doc/forum/How_do_I_set_up_git_annex_with_nextcloud/comment_4_7980af82df895cdd4b5c527bbb2f4c72._comment create mode 100644 doc/forum/How_do_I_set_up_git_annex_with_nextcloud/comment_5_1fe66285d3369da85c08d8c69ad9746a._comment create mode 100644 doc/forum/How_do_I_sync_files_from_mobile_to_a_repo__63__.mdwn create mode 100644 doc/forum/How_do_I_sync_files_from_mobile_to_a_repo__63__/comment_1_fc914b5998a09943fc8c1917a0e36096._comment create mode 100644 doc/forum/How_do_I_sync_files_from_mobile_to_a_repo__63__/comment_2_fd5257eff7f94971557c031a94ac2766._comment create mode 100644 doc/forum/How_do_I_sync_files_from_mobile_to_a_repo__63__/comment_3_5a11c45f92bae1328a5120945bee1fa0._comment create mode 100644 doc/forum/How_do_I_sync_files_from_mobile_to_a_repo__63__/comment_4_404a8f9daa86c20a046b4c9f9051dfc0._comment create mode 100644 doc/forum/How_do_I_sync_files_from_mobile_to_a_repo__63__/comment_5_3dcdaef370d0df38e7285f1fa11c6bb3._comment create mode 100644 doc/forum/How_do_you_know_when_something_fails_a_fsck__63__.mdwn create mode 100644 doc/forum/How_do_you_know_when_something_fails_a_fsck__63__/comment_1_1c14981916dd55376d5e9f95023556cb._comment create mode 100644 doc/forum/How_does_addurl_work_with_claimurl_on_external_special_remotes__63__.mdwn create mode 100644 doc/forum/How_does_addurl_work_with_claimurl_on_external_special_remotes__63__/comment_1_3ee29c9b0239af732d3734855417dd5a._comment create mode 100644 doc/forum/How_does_git-annex_handle_rsyncing_between_different_OSes_with_regards_to_UTF-8__63__.mdwn create mode 100644 doc/forum/How_does_git-annex_handle_rsyncing_between_different_OSes_with_regards_to_UTF-8__63__/comment_1_f4b439f7d9ce20d4b5dc8d728cb2e180._comment create mode 100644 doc/forum/How_does_git-annex_handle_rsyncing_between_different_OSes_with_regards_to_UTF-8__63__/comment_2_7393a4b2e94f9d36c3c9ca977a8f67b6._comment create mode 100644 doc/forum/How_does_git-annex_handle_rsyncing_between_different_OSes_with_regards_to_UTF-8__63__/comment_3_a38e2bbe229cb7e1f4f334bd93d91656._comment create mode 100644 doc/forum/How_does_git_annex_handle_swp_files.mdwn create mode 100644 doc/forum/How_does_git_annex_handle_swp_files/comment_1_8f0b81139fb66f28f9262e919692ecbd._comment create mode 100644 doc/forum/How_does_one_change_git-annex_assistant__39__s_web_browser__63__.mdwn create mode 100644 doc/forum/How_does_one_change_git-annex_assistant__39__s_web_browser__63__/comment_1_f4402eabda2327da3a0bbc64ed3baf9a._comment create mode 100644 doc/forum/How_does_one_change_git-annex_assistant__39__s_web_browser__63__/comment_2_cdb41f2c7b6bc5bf40d88582dcbf45aa._comment create mode 100644 doc/forum/How_does_one_change_git-annex_assistant__39__s_web_browser__63__/comment_3_ca75e928c245eb23a02b5f40ec69cbb1._comment create mode 100644 doc/forum/How_does_one_change_git-annex_assistant__39__s_web_browser__63__/comment_4_1635f136909711295b9b70d1255e0378._comment create mode 100644 doc/forum/How_does_one_change_git-annex_assistant__39__s_web_browser__63__/comment_5_ee0cbe9498c518de98480a2ad229f685._comment create mode 100644 doc/forum/How_does_one_change_git-annex_assistant__39__s_web_browser__63__/comment_6_799b9d9d3ffbc2c14eca8d442e2aff8c._comment create mode 100644 doc/forum/How_does_one_change_git-annex_assistant__39__s_web_browser__63__/comment_7_71ff45948487e9ac8de809a5ccc3d874._comment create mode 100644 doc/forum/How_does_one_change_the_number_of_simultaneous_uploads.mdwn create mode 100644 doc/forum/How_does_one_change_the_number_of_simultaneous_uploads/comment_1_d5559994ee45a5c185a55c9a4d824aa4._comment create mode 100644 doc/forum/How_stop_annex_from_annexing_a_file_with___34__git_add__34__.mdwn create mode 100644 doc/forum/How_stop_annex_from_annexing_a_file_with___34__git_add__34__/comment_1_68ed73d8898bf2ce0a14e0e5909cc64b._comment create mode 100644 doc/forum/How_stop_annex_from_annexing_a_file_with___34__git_add__34__/comment_2_176a92a6ce5d8f356dafc29021242b2d._comment create mode 100644 doc/forum/How_stop_annex_from_annexing_a_file_with___34__git_add__34__/comment_3_0cdd9683709d55bb7340fb41fef265fa._comment create mode 100644 doc/forum/How_to_add_dotfiles_in_direct_mode__63__.mdwn create mode 100644 doc/forum/How_to_add_dotfiles_in_direct_mode__63__/comment_1_d62d4b9ae5f1ec825fc58090689f7571._comment create mode 100644 doc/forum/How_to_add_dotfiles_in_direct_mode__63__/comment_2_c7269cde1db02069149268b6c6a50786._comment create mode 100644 doc/forum/How_to_allow_clones_to_get_files_via_URL__63__.mdwn create mode 100644 doc/forum/How_to_cancel_an_add__63__.mdwn create mode 100644 doc/forum/How_to_cancel_an_add__63__/comment_1_f768ce5dc7c76f96ee6eb352f167be44._comment create mode 100644 doc/forum/How_to_change_the_name_of_a_repo_on_S3__63__.mdwn create mode 100644 doc/forum/How_to_change_the_name_of_a_repo_on_S3__63__/comment_1_be74d63e1951f515948d232e096b4862._comment create mode 100644 doc/forum/How_to_change_the_name_of_a_repo_on_S3__63__/comment_2_d54a7163cfe9a94b7ba337860958e5c5._comment create mode 100644 doc/forum/How_to_completely_remove_tracking_of_a_deleted_file_in_direct_mode.mdwn create mode 100644 doc/forum/How_to_completely_remove_tracking_of_a_deleted_file_in_direct_mode/comment_1_c6bd2ef90516dde928ff18ded36df625._comment create mode 100644 doc/forum/How_to_copy__47__duplicate_all_data_from_rsync__47__ssh_backend_to_other_backend__63__.mdwn create mode 100644 doc/forum/How_to_copy__47__duplicate_all_data_from_rsync__47__ssh_backend_to_other_backend__63__/comment_1_7973928b1aa9e0fcfeb6bf80885441f5._comment create mode 100644 doc/forum/How_to_deal_with_renamed_files_in_direct_mode__63__.mdwn create mode 100644 doc/forum/How_to_deal_with_renamed_files_in_direct_mode__63__/comment_1_fe38fedbbc9e4a9e13bf19950e63c7ac._comment create mode 100644 doc/forum/How_to_deal_with_spotlight_and_macOS.mdwn create mode 100644 doc/forum/How_to_deal_with_spotlight_and_macOS/comment_1_3d76fbb8f13bd66d729819a4d037ab4f._comment create mode 100644 doc/forum/How_to_debug_failing_sync.mdwn create mode 100644 doc/forum/How_to_debug_failing_sync/comment_1_a597b868182e55e5f39394f154740534._comment create mode 100644 doc/forum/How_to_debug_failing_sync/comment_2_db0a5652d76e4e568a4d7808195bc59c._comment create mode 100644 doc/forum/How_to_define_a_balanced_prefered_content.mdwn create mode 100644 doc/forum/How_to_define_a_balanced_prefered_content/comment_1_d4c94791a5fc7d2e618a7e11bc5db569._comment create mode 100644 doc/forum/How_to_define_an_alternative_remote_url_for_a_git_remote_repository__63__.mdwn create mode 100644 doc/forum/How_to_define_an_alternative_remote_url_for_a_git_remote_repository__63__/comment_1_52918b5ec25e55837215439fe1bb1a14._comment create mode 100644 doc/forum/How_to_define_an_alternative_remote_url_for_a_git_remote_repository__63__/comment_2_3a1567c9f484b5e12e5560cdcc2cfddd._comment create mode 100644 doc/forum/How_to_define_an_alternative_remote_url_for_a_git_remote_repository__63__/comment_3_48c3a80c14a85f27d742482b2ccbe628._comment create mode 100644 doc/forum/How_to_delete_a_file_in_direct_mode__63__.mdwn create mode 100644 doc/forum/How_to_delete_a_file_in_direct_mode__63__/comment_1_995f3b8cf511921719774f8911e24907._comment create mode 100644 doc/forum/How_to_delete_a_remote__63__.mdwn create mode 100644 doc/forum/How_to_delete_a_remote__63__/comment_1_8cba186bb67079ff41bf6d0b04613f4a._comment create mode 100644 doc/forum/How_to_delete_a_remote__63__/comment_2_33c429ffa7e9e2ed9c5fac760ee8e82c._comment create mode 100644 doc/forum/How_to_delete_a_remote__63__/comment_3_e9c5508092ca2983f458b16bf1e07082._comment create mode 100644 doc/forum/How_to_delete_a_remote__63__/comment_4_688a8473d074830303133ba939438084._comment create mode 100644 doc/forum/How_to_delete_a_remote__63__/comment_5_de7dff2dc4357d8cc617d86a06e35b1b._comment create mode 100644 doc/forum/How_to_destroy_a_master_annex_and_all_remotes_with_git_annex_assistant_and_ext4.mdwn create mode 100644 doc/forum/How_to_destroy_a_master_annex_and_all_remotes_with_git_annex_assistant_and_ext4/comment_1_42ca6cfbbb79fe63514805b8119ac16b._comment create mode 100644 doc/forum/How_to_destroy_a_master_annex_and_all_remotes_with_git_annex_assistant_and_ext4/comment_2_c94ce6a9767c624e2445a7d9eea40396._comment create mode 100644 doc/forum/How_to_destroy_a_master_annex_and_all_remotes_with_git_annex_assistant_and_ext4/comment_3_bcda51053b62bbb20ce71a59469e1b26._comment create mode 100644 doc/forum/How_to_destroy_a_master_annex_and_all_remotes_with_git_annex_assistant_and_ext4/comment_4_48e5b9eae920e5f13812de8d6f6bc640._comment create mode 100644 doc/forum/How_to_destroy_a_master_annex_and_all_remotes_with_git_annex_assistant_and_ext4/comment_5_787c0bfdc1d309db1486c3a37723a957._comment create mode 100644 doc/forum/How_to_destroy_a_master_annex_and_all_remotes_with_git_annex_assistant_and_ext4/comment_6_8894beb06443f234e9200b03b5f3badf._comment create mode 100644 doc/forum/How_to_destroy_a_master_annex_and_all_remotes_with_git_annex_assistant_and_ext4/comment_7_457f62ee3e58f68a55f66c5bde6002fd._comment create mode 100644 doc/forum/How_to_destroy_a_master_annex_and_all_remotes_with_git_annex_assistant_and_ext4/comment_8_bd2b412116a66107bc0ff0efd7e39a58._comment create mode 100644 doc/forum/How_to_emulate___34__one-way_sync__34__s_in_a_direct_repo__63__.mdwn create mode 100644 doc/forum/How_to_emulate___34__one-way_sync__34__s_in_a_direct_repo__63__/comment_1_c5226964b4b64bd47d888b5616ff970b._comment create mode 100644 doc/forum/How_to_emulate___34__one-way_sync__34__s_in_a_direct_repo__63__/comment_2_748d243bac14a8d55be4ac324c581c1d._comment create mode 100644 doc/forum/How_to_emulate___34__one-way_sync__34__s_in_a_direct_repo__63__/comment_3_cf9234339bad14ad9a9d3027f9066936._comment create mode 100644 doc/forum/How_to_emulate___34__one-way_sync__34__s_in_a_direct_repo__63__/comment_4_d899cf35801636e618e4675d91d6104a._comment create mode 100644 doc/forum/How_to_expire_old_versions_of_files_that_have_been_edited__63__.mdwn create mode 100644 doc/forum/How_to_expire_old_versions_of_files_that_have_been_edited__63__/comment_1_dccf4dc4483d08e5e2936b2cadeafeaf._comment create mode 100644 doc/forum/How_to_expire_old_versions_of_files_that_have_been_edited__63__/comment_2_5710294c1c8652c12b6df2233255a45e._comment create mode 100644 doc/forum/How_to_find_deleted_files_that_I_know_have_been_backed_up__63__.mdwn create mode 100644 doc/forum/How_to_find_deleted_files_that_I_know_have_been_backed_up__63__/comment_1_8332f71241335a31e270407477bd84f3._comment create mode 100644 doc/forum/How_to_find_deleted_files_that_I_know_have_been_backed_up__63__/comment_2_984286a35ec828f1e8dda928ea577571._comment create mode 100644 doc/forum/How_to_find_deleted_files_that_I_know_have_been_backed_up__63__/comment_3_29f6f9df1ad22113e9690b0d1da36ba0._comment create mode 100644 doc/forum/How_to_find_deleted_files_that_I_know_have_been_backed_up__63__/comment_4_43549b3d231f52cf53a66c477c34a708._comment create mode 100644 doc/forum/How_to_find_deleted_files_that_I_know_have_been_backed_up__63__/comment_5_94aca10f84783f35d927dbefbeba263a._comment create mode 100644 doc/forum/How_to_find_out_if_assistant_is_still_repairing__63__.mdwn create mode 100644 doc/forum/How_to_find_out_if_assistant_is_still_repairing__63__/comment_1_9dd192a8e0bfa9e533b22070b87792af._comment create mode 100644 doc/forum/How_to_fix__58_____40__transfer_already_in_progress__44___or_.mdwn create mode 100644 doc/forum/How_to_fix__58_____40__transfer_already_in_progress__44___or_/comment_1_345a7439720e8dc2cc6cb5eed6bcf73f._comment create mode 100644 doc/forum/How_to_fix__58_____40__transfer_already_in_progress__44___or_/comment_2_55ad844ee650a6a5026fdf5764dd9470._comment create mode 100644 doc/forum/How_to_fix_bad_merge.mdwn create mode 100644 doc/forum/How_to_fix_bad_merge/comment_1_4a32a727560ab85203d1dd76feff2e1e._comment create mode 100644 doc/forum/How_to_forget_keys_that_get_can__39__t_find__63__.mdwn create mode 100644 doc/forum/How_to_forget_keys_that_get_can__39__t_find__63__/comment_1_5962c2c7b3a668429a62f7bede990801._comment create mode 100644 doc/forum/How_to_forget_keys_that_get_can__39__t_find__63__/comment_2_f84a8e545da95e72b3e2b03a782335ce._comment create mode 100644 doc/forum/How_to_forget_keys_that_get_can__39__t_find__63__/comment_3_74f14ae50e37d94fbd2950924a7bee28._comment create mode 100644 doc/forum/How_to_forget_keys_that_get_can__39__t_find__63__/comment_4_ee99cdb44671eea30eaa4351dbb9dc96._comment create mode 100644 doc/forum/How_to_forget_keys_that_get_can__39__t_find__63__/comment_5_d0d7674589574ae92e2595d23d000f61._comment create mode 100644 doc/forum/How_to_get_detailed_information_on_special_remotes__63__.mdwn create mode 100644 doc/forum/How_to_get_detailed_information_on_special_remotes__63__/comment_1_f1eca38ca0c1edb66e64ac64f0321829._comment create mode 100644 doc/forum/How_to_get_detailed_information_on_special_remotes__63__/comment_2_73f8b7ebde5870f92bec02d15a533ef3._comment create mode 100644 doc/forum/How_to_get_encrypted_name_from_special_remote__63__.mdwn create mode 100644 doc/forum/How_to_get_encrypted_name_from_special_remote__63__/comment_1_47ce17796de422fe996f45083a6b79b0._comment create mode 100644 doc/forum/How_to_get_git-annex_to_forget_a_commit__63__.mdwn create mode 100644 doc/forum/How_to_get_git-annex_to_forget_a_commit__63__/comment_1_65471c42e163ac8ee6ec109f1397271b._comment create mode 100644 doc/forum/How_to_get_git-annex_to_forget_a_commit__63__/comment_2_cc991abd9155a8e4d935b04ba432744f._comment create mode 100644 doc/forum/How_to_handle_cold_storage__63__.mdwn create mode 100644 doc/forum/How_to_handle_cold_storage__63__/comment_1_ff49a65d4adaff3cf3902c2850227ea2._comment create mode 100644 doc/forum/How_to_handle_the_git-annex_branch__63__.mdwn create mode 100644 doc/forum/How_to_handle_the_git-annex_branch__63__/comment_1_800bd55b322e72f229882d7fd3888b14._comment create mode 100644 doc/forum/How_to_hide_broken_symlinks.mdwn create mode 100644 doc/forum/How_to_hide_broken_symlinks/comment_1_07a70090a9ac8f675233b08b24f55544._comment create mode 100644 doc/forum/How_to_hide_broken_symlinks/comment_2_011f6b97b1eaee1ae513a4a0e445d105._comment create mode 100644 doc/forum/How_to_hide_broken_symlinks/comment_3_e3606aa746f516fc771d5d9bf93d70af._comment create mode 100644 doc/forum/How_to_hide_broken_symlinks/comment_4_c6e3ef3ba5f6e9e54d998bcbe3035650._comment create mode 100644 doc/forum/How_to_hide_broken_symlinks/comment_5_1ed5e10e51078a0aa7e6968ef48687a3._comment create mode 100644 doc/forum/How_to_improve_performance_with_v6_repos__63__.mdwn create mode 100644 doc/forum/How_to_improve_performance_with_v6_repos__63__/comment_1_56e0fead15a88ea12262e6091972c6d6._comment create mode 100644 doc/forum/How_to_improve_performance_with_v6_repos__63__/comment_2_93a6a0779f52bdd3de6e4d2500cfd223._comment create mode 100644 doc/forum/How_to_keep_connected_files_with_another__63__.mdwn create mode 100644 doc/forum/How_to_keep_connected_files_with_another__63__/comment_1_89e04a7dc25a3df849aa2ada4dbc8439._comment create mode 100644 doc/forum/How_to_keep_connected_files_with_another__63__/comment_2_20e8dba904eff7cc8f72ee12b8119632._comment create mode 100644 doc/forum/How_to_keep_connected_files_with_another__63__/comment_3_7b14aa71a166cf14e852ae896b05ee74._comment create mode 100644 doc/forum/How_to_keep_connected_files_with_another__63__/comment_4_a33437b28ea7fc74eb221d90efaec487._comment create mode 100644 doc/forum/How_to_know_why_is_git-annex_uploading_a_file_to_a_transfer_repository.mdwn create mode 100644 doc/forum/How_to_know_why_is_git-annex_uploading_a_file_to_a_transfer_repository/comment_1_17db96492e6bc0e243fc7cb62565c4c4._comment create mode 100644 doc/forum/How_to_know_why_is_git-annex_uploading_a_file_to_a_transfer_repository/comment_2_e772ea0383ac690cbcbcf125258986cf._comment create mode 100644 doc/forum/How_to_list_all_existing_metadata_types__63__.mdwn create mode 100644 doc/forum/How_to_list_all_existing_metadata_types__63__/comment_1_a8c30f697f32a3807661a59482d79b18._comment create mode 100644 doc/forum/How_to_make_Maven_releases_work_with_git_annex___63__.mdwn create mode 100644 doc/forum/How_to_make_Maven_releases_work_with_git_annex___63__/comment_1_9298aa55771b68873de02e6a7964bbdc._comment create mode 100644 doc/forum/How_to_make_a_server_store_the_files.mdwn create mode 100644 doc/forum/How_to_make_a_server_store_the_files/comment_1_20196067475918e788afa0debc4d5ce5._comment create mode 100644 doc/forum/How_to_make_this_workflow_possible__63__.mdwn create mode 100644 doc/forum/How_to_make_this_workflow_possible__63__/comment_1_38d7c0531d68803b1d7910c598aab38c._comment create mode 100644 doc/forum/How_to_mv_file___40__symlink__41___to_another_dir_in_the_same_repo_without_unlocking_it.mdwn create mode 100644 doc/forum/How_to_mv_file___40__symlink__41___to_another_dir_in_the_same_repo_without_unlocking_it/comment_1_a272d179a77682e8c64bd4fc20cddee0._comment create mode 100644 doc/forum/How_to_organise_backup_to_S3__63__.mdwn create mode 100644 doc/forum/How_to_organise_backup_to_S3__63__/comment_1_13c6421a3637e30193dc77b54dec4b8d._comment create mode 100644 doc/forum/How_to_organise_backup_to_S3__63__/comment_2_e0ae05276ef7e1dcb21ef0986b6f7531._comment create mode 100644 doc/forum/How_to_organise_backup_to_S3__63__/comment_3_7697112a04cdc9a53551257d71143eb5._comment create mode 100644 doc/forum/How_to_overwrite_local_changes__63__.mdwn create mode 100644 doc/forum/How_to_overwrite_local_changes__63__/comment_1_1753d8c7a0daf04b64d639567a349190._comment create mode 100644 doc/forum/How_to_play_a_video_from_WSL2_on_Windows_VLC.mdwn create mode 100644 doc/forum/How_to_play_a_video_from_WSL2_on_Windows_VLC/comment_1_4b2b04e4cd61d08dfa44b2cc86023ba2._comment create mode 100644 doc/forum/How_to_prevent_copies_on_a_single_device_and_use_only_hardlinks.mdwn create mode 100644 doc/forum/How_to_prevent_copies_on_a_single_device_and_use_only_hardlinks/comment_1_b59a72142e8f752d7b68a63a6ac1bbfe._comment create mode 100644 doc/forum/How_to_prevent_copies_on_a_single_device_and_use_only_hardlinks/comment_2_e4bfea21f664a0cb1aa8ec18ee88fc50._comment create mode 100644 doc/forum/How_to_prevent_copies_on_a_single_device_and_use_only_hardlinks/comment_3_ee247d9316df963fd584df2199b80fe2._comment create mode 100644 doc/forum/How_to_prevent_copies_on_a_single_device_and_use_only_hardlinks/comment_4_51548724d72e2cc6cb2c6e8c3b82e3e4._comment create mode 100644 doc/forum/How_to_prevent_the_assistant_from_downloading_all_data__63__.mdwn create mode 100644 doc/forum/How_to_prevent_the_assistant_from_downloading_all_data__63__/comment_1_fd8b287758ad77b3527ae71017cffabf._comment create mode 100644 doc/forum/How_to_prevent_the_assistant_from_downloading_all_data__63__/comment_2_e8e75b4451aaf55461edf2f3d68797ed._comment create mode 100644 doc/forum/How_to_recover_from_failed_branch_updates__63__.mdwn create mode 100644 doc/forum/How_to_recover_from_failed_branch_updates__63__/comment_1_f296d4870a6fdef5c57bc8bb1a1e0474._comment create mode 100644 doc/forum/How_to_recover_from_failed_branch_updates__63__/comment_2_0edc7239488f78345f9e624ef210ebac._comment create mode 100644 doc/forum/How_to_register_arguments_for_an_external_special_remote__63__.mdwn create mode 100644 doc/forum/How_to_register_arguments_for_an_external_special_remote__63__/comment_1_6dd92d0737b72b927fc6b82636084c54._comment create mode 100644 doc/forum/How_to_register_arguments_for_an_external_special_remote__63__/comment_2_789445dff9a5905ed105ac344f6949ad._comment create mode 100644 doc/forum/How_to_register_arguments_for_an_external_special_remote__63__/comment_3_93e91e2ab98c35d4cb6082eea01b6abc._comment create mode 100644 doc/forum/How_to_register_arguments_for_an_external_special_remote__63__/comment_4_64c0d3c061ff463f9ce16b52d2a70a1f._comment create mode 100644 doc/forum/How_to_register_arguments_for_an_external_special_remote__63__/comment_5_d1c47c1a2f9b4dd570c0ebd9fbd1ad8b._comment create mode 100644 doc/forum/How_to_register_arguments_for_an_external_special_remote__63__/comment_6_e0753fef2b93ae5a114894dbdc014ec4._comment create mode 100644 doc/forum/How_to_remove_annex_on_osx__63__.mdwn create mode 100644 doc/forum/How_to_remove_annex_on_osx__63__/comment_1_18fc46bdb5bc44916e355a9900e9c0d1._comment create mode 100644 doc/forum/How_to_rename_a_remote__63__.mdwn create mode 100644 doc/forum/How_to_rename_a_remote__63__/comment_1_a9bfbd82f7bb47661f0d9e0e0d904332._comment create mode 100644 doc/forum/How_to_resolve_a_interrupted_merge_in_direct_mode__63__.mdwn create mode 100644 doc/forum/How_to_resolve_a_interrupted_merge_in_direct_mode__63__/comment_1_8e2a14842b44844f90c80b862a1b3a6d._comment create mode 100644 doc/forum/How_to_resolve_a_interrupted_merge_in_direct_mode__63__/comment_2_031ab6b5a2765ed9e2b185b24a8cbd78._comment create mode 100644 doc/forum/How_to_resolve_a_interrupted_merge_in_direct_mode__63__/comment_3_93f20519483837c59a75821621e22dee._comment create mode 100644 doc/forum/How_to_restore_symlinks.mdwn create mode 100644 doc/forum/How_to_restore_symlinks/comment_1_c67e752cf7d5431096fab4b3304790a7._comment create mode 100644 doc/forum/How_to_restore_symlinks/comment_2_f9ec6096595e2c149c48924e3b54542f._comment create mode 100644 doc/forum/How_to_restore_symlinks/comment_3_4ff80729787a2a4e2baf05dd1db37da3._comment create mode 100644 doc/forum/How_to_retroactively_annex_a_file_already_in_a_git_repo.mdwn create mode 100644 doc/forum/How_to_revert_metadata_changes.mdwn create mode 100644 doc/forum/How_to_revert_metadata_changes/comment_1_de40f1a3f364ca6d2f9bb489f4d64cb3._comment create mode 100644 doc/forum/How_to_see_what_will_go_to_annex_vs_git.mdwn create mode 100644 doc/forum/How_to_see_what_will_go_to_annex_vs_git/comment_1_d26ea587da51a6f663d64ebb19976a2b._comment create mode 100644 doc/forum/How_to_see_what_will_go_to_annex_vs_git/comment_2_316becb188245c1fbbe6daa63505bc34._comment create mode 100644 doc/forum/How_to_see_what_will_go_to_annex_vs_git/comment_3_93f3bc4f8e9e2aeef4e417bba2041ee4._comment create mode 100644 doc/forum/How_to_see_what_will_go_to_annex_vs_git/comment_4_558abc4b928649ff3b199a7154c052bf._comment create mode 100644 doc/forum/How_to_see_what_will_go_to_annex_vs_git/comment_5_ce998d6fc7868a2f129bad755d04b186._comment create mode 100644 doc/forum/How_to_set_backend_based_on_file_size_in_.gitattributes.mdwn create mode 100644 doc/forum/How_to_set_backend_based_on_file_size_in_.gitattributes/comment_1_c8ac6b924d4446d4a1a12fb34532fd69._comment create mode 100644 doc/forum/How_to_set_up_two_assistants_with_one_shared_transfer_repository__63__.mdwn create mode 100644 doc/forum/How_to_set_up_two_assistants_with_one_shared_transfer_repository__63__/comment_1_bedaf308cfc70b9e751914a400ebcbc2._comment create mode 100644 doc/forum/How_to_set_up_two_assistants_with_one_shared_transfer_repository__63__/comment_2_d665b1514253c8aa487ebf8b2728e3b1._comment create mode 100644 doc/forum/How_to_set_up_two_assistants_with_one_shared_transfer_repository__63__/comment_3_aef42387a3673ab6710fb23e878d7e17._comment create mode 100644 doc/forum/How_to_set_up_two_assistants_with_one_shared_transfer_repository__63__/comment_4_bfbcc041db472f4808979e6b3d7c4be2._comment create mode 100644 doc/forum/How_to_shrink_transfer_repo__63__.mdwn create mode 100644 doc/forum/How_to_shrink_transfer_repo__63__/comment_1_6b110311f4c147dc315c4f610cf56afa._comment create mode 100644 doc/forum/How_to_shrink_transfer_repo__63__/comment_2_8e596cd606935d82bd6604f5c9c500a2._comment create mode 100644 doc/forum/How_to_shrink_transfer_repo__63__/comment_3_c536a946b717e9bdcb883b58cd0336ae._comment create mode 100644 doc/forum/How_to_solve__problem_with_diverging_repositories_handled_by_the_assistant__63__.mdwn create mode 100644 doc/forum/How_to_solve__problem_with_diverging_repositories_handled_by_the_assistant__63__/comment_1_1c913395f076ee203caaab057da8afbe._comment create mode 100644 doc/forum/How_to_solve__problem_with_diverging_repositories_handled_by_the_assistant__63__/comment_2_081793c52bf15c74a7f48a67c49ff818._comment create mode 100644 doc/forum/How_to_solve__problem_with_diverging_repositories_handled_by_the_assistant__63__/comment_3_f8e0376beb486cf8ce52384ff511ecf2._comment create mode 100644 doc/forum/How_to_sync_data_down_from_a___39__full_backup__39____63__.mdwn create mode 100644 doc/forum/How_to_sync_data_down_from_a___39__full_backup__39____63__/comment_1_c4e972c8635f2fa460cd6621f3d993c6._comment create mode 100644 doc/forum/How_to_sync_data_down_from_a___39__full_backup__39____63__/comment_2_e06abc9a2f7cf055523f3d35e4eed9bc._comment create mode 100644 doc/forum/How_to_sync_data_down_from_a___39__full_backup__39____63__/comment_3_81d128be0fa60475062e795f34d920f7._comment create mode 100644 doc/forum/How_to_sync_data_down_from_a___39__full_backup__39____63__/comment_4_43615e11f1c6d08f5850458d540f5bac._comment create mode 100644 doc/forum/How_to_sync_without_enumerating_files__63__.mdwn create mode 100644 doc/forum/How_to_sync_without_enumerating_files__63__/comment_1_ad78c67ae1bb4dc8ed800779c0298158._comment create mode 100644 doc/forum/How_to_use_--jobs__61__10_by_default__63__.mdwn create mode 100644 doc/forum/How_to_use_--jobs__61__10_by_default__63__/comment_1_3c47ad3f0c17e475ea42438a42085f9c._comment create mode 100644 doc/forum/How_to_view_progress_of_in-progress_upload__63__.mdwn create mode 100644 doc/forum/How_to_view_progress_of_in-progress_upload__63__/comment_1_794cc9bdf728c96dd7c50cf402573cf5._comment create mode 100644 doc/forum/How_to_view_progress_of_in-progress_upload__63__/comment_2_6347e08b599239b6416957e9a7114157._comment create mode 100644 doc/forum/How_to_work_with_transfer_repos_manually__63__.mdwn create mode 100644 doc/forum/How_to_work_with_transfer_repos_manually__63__/comment_1_3dec369405e6b6a4a6e5121546c03712._comment create mode 100644 doc/forum/How_to_work_with_transfer_repos_manually__63__/comment_1_b8f3c09b470d99578a4a17064498dd39._comment create mode 100644 doc/forum/How_to_work_with_transfer_repos_manually__63__/comment_3_be2c594bc1d162cfb1acc3a01fc284f2._comment create mode 100644 doc/forum/Howto_remove_a_repository__63__.mdwn create mode 100644 doc/forum/Howto_remove_a_repository__63__/comment_1_b55fa4e92bb457ecaa5ca8f5cee7be1d._comment create mode 100644 doc/forum/Howto_remove_unused_files.mdwn create mode 100644 doc/forum/Howto_remove_unused_files/comment_1_f2a7948268ce3cb3967a9fdd8ccc570a._comment create mode 100644 doc/forum/Howto_remove_unused_files/comment_2_9b4d198c2d8a52adef3d166a8196fc0d._comment create mode 100644 doc/forum/Howto_remove_unused_files/comment_3_441d10901d5c055ac3ed2a6cb61c075c._comment create mode 100644 doc/forum/Huge_differences_in_sync_times_in_different_directories_of_same_machines.mdwn create mode 100644 doc/forum/Huge_differences_in_sync_times_in_different_directories_of_same_machines/comment_1_445766c0f646e9cb5b45b863ad87e85a._comment create mode 100644 doc/forum/Huge_differences_in_sync_times_in_different_directories_of_same_machines/comment_2_b3953f30fb817ee3753f888a871de51f._comment create mode 100644 doc/forum/Idly_syncing_back_and_forth_creates_commits.mdwn create mode 100644 doc/forum/Idly_syncing_back_and_forth_creates_commits/comment_1_e6a60889876bd49855fe60849db147ef._comment create mode 100644 doc/forum/Idly_syncing_back_and_forth_creates_commits/comment_2_1053e88c417e8b46648f645a466145e2._comment create mode 100644 doc/forum/Idly_syncing_back_and_forth_creates_commits/comment_3_577f62d506a66770e746a50fc103901d._comment create mode 100644 doc/forum/Idly_syncing_back_and_forth_creates_commits/comment_4_0079c41305493873521d3af45075a2c4._comment create mode 100644 doc/forum/Idly_syncing_back_and_forth_creates_commits/comment_5_4879d44cc69022a71fc8baf8f31a890f._comment create mode 100644 doc/forum/Ignoring_folders__63__.mdwn create mode 100644 doc/forum/Ignoring_folders__63__/comment_1_5fbf4d1ae75434118876470b04e2fd72._comment create mode 100644 doc/forum/Ignoring_folders__63__/comment_2_1adafdf1fddf8e1256e51b0f56d3a89e._comment create mode 100644 doc/forum/Import_availability_info___40__logs__47__refs__47__remotes__41___from_another_repo__63__.mdwn create mode 100644 doc/forum/Import_availability_info___40__logs__47__refs__47__remotes__41___from_another_repo__63__/comment_1_32586d9e43dc0c5d0a9e94671586f763._comment create mode 100644 doc/forum/Import_existing_files.mdwn create mode 100644 doc/forum/Import_existing_files/comment_1_890dea22857d0a38260009602ccf0ec6._comment create mode 100644 doc/forum/Import_existing_files/comment_2_362ce3b030970db82c8dd0d98791186b._comment create mode 100644 doc/forum/Import_existing_files/comment_3_69188f669e6fe5ca1a8c34c3dc3ec201._comment create mode 100644 doc/forum/Import_existing_files/comment_4_9c7677838ad28d540a2a514d718f9f1d._comment create mode 100644 doc/forum/Import_existing_files/comment_5_d88cedb3d70342071621c1695c8aeb05._comment create mode 100644 doc/forum/Import_existing_files/comment_6_be5331f1203b9610259a84c783b429b0._comment create mode 100644 doc/forum/Import_options.mdwn create mode 100644 doc/forum/Import_options/comment_1_118a5f978090a3909299876a01c0adec._comment create mode 100644 doc/forum/Import_options/comment_2_21da91f08cb6b28ae3e79ade033db516._comment create mode 100644 doc/forum/Improving_the_git-annex_forum.mdwn create mode 100644 doc/forum/Improving_the_git-annex_forum/comment_1_63c52c977689a5da34fec65391c25fd6._comment create mode 100644 doc/forum/Improving_the_git-annex_forum/comment_2_7b4b8d78148f41df332d8f9125ca9842._comment create mode 100644 doc/forum/Improving_the_git-annex_forum/comment_3_71d5568d2ac64f83dba11100124addd1._comment create mode 100644 doc/forum/Improving_the_git-annex_forum/comment_4_847be68ea1992e6c2ceb2c79cfb65f5f._comment create mode 100644 doc/forum/Init_a_directory_special_remote_with_already_existing_files.mdwn create mode 100644 doc/forum/Init_a_directory_special_remote_with_already_existing_files/comment_1_f2a2f7309145d26d124c73ce6fcb32a5._comment create mode 100644 doc/forum/Init_a_directory_special_remote_with_already_existing_files/comment_2_c1740ce07be483d198880f5844fea7e0._comment create mode 100644 doc/forum/Initial_macOS_setup_between_two_local_Macs.mdwn create mode 100644 doc/forum/Install_git_annex_v6_in_Ubuntu_14.04_Trusty.mdwn create mode 100644 doc/forum/Install_git_annex_v6_in_Ubuntu_14.04_Trusty/comment_1_9c715cbb0550cad29402dd2fca1917f9._comment create mode 100644 doc/forum/Install_without_root__63__.mdwn create mode 100644 doc/forum/Install_without_root__63__/comment_1_097bbbde8a91e1d0cee9da6cba23ae5c._comment create mode 100644 doc/forum/Install_without_root__63__/comment_2_891cd24fb0806ae9087cd83d22d8ce6e._comment create mode 100644 doc/forum/Install_without_root__63__/comment_3_23fe7b46c6f48072618f05c1368a8917._comment create mode 100644 doc/forum/Install_without_root__63__/comment_4_f015ab0bfed0b440b915c233be73c316._comment create mode 100644 doc/forum/Integrating_annex_get_into_git_checkout_with_hooks.mdwn create mode 100644 doc/forum/Integrating_annex_get_into_git_checkout_with_hooks/comment_1_7258d0203a0578d0f4e0221295511237._comment create mode 100644 doc/forum/Integrating_annex_get_into_git_checkout_with_hooks/comment_2_9ca7b7dfc039c443c4afa9b6ea7c78bd._comment create mode 100644 doc/forum/Integrating_git-annex_with_Windows_Git_Extensions__63__.mdwn create mode 100644 doc/forum/Integrating_git-annex_with_Windows_Git_Extensions__63__/comment_1_2dac6e3ccf559d98f74c456c0ca7aafc._comment create mode 100644 doc/forum/Integrating_git-annex_with_Windows_Git_Extensions__63__/comment_2_181c6c87c64e4fbe798c108537c6a597._comment create mode 100644 doc/forum/Invalid_cross-device_link.mdwn create mode 100644 doc/forum/Invalid_cross-device_link/comment_1_46c35e04c8f8cb7205f08aa71cc4912a._comment create mode 100644 doc/forum/Is_Annex_for_me__63___Questions_about_the_long_term.mdwn create mode 100644 doc/forum/Is_Annex_for_me__63___Questions_about_the_long_term/comment_1_9984f65d6e89f0f88b33cbd499e859eb._comment create mode 100644 doc/forum/Is_Annex_for_me__63___Questions_about_the_long_term/comment_2_d7bdfeb33bac7f139b0bdc1c6fb53237._comment create mode 100644 doc/forum/Is_Annex_for_me__63___Questions_about_the_long_term/comment_3_7dc224cb0b88bf07879e03717efffa17._comment create mode 100644 doc/forum/Is_Annex_for_me__63___Questions_about_the_long_term/comment_4_a538f8a4272b5ce134607dc7201e3f04._comment create mode 100644 doc/forum/Is_S3___34__Standard-Infrequent_Access__34___storage_class_supported__63__.mdwn create mode 100644 doc/forum/Is_S3___34__Standard-Infrequent_Access__34___storage_class_supported__63__/comment_1_ddc2a1f2b1d810a40b459896993d2e8d._comment create mode 100644 doc/forum/Is___96__sync_--cleanup__96___by_default_a_bad_idea__63__.mdwn create mode 100644 doc/forum/Is___96__sync_--cleanup__96___by_default_a_bad_idea__63__/comment_1_51e5f78a1cbd37598f3f0f6746df7320._comment create mode 100644 doc/forum/Is_an_automagic_upgrade_of_the_object_directory_safe__63__.mdwn create mode 100644 doc/forum/Is_an_automagic_upgrade_of_the_object_directory_safe__63__/comment_1_c25900b9d2d62cc0b8c77150bcfebadf._comment create mode 100644 doc/forum/Is_git-annex_in_a_precarious_state_before_the_initial_commit__63__.mdwn create mode 100644 doc/forum/Is_git-annex_in_a_precarious_state_before_the_initial_commit__63__/comment_1_f9decde3955f10148febc4646fba5a68._comment create mode 100644 doc/forum/Is_git-annex_in_a_precarious_state_before_the_initial_commit__63__/comment_2_ed32a48edce4f150bedf24cfe91de254._comment create mode 100644 doc/forum/Is_git-annex_in_a_precarious_state_before_the_initial_commit__63__/comment_3_ef9618850e5e688bac3c646983f00ed8._comment create mode 100644 doc/forum/Is_git-annex_in_a_precarious_state_before_the_initial_commit__63__/comment_4_4bf460c5826c36b205e418c4f3f7d770._comment create mode 100644 doc/forum/Is_it_possible_adding_files_to_git_annex_bypassing___40__some_parts_of__41___the_git_annex_tools.mdwn create mode 100644 doc/forum/Is_it_possible_adding_files_to_git_annex_bypassing___40__some_parts_of__41___the_git_annex_tools/comment_1_5c593876993bef4dfaa052278a3ba5be._comment create mode 100644 doc/forum/Is_it_possible_adding_files_to_git_annex_bypassing___40__some_parts_of__41___the_git_annex_tools/comment_2_02ecc1b9f370f6bba84dd598030e0fcd._comment create mode 100644 doc/forum/Is_it_possible_adding_files_to_git_annex_bypassing___40__some_parts_of__41___the_git_annex_tools/comment_4_7d9d45716e9e847f3bde214949796222._comment create mode 100644 doc/forum/Is_it_possible_adding_files_to_git_annex_bypassing___40__some_parts_of__41___the_git_annex_tools/comment_4_ba3422afc8ae83bd822616cc1a99a5b9._comment create mode 100644 doc/forum/Is_it_possible_adding_files_to_git_annex_bypassing___40__some_parts_of__41___the_git_annex_tools/comment_5_d8c402765b3a5896db91605f43149001._comment create mode 100644 doc/forum/Is_it_possible_adding_files_to_git_annex_bypassing___40__some_parts_of__41___the_git_annex_tools/comment_6_2d78e647a46cfbb002cf66e6318043ab._comment create mode 100644 doc/forum/Is_it_possible_to_cherry_pick_from_a_repo__63__.mdwn create mode 100644 doc/forum/Is_it_possible_to_cherry_pick_from_a_repo__63__/comment_1_82efe5c0b37fdcb31b6a4ca62b66123f._comment create mode 100644 doc/forum/Is_it_possible_to_create_a_view_on_files_that___42__dont__42___have_a_field_set__63__.mdwn create mode 100644 doc/forum/Is_it_possible_to_create_a_view_on_files_that___42__dont__42___have_a_field_set__63__/comment_1_f452c911b24ba40aef3be5bdaac9f9ee._comment create mode 100644 doc/forum/Is_it_possible_to_create_a_view_on_files_that___42__dont__42___have_a_field_set__63__/comment_2_7373ec002ca78f4f382ef9297f39639e._comment create mode 100644 doc/forum/Is_it_possible_to_create_a_view_on_files_that___42__dont__42___have_a_field_set__63__/comment_3_cda315119bd3ccce74bc3df8dd56bf1a._comment create mode 100644 doc/forum/Is_it_possible_to_make_git-sync_not_nullify_symlinks__63__.mdwn create mode 100644 doc/forum/Is_it_possible_to_make_git-sync_not_nullify_symlinks__63__/comment_1_d6f2d2cdc5f4ffde9eee9f3a8c215a06._comment create mode 100644 doc/forum/Is_it_possible_to_setup_a_git-annex_Glacier_gatway__63__.mdwn create mode 100644 doc/forum/Is_it_possible_to_setup_a_git-annex_Glacier_gatway__63__/comment_1_a35571c77eaab5bcc0d841543a13162f._comment create mode 100644 doc/forum/Is_it_possible_to_setup_a_git-annex_Glacier_gatway__63__/comment_2_c8f185b0751ccd17a657e954cbeb2864._comment create mode 100644 doc/forum/Is_it_possible_to_stop_annex_sync_from_trying_to_push_to_checked_out_branches__63__.mdwn create mode 100644 doc/forum/Is_it_possible_to_stop_annex_sync_from_trying_to_push_to_checked_out_branches__63__/comment_1_e74ddd1bf47f856369568b1fcd8d4f9c._comment create mode 100644 doc/forum/Is_it_possible_to_stop_annex_sync_from_trying_to_push_to_checked_out_branches__63__/comment_2_c47c27ce283cc4fcb80949860e2a4927._comment create mode 100644 doc/forum/Is_it_possible_to_stop_annex_sync_from_trying_to_push_to_checked_out_branches__63__/comment_3_47511f7b731cdefd108241bedb116f68._comment create mode 100644 doc/forum/Is_it_possible_to_stop_annex_sync_from_trying_to_push_to_checked_out_branches__63__/comment_4_07a190aa19006611739cccfc5aac5a6f._comment create mode 100644 doc/forum/Is_parallel_fsck_for_two_or_more_different_directories_possible__63__.mdwn create mode 100644 doc/forum/Is_parallel_fsck_for_two_or_more_different_directories_possible__63__/comment_1_34af73f211cce966927757f7deec88eb._comment create mode 100644 doc/forum/Is_setting_core.preloadindex_safe_with_git_annex__63__.mdwn create mode 100644 doc/forum/Is_setting_core.preloadindex_safe_with_git_annex__63__/comment_1_c250362236a33d8dc9bf5ed825318c40._comment create mode 100644 doc/forum/Is_there_a___34__git_annex_cat-file__34___type_command__63__.mdwn create mode 100644 doc/forum/Is_there_a___34__git_annex_cat-file__34___type_command__63__/comment_1_fe3dc778b35119d3ede2d341cac7a15b._comment create mode 100644 doc/forum/Is_there_a_way_to_get_back_to_clean-state_after_unworking_annex_assistant_configuration_attempt__63__.mdwn create mode 100644 doc/forum/Is_there_a_way_to_get_back_to_clean-state_after_unworking_annex_assistant_configuration_attempt__63__/comment_1_d77fbbbe3a7438a1e79f175df1f69ef3._comment create mode 100644 doc/forum/Is_there_a_way_to_have_assistant_add_files_locked__63__.mdwn create mode 100644 doc/forum/Is_there_a_way_to_have_assistant_add_files_locked__63__/comment_1_70c8e23c87a6c48e728a6685e7189e98._comment create mode 100644 doc/forum/Is_there_a_way_to_have_assistant_add_files_locked__63__/comment_2_c0c6e38fe99dd273764071574c8b3c1d._comment create mode 100644 doc/forum/Is_there_a_way_to_have_assistant_add_files_locked__63__/comment_3_c80d15f6844e29dee2bf7ba0a6d6d093._comment create mode 100644 doc/forum/Is_there_a_way_to_have_assistant_add_files_locked__63__/comment_4_a8ebda7dd8d52e6c1137dbb646e21e5c._comment create mode 100644 doc/forum/Is_there_a_way_to_have_assistant_add_files_locked__63__/comment_5_022f36242ef57158feab0918f41a7ff1._comment create mode 100644 doc/forum/Is_there_a_way_to_have_assistant_add_files_locked__63__/comment_6_5527d611a132f3e9bc0d71c593abf673._comment create mode 100644 doc/forum/Is_there_a_way_to_have_assistant_add_files_locked__63__/comment_7_92bf43545c46d302089820cfdd03141b._comment create mode 100644 doc/forum/Is_there_a_way_to_have_assistant_add_files_locked__63__/comment_8_a6ae8bc3b5caf0d3d49a919ab5ec5778._comment create mode 100644 doc/forum/Is_there_a_way_to_have_assistant_add_files_locked__63__/comment_9_7fcc62493d261c22149f85f48bb95efc._comment create mode 100644 doc/forum/Is_there_a_way_to_log_what_changed_in_files_committed__44___similar_to_how_git_normally_works_for_coding_files__63__.mdwn create mode 100644 doc/forum/Is_there_a_way_to_log_what_changed_in_files_committed__44___similar_to_how_git_normally_works_for_coding_files__63__/comment_1_e30310472df6ed2928dfd63464c6bae7._comment create mode 100644 doc/forum/Is_there_a_way_to_log_what_changed_in_files_committed__44___similar_to_how_git_normally_works_for_coding_files__63__/comment_2_f093b16307bd369399574fc651569b73._comment create mode 100644 doc/forum/Is_there_a_way_to_log_what_changed_in_files_committed__44___similar_to_how_git_normally_works_for_coding_files__63__/comment_3_1edab7e44e7eae6d8f06a917704b17ec._comment create mode 100644 doc/forum/Is_there_a_way_to_override_the_import_destination__63__.mdwn create mode 100644 doc/forum/Is_there_a_way_to_override_the_import_destination__63__/comment_1_5f094cc606eebd2aeeaaa4b861cf2c21._comment create mode 100644 doc/forum/Is_there_a_way_to_unannex_some_file___63__.mdwn create mode 100644 doc/forum/Is_there_a_way_to_unannex_some_file___63__/comment_1_82095cef37dd815bcd1d101a1715e3c7._comment create mode 100644 doc/forum/Is_there_a_way_to_unannex_some_file___63__/comment_2_3b05e9eaa554b70594f0195dfcef831d._comment create mode 100644 doc/forum/Is_there_an___39__annex-cost__39___to_NEVER_access_remote__63__.mdwn create mode 100644 doc/forum/Is_there_an___39__annex-cost__39___to_NEVER_access_remote__63__/comment_1_3760d5b8c8012405eef17e4d07cf151c._comment create mode 100644 doc/forum/Is_there_an___39__annex-cost__39___to_NEVER_access_remote__63__/comment_2_b95ce6b13ae45a2fca05260a7f77148f._comment create mode 100644 doc/forum/Is_there_an___39__annex-cost__39___to_NEVER_access_remote__63__/comment_3_1c8f023b8d7a50cfce6d3464b12e446b._comment create mode 100644 doc/forum/Is_there_an___39__annex-cost__39___to_NEVER_access_remote__63__/comment_4_f1e234e80a6873b33986bec8d51c1001._comment create mode 100644 doc/forum/Is_there_an___39__annex-cost__39___to_NEVER_access_remote__63__/comment_5_2c43830a95cd8955da20cc6dba27a9b6._comment create mode 100644 doc/forum/Is_there_any_delta_handling_for_file_modifications__63__.mdwn create mode 100644 doc/forum/Is_there_any_delta_handling_for_file_modifications__63__/comment_1_d901ac998c9fdb844c593d782c31cc73._comment create mode 100644 doc/forum/Is_there_any_delta_handling_for_file_modifications__63__/comment_2_e46cb391ce377c3a8eb40155a5d0f001._comment create mode 100644 doc/forum/Issues_with_IPFS_special_remote.mdwn create mode 100644 doc/forum/Issues_with_IPFS_special_remote/comment_10_d13e439c3c242606d8b4377831e38a2b._comment create mode 100644 doc/forum/Issues_with_IPFS_special_remote/comment_11_e53b0158471605950896cafac7aac4da._comment create mode 100644 doc/forum/Issues_with_IPFS_special_remote/comment_1_74c586e5af079f0d6c42975ac294e766._comment create mode 100644 doc/forum/Issues_with_IPFS_special_remote/comment_2_283aafce5dc1735310daa8329a432002._comment create mode 100644 doc/forum/Issues_with_IPFS_special_remote/comment_3_fa017d01e9eca59074adf2224e20994b._comment create mode 100644 doc/forum/Issues_with_IPFS_special_remote/comment_4_e49c62ca2e0f0d455469d5bc4483aff3._comment create mode 100644 doc/forum/Issues_with_IPFS_special_remote/comment_5_2147808f9b15be995988e2c71bc0b271._comment create mode 100644 doc/forum/Issues_with_IPFS_special_remote/comment_6_3a34db5281419578201f5f74cf97a830._comment create mode 100644 doc/forum/Issues_with_IPFS_special_remote/comment_7_765fef6f0b5da3e5c87c029fea2362a1._comment create mode 100644 doc/forum/Issues_with_IPFS_special_remote/comment_8_edd64d315651d5c7d5e1f802b68b8b68._comment create mode 100644 doc/forum/Issues_with_IPFS_special_remote/comment_9_07b1f3c1e744e910f1738925d79e3d1a._comment create mode 100644 doc/forum/Issues_with_non-sync_workflow.mdwn create mode 100644 doc/forum/Issues_with_non-sync_workflow/comment_1_99f89201446005f77d9278a7a889638d._comment create mode 100644 doc/forum/Issues_with_non-sync_workflow/comment_2_f27ec2462e5a8f6f96c6e2b7dd3f87ca._comment create mode 100644 doc/forum/Issues_with_non-sync_workflow/comment_3_db02b002a977b57be0102d8ac7c2037f._comment create mode 100644 doc/forum/Issues_with_non-sync_workflow/comment_4_a93d502253cf9f164fbcd23ca755db9d._comment create mode 100644 doc/forum/Issues_with_webapp___47___assistant_and_gitlab_as_a_metadata_only_repo.mdwn create mode 100644 doc/forum/Issues_with_webapp___47___assistant_and_gitlab_as_a_metadata_only_repo/comment_1_b61139816f55dbc4f7eac22207f243c0._comment create mode 100644 doc/forum/Issues_with_webapp___47___assistant_and_gitlab_as_a_metadata_only_repo/comment_2_f6196f814ed388d276947ffcc92ff37c._comment create mode 100644 doc/forum/Issues_with_webapp___47___assistant_and_gitlab_as_a_metadata_only_repo/comment_3_1556ebbb2a8db4aa859e3852160df044._comment create mode 100644 doc/forum/JavaScript__47__TypeScript_API_for_git-annex_available.mdwn create mode 100644 doc/forum/JavaScript__47__TypeScript_API_for_git-annex_available/comment_1_69cdea649eb79fa796fb3713dc0ac23f._comment create mode 100644 doc/forum/Joey__44___when_would_you_guess_v6_to_be_ready__63__.mdwn create mode 100644 doc/forum/Joey__44___when_would_you_guess_v6_to_be_ready__63__/comment_1_08d3fd14a57b5d4dfb2cac411aba757f._comment create mode 100644 doc/forum/Joey__44___when_would_you_guess_v6_to_be_ready__63__/comment_2_ff5b55e81c0d48968e59e1783943f286._comment create mode 100644 doc/forum/Joey__44___when_would_you_guess_v6_to_be_ready__63__/comment_3_f63a66196db731fb04d8e078136eeb3d._comment create mode 100644 doc/forum/Joey__44___when_would_you_guess_v6_to_be_ready__63__/comment_4_a7ea99c0b8bdc257c0c3453bdb5ce1ca._comment create mode 100644 doc/forum/Keybase_encrypted_git_as_a_remote__63__.mdwn create mode 100644 doc/forum/Keybase_encrypted_git_as_a_remote__63__/comment_1_38d868bf2e93c43091f9f337d9ec840d._comment create mode 100644 doc/forum/Lacking_webapp_on_Trisquel__47__Ubuntu_Precise.mdwn create mode 100644 doc/forum/Lacking_webapp_on_Trisquel__47__Ubuntu_Precise/comment_1_6bd27bd31833336c1df783253378ccae._comment create mode 100644 doc/forum/Large_Uploads_to_S3__63__.mdwn create mode 100644 doc/forum/Large_Uploads_to_S3__63__/comment_1_c1fd2ed0b74ce58f818ab53158e581f3._comment create mode 100644 doc/forum/Large_Windows_annexes_with___42__nix_remotes.mdwn create mode 100644 doc/forum/Large_Windows_annexes_with___42__nix_remotes/comment_1_a38e0ecef49a81a1d2b3d2eaabab65ab._comment create mode 100644 doc/forum/Large_Windows_annexes_with___42__nix_remotes/comment_1_c59077a9d6500df0cd88ac5a18085085._comment create mode 100644 doc/forum/Large_Windows_annexes_with___42__nix_remotes/comment_2_bfc92cb2117b26eec95687950827c78b._comment create mode 100644 doc/forum/Layout_mismatch_between_symlinks_and_annex_objects.mdwn create mode 100644 doc/forum/Layout_mismatch_between_symlinks_and_annex_objects/comment_1_854786810dc4246cdaa38ff10c55bbca._comment create mode 100644 doc/forum/Layout_mismatch_between_symlinks_and_annex_objects/comment_2_9134154ba2ef3575c39c7848136b79a9._comment create mode 100644 doc/forum/Let_watch_selectively_annex_files.mdwn create mode 100644 doc/forum/Let_watch_selectively_annex_files/comment_1_8379de87d16502d9aadf252da01e4d9a._comment create mode 100644 doc/forum/Let_watch_selectively_annex_files/comment_2_2219ff6b4dc927eb2a299cd1af90aed8._comment create mode 100644 doc/forum/Link_to_local_remote_instead_of_broken_link_when_possible__63__.mdwn create mode 100644 doc/forum/Link_to_local_remote_instead_of_broken_link_when_possible__63__/comment_1_ce0464d5fca6ada9f1477831fd47ce09._comment create mode 100644 doc/forum/Links_or_actual_files__63___Confused__33__.mdwn create mode 100644 doc/forum/Links_or_actual_files__63___Confused__33__/comment_1_779cee2448d7070b1dd636d01296c01e._comment create mode 100644 doc/forum/Links_or_actual_files__63___Confused__33__/comment_2_bccda88697ab7beec0b9fe9ee0230688._comment create mode 100644 doc/forum/Links_or_actual_files__63___Confused__33__/comment_3_c2a9da3f03b55ff294dc0d2010380119._comment create mode 100644 doc/forum/List_annexed_files_in_chronological_order__63__.mdwn create mode 100644 doc/forum/List_annexed_files_in_chronological_order__63__/comment_1_825c950574b3a2f083554f474c9f7b50._comment create mode 100644 doc/forum/List_if_files_are_stored_in_annex_or_in_git.mdwn create mode 100644 doc/forum/List_if_files_are_stored_in_annex_or_in_git/comment_1_9206087f7320982ef26ef401d39a394f._comment create mode 100644 doc/forum/List_if_files_are_stored_in_annex_or_in_git/comment_2_2eeef9505e976288e7a09f31d0c09dda._comment create mode 100644 doc/forum/Local_and_remote_in_direct_mode.mdwn create mode 100644 doc/forum/Local_and_remote_in_direct_mode/comment_1_45f89ebcb6092d1b2582feebc8a5e9d7._comment create mode 100644 doc/forum/Local_and_remote_in_direct_mode/comment_2_90eeb2bffdb2db8032f9a0eac630ed56._comment create mode 100644 doc/forum/Local_and_remote_in_direct_mode/comment_3_859ec2b3a8e938073b2099fdc5781109._comment create mode 100644 doc/forum/Locating_errors_on_fsck.mdwn create mode 100644 doc/forum/Locating_errors_on_fsck/comment_1_5a4c54b59f2a3f8519f2dab608a1e92d._comment create mode 100644 doc/forum/Locating_errors_on_fsck/comment_2_0277bac79694efffba0e59706aa66c63._comment create mode 100644 doc/forum/Locking_and_then_unlocking_a_file_results_in_file_changed_warning.mdwn create mode 100644 doc/forum/Locking_and_then_unlocking_a_file_results_in_file_changed_warning/comment_1_25a04c7345f5b626aa71524603c833ed._comment create mode 100644 doc/forum/Locking_and_then_unlocking_a_file_results_in_file_changed_warning/comment_2_7146a3c69749b9b1001fffc6e7a8bcda._comment create mode 100644 doc/forum/Locking_and_then_unlocking_a_file_results_in_file_changed_warning/comment_3_fd39e6ceffd9bf0709658c34945d8699._comment create mode 100644 doc/forum/Looking_at_the_webapp_on_OSX.mdwn create mode 100644 doc/forum/Looking_at_the_webapp_on_OSX/comment_1_68820f2f469356633c1abb18a47e0c59._comment create mode 100644 doc/forum/Looking_at_the_webapp_on_OSX/comment_2_4ce86546d8a135df9cfab46b4612fa0b._comment create mode 100644 doc/forum/Looking_at_the_webapp_on_OSX/comment_3_6d398a2cceff14a1b774b85ee1725073._comment create mode 100644 doc/forum/Looking_at_the_webapp_on_OSX/comment_4_5e503787a4b1d3534c5e20da5480b763._comment create mode 100644 doc/forum/Looking_at_the_webapp_on_OSX/comment_5_c735841bc230efc61594ea013fc2902b._comment create mode 100644 doc/forum/Looking_at_the_webapp_on_OSX/comment_6_0e489fbfc89d282e9eb47f1b814ff70c._comment create mode 100644 doc/forum/Lost_git_repository._Recovery_from_S3_remote__63__.mdwn create mode 100644 doc/forum/Lost_git_repository._Recovery_from_S3_remote__63__/comment_1_a9028f00461ec1eddbeb699dadcbab72._comment create mode 100644 doc/forum/Lost_git_repository._Recovery_from_S3_remote__63__/comment_2_0dbf6fcd15007ba66323ecf2b154ad2e._comment create mode 100644 doc/forum/Lots_of_4k_symlinks.mdwn create mode 100644 doc/forum/Lots_of_4k_symlinks/comment_1_96384eaeef1d067a24678c7aa3613063._comment create mode 100644 doc/forum/Lots_of_4k_symlinks/comment_2_be9617e8cbc231069c44bc9f077ce673._comment create mode 100644 doc/forum/Lots_of_4k_symlinks/comment_3_80b3a84e6d79871bbbef13d4bc87cc37._comment create mode 100644 doc/forum/Lots_of_4k_symlinks/comment_4_be12d26936b3502445e880be997b8877._comment create mode 100644 doc/forum/Lots_of_4k_symlinks/comment_5_ab3884748f3271a77ba3320f25d74414._comment create mode 100644 doc/forum/Lots_of_4k_symlinks/comment_6_fa72056ee788ac0f2c15bb57d9876cf6._comment create mode 100644 doc/forum/Lots_of_4k_symlinks/comment_7_bd6b81815e5888c26d7a8a96e565519e._comment create mode 100644 doc/forum/Lyve_Home.mdwn create mode 100644 doc/forum/MD5_and_MD5E_backends_no_longer_available__63__.mdwn create mode 100644 doc/forum/MD5_and_MD5E_backends_no_longer_available__63__/comment_1_e21fa57a2f2dc4e99737877c6a48cbfe._comment create mode 100644 doc/forum/MD5_and_MD5E_backends_no_longer_available__63__/comment_2_5025d16f59f314711e49537e542b7c83._comment create mode 100644 doc/forum/Make_GA_aware_of_externally-made_copies.mdwn create mode 100644 doc/forum/Make_GA_aware_of_externally-made_copies/comment_1_0e2edea494810a8614f628ec46b934e4._comment create mode 100644 doc/forum/Make_GA_aware_of_externally-made_copies/comment_2_b7fcfd87efb17d5159ec49eb218fbd8e._comment create mode 100644 doc/forum/Make_GA_aware_of_externally-made_copies/comment_3_c1d69396c7bb208b6f82f2f65a282cfb._comment create mode 100644 doc/forum/Make_GA_aware_of_externally-made_copies/comment_4_b0d7ef111f4862d6b759cde45696a676._comment create mode 100644 doc/forum/Make_whereis_output_more_compact.mdwn create mode 100644 doc/forum/Making_Firefox_not_dereference_symlinks_on_open.mdwn create mode 100644 doc/forum/Making_Firefox_not_dereference_symlinks_on_open/comment_1_a7b092f2291fa515279cf7dce23df20d._comment create mode 100644 doc/forum/Making_a_git-annexy_symlink___34__known__34____63__.mdwn create mode 100644 doc/forum/Making_a_git-annexy_symlink___34__known__34____63__/comment_1_e04edbe950a41887c4c11a226ca77dce._comment create mode 100644 doc/forum/Making_a_git-annexy_symlink___34__known__34____63__/comment_2_de77cc2bee45706c4bbe407d8846778e._comment create mode 100644 doc/forum/Making_a_public_read-write_git-annex_repo.mdwn create mode 100644 doc/forum/Making_a_public_read-write_git-annex_repo/comment_1_8279171695a9a7a7501d5ee8c7bab66c._comment create mode 100644 doc/forum/Making_a_public_read-write_git-annex_repo/comment_2_2cd770a12bfe3b44531b024c41570758._comment create mode 100644 doc/forum/Making_a_public_read-write_git-annex_repo/comment_3_19694d397813fe1bb949fd3b6ae49f4b._comment create mode 100644 doc/forum/Making_a_public_read-write_git-annex_repo/comment_4_c8b104eb34efdd7c7670f2133081d1d8._comment create mode 100644 doc/forum/Making_a_public_read-write_git-annex_repo/comment_5_48e247fddb0d302102c74cac7f2228ff._comment create mode 100644 doc/forum/Making_git-annex_a_self-funded_project__63__.mdwn create mode 100644 doc/forum/Making_git-annex_a_self-funded_project__63__/comment_1_4a1ba95b7231ba973ddb672d2419e28c._comment create mode 100644 doc/forum/Making_git-annex_a_self-funded_project__63__/comment_2_7c476ae92e63c991f229708678874ca2._comment create mode 100644 doc/forum/Making_git-annex_less_necessary.mdwn create mode 100644 doc/forum/Making_git-annex_less_necessary/comment_1_03faaa3866778d24cd03887b85dc9954._comment create mode 100644 doc/forum/Making_git-annex_less_necessary/comment_2_2db02a94dffd525885c9d7fc6c5fa464._comment create mode 100644 doc/forum/Making_git-annex_less_necessary/comment_3_429ec656e0ac02f98843f8d7f3c02d6a._comment create mode 100644 doc/forum/Making_git-annex_less_necessary/comment_4_384813dd022dfd9c1ef14e0f1479a123._comment create mode 100644 doc/forum/Making_git-annex_preserve_file_name__44___and_directory.mdwn create mode 100644 doc/forum/Making_git-annex_preserve_file_name__44___and_directory/comment_1_03a5369518a96c0550e68af520ed0060._comment create mode 100644 doc/forum/Making_git-annex_preserve_file_name__44___and_directory/comment_2_64863e149cc62a778b006ffe2bf82d06._comment create mode 100644 doc/forum/Making_git-annex_preserve_file_name__44___and_directory/comment_3_bbd3ea45cf560031856e9e8416b4d126._comment create mode 100644 doc/forum/Making_git-annex_preserve_file_name__44___and_directory/comment_4_2c36e30b3e2f6874c63e03307207a6b9._comment create mode 100644 doc/forum/Malicious_autoenabled_remotes.mdwn create mode 100644 doc/forum/Malicious_autoenabled_remotes/comment_1_c82464f40eb1442aadd0f1e89b72f41e._comment create mode 100644 doc/forum/Malicious_autoenabled_remotes/comment_2_37456c0a159453fa984c5a003578d1eb._comment create mode 100644 doc/forum/Malicious_autoenabled_remotes/comment_3_608213f5d0df482b731ae1502cdd87af._comment create mode 100644 doc/forum/Managing_a_large_number_of_files_archived_on_many_pieces_of_read-only_medium___40__E.G._DVDs__41__.mdwn create mode 100644 doc/forum/Managing_a_large_number_of_files_archived_on_many_pieces_of_read-only_medium___40__E.G._DVDs__41__/comment_10_a061d300b718ad943c940e122cc57220._comment create mode 100644 doc/forum/Managing_a_large_number_of_files_archived_on_many_pieces_of_read-only_medium___40__E.G._DVDs__41__/comment_11_76529080054407570611b4357ce4f3ed._comment create mode 100644 doc/forum/Managing_a_large_number_of_files_archived_on_many_pieces_of_read-only_medium___40__E.G._DVDs__41__/comment_12_9acf5ce41a023f3848a51891cceeb51b._comment create mode 100644 doc/forum/Managing_a_large_number_of_files_archived_on_many_pieces_of_read-only_medium___40__E.G._DVDs__41__/comment_13_0a343a8fdad66765371ca22581b35b84._comment create mode 100644 doc/forum/Managing_a_large_number_of_files_archived_on_many_pieces_of_read-only_medium___40__E.G._DVDs__41__/comment_14_b315c50d796d73bfc35acebee1836f40._comment create mode 100644 doc/forum/Managing_a_large_number_of_files_archived_on_many_pieces_of_read-only_medium___40__E.G._DVDs__41__/comment_15_9ddd6278ea00c5594083347b5b9b8405._comment create mode 100644 doc/forum/Managing_a_large_number_of_files_archived_on_many_pieces_of_read-only_medium___40__E.G._DVDs__41__/comment_16_c3f6cb58dd2328b7af8dd2657c2e2a1e._comment create mode 100644 doc/forum/Managing_a_large_number_of_files_archived_on_many_pieces_of_read-only_medium___40__E.G._DVDs__41__/comment_17_455ab8b72c477769d68eb4348e911234._comment create mode 100644 doc/forum/Managing_a_large_number_of_files_archived_on_many_pieces_of_read-only_medium___40__E.G._DVDs__41__/comment_18_679ad639cbba7f9a4d28131219d20178._comment create mode 100644 doc/forum/Managing_a_large_number_of_files_archived_on_many_pieces_of_read-only_medium___40__E.G._DVDs__41__/comment_19_854531569edbb5c152c4d6b0d764a6c5._comment create mode 100644 doc/forum/Managing_a_large_number_of_files_archived_on_many_pieces_of_read-only_medium___40__E.G._DVDs__41__/comment_1_25e65ee3949e7d918376298cf11585f2._comment create mode 100644 doc/forum/Managing_a_large_number_of_files_archived_on_many_pieces_of_read-only_medium___40__E.G._DVDs__41__/comment_20_a80b9ce3a78fb44c9d60e877146d9e59._comment create mode 100644 doc/forum/Managing_a_large_number_of_files_archived_on_many_pieces_of_read-only_medium___40__E.G._DVDs__41__/comment_2_8a71ca048f9de29a198a6afb17d5315e._comment create mode 100644 doc/forum/Managing_a_large_number_of_files_archived_on_many_pieces_of_read-only_medium___40__E.G._DVDs__41__/comment_3_e3d1d3a3d3d831432ec940a8ab6f31e9._comment create mode 100644 doc/forum/Managing_a_large_number_of_files_archived_on_many_pieces_of_read-only_medium___40__E.G._DVDs__41__/comment_4_26a33eae98b4faaf6baf6635e3d28a8f._comment create mode 100644 doc/forum/Managing_a_large_number_of_files_archived_on_many_pieces_of_read-only_medium___40__E.G._DVDs__41__/comment_5_49ac298d39c824b0e52a239961463e09._comment create mode 100644 doc/forum/Managing_a_large_number_of_files_archived_on_many_pieces_of_read-only_medium___40__E.G._DVDs__41__/comment_6_55a4a3616ea59654da1c2f9902561e3b._comment create mode 100644 doc/forum/Managing_a_large_number_of_files_archived_on_many_pieces_of_read-only_medium___40__E.G._DVDs__41__/comment_7_92a2af3e0e328bb48bcc67a69187ee57._comment create mode 100644 doc/forum/Managing_a_large_number_of_files_archived_on_many_pieces_of_read-only_medium___40__E.G._DVDs__41__/comment_8_f6e39e71882d55cdc061166aea3e2bd3._comment create mode 100644 doc/forum/Managing_a_large_number_of_files_archived_on_many_pieces_of_read-only_medium___40__E.G._DVDs__41__/comment_9_6c45a6264d69e22800c329a0f8a2d470._comment create mode 100644 doc/forum/Managing_multiple_annexes_with_assistant__63__.mdwn create mode 100644 doc/forum/Managing_multiple_annexes_with_assistant__63__/comment_1_ba8c70e4a46441b48ad910625636eee5._comment create mode 100644 doc/forum/Managing_multiple_annexes_with_assistant__63__/comment_2_4b4f0a7d84a51ae92536e2c190256069._comment create mode 100644 doc/forum/Managing_multiple_annexes_with_assistant__63__/comment_3_86daadc565f96db5db13b6dbcbc66db3._comment create mode 100644 doc/forum/Managing_multiple_annexes_with_assistant__63__/comment_4_e43d71ddfdfdb7bcb13bfb894de6a5ec._comment create mode 100644 doc/forum/Managing_multiple_annexes_with_assistant__63__/comment_5_e94d33be83b45918d1a39d6e16fba4b4._comment create mode 100644 doc/forum/Managing_multiple_repositories_concurrently__63__.mdwn create mode 100644 doc/forum/Managing_multiple_repositories_concurrently__63__/comment_1_ebec1ddad71e961cdc9b21cbddfbcdaf._comment create mode 100644 doc/forum/Manipulate_a_git-annex_repo_from_an_Android_app.mdwn create mode 100644 doc/forum/Manipulate_a_git-annex_repo_from_an_Android_app/comment_1_c59ec715eb02fbdd63780b2450ff2de1._comment create mode 100644 doc/forum/Manipulate_a_git-annex_repo_from_an_Android_app/comment_2_20ee5f900a2ff6154c0d90263579723e._comment create mode 100644 doc/forum/Manual_Setup_of_a_Central_Repo.mdwn create mode 100644 doc/forum/Manual_Setup_of_a_Central_Repo/comment_1_3a163fd5629dc40423f1290a78ae1c07._comment create mode 100644 doc/forum/Manual_commit_message_in_direct_mode.mdwn create mode 100644 doc/forum/Manual_commit_message_in_direct_mode/comment_1_32f95eefec25bb127ed96248446c21b1._comment create mode 100644 doc/forum/Manual_commit_message_in_direct_mode/comment_2_bf1d10067379c802ac5020d8becd6d35._comment create mode 100644 doc/forum/Manual_local_pairing_without_webapp__63__.mdwn create mode 100644 doc/forum/Manual_local_pairing_without_webapp__63__/comment_1_1f280e38bf5fa81d3a8cc4887f32e590._comment create mode 100644 doc/forum/Manual_local_pairing_without_webapp__63__/comment_2_d83cc10b2359eb3578c6c4dd299cf308._comment create mode 100644 doc/forum/Manual_mode_option_in_assistant_auto-syncs.mdwn create mode 100644 doc/forum/Manual_mode_option_in_assistant_auto-syncs/comment_1_4a0468b6ca2ffff8ef8f19800597567d._comment create mode 100644 doc/forum/Manual_webapp_behaviour_on_ARM.mdwn create mode 100644 doc/forum/Manual_webapp_behaviour_on_ARM/comment_1_5431a57aa7d659faf0aee12e638dd1ba._comment create mode 100644 doc/forum/Manually_moving_annex_objects_to_new_repo.mdwn create mode 100644 doc/forum/Manually_moving_annex_objects_to_new_repo/comment_1_f9b894bafc5ab19ec7b0b500ddfe00ef._comment create mode 100644 doc/forum/Manually_moving_annex_objects_to_new_repo/comment_2_6125e6a7d6b15dee7bf6a6bfe99bcf73._comment create mode 100644 doc/forum/Manually_moving_annex_objects_to_new_repo/comment_3_8203d8e0444471b9360b679f49f67fac._comment create mode 100644 doc/forum/Massive_drop_in_performance_with_--jobs_option.mdwn create mode 100644 doc/forum/Massive_drop_in_performance_with_--jobs_option/comment_2_8a9b5bc3b8a8ef947f2620422307c465._comment create mode 100644 doc/forum/Massive_drop_in_performance_with_--jobs_option/comment_2_c9fea9db7116e7ee82a09c23f22b54e9._comment create mode 100644 doc/forum/Matching_options_not_working_in_windows_7.mdwn create mode 100644 doc/forum/Matching_options_not_working_in_windows_7/comment_1_616f6c6d26088207ce9c044f4b61eec5._comment create mode 100644 doc/forum/Matching_options_not_working_in_windows_7/comment_2_b0319c1214c26f64058eb9c38ef6fb0d._comment create mode 100644 doc/forum/Matching_options_not_working_in_windows_7/comment_3_d834a6cb0ae1bd47e5280b10ecbaa72d._comment create mode 100644 doc/forum/MegaAnnex_not_working.mdwn create mode 100644 doc/forum/MegaAnnex_not_working/comment_1_5aa3fd366d4c78ca79bb58005a49791c._comment create mode 100644 doc/forum/MegaAnnex_not_working/comment_2_f3eaf1ee06ebac951514d865f298f9d3._comment create mode 100644 doc/forum/Merging_two_git-annex_repositories_together__63__.mdwn create mode 100644 doc/forum/Merging_two_git-annex_repositories_together__63__/comment_1_b96bb95cdbbc78c0b4b348861e2264bd._comment create mode 100644 doc/forum/Merging_two_git-annex_repositories_together__63__/comment_2_539a33b268be5c6954f3112d89dd34ef._comment create mode 100644 doc/forum/Messed_up_repo_by_syncing_to_wrong_remote.mdwn create mode 100644 doc/forum/Messed_up_repo_by_syncing_to_wrong_remote/comment_1_d1358e46d488532e1922a1bf7c471980._comment create mode 100644 doc/forum/Migrate_from_one_connection_mechanism_for_special_remote_to_another.mdwn create mode 100644 doc/forum/Migrate_from_one_connection_mechanism_for_special_remote_to_another/comment_1_6e8e3350ae26b6c59daa56b7e86cc46a._comment create mode 100644 doc/forum/Migrate_from_one_connection_mechanism_for_special_remote_to_another/comment_2_db4b772371ee49c743605c728e23c91a._comment create mode 100644 doc/forum/Migrate_mark_files_dead.mdwn create mode 100644 doc/forum/Migrate_mark_files_dead/comment_1_fa155c961d5aecbe055f67d8ace0c208._comment create mode 100644 doc/forum/Migrate_mark_files_dead/comment_2_a4512fb8a59f3a4d4ee85651a979f00f._comment create mode 100644 doc/forum/Migrate_mark_files_dead/comment_3_a10dbdd505742d5cf03fd435e206d9a2._comment create mode 100644 doc/forum/Missing_git-annex.linux__47__runshell.mdwn create mode 100644 doc/forum/Missing_git-annex.linux__47__runshell/comment_1_f29a5105649579ef15e79d983c4e1f8e._comment create mode 100644 doc/forum/Mixed_content_repos_with_import_and_export.mdwn create mode 100644 doc/forum/Mixed_content_repos_with_import_and_export/comment_1_0486a067491456d92220ca638e3095bf._comment create mode 100644 doc/forum/Mixed_content_repos_with_import_and_export/comment_2_d0e73dbcf22704cf1c9af8a56533aebe._comment create mode 100644 doc/forum/Mixed_content_repos_with_import_and_export/comment_3_d15b0e5a034deeac85806790e53aefaf._comment create mode 100644 doc/forum/Mixed_content_repos_with_import_and_export/comment_4_3f7d0f8d1a48d60612aa8477e32fb6f1._comment create mode 100644 doc/forum/Mixed_content_repos_with_import_and_export/comment_5_9f11132002d2fee9917e91a7b80a94b3._comment create mode 100644 doc/forum/Modification_time_of_files_retained_in_synchronized_remote_copies__63__.mdwn create mode 100644 doc/forum/Modification_time_of_files_retained_in_synchronized_remote_copies__63__/comment_1_2b13584998108af0522b898c5d396ba4._comment create mode 100644 doc/forum/Modus_operandi_for_local_full_backup.mdwn create mode 100644 doc/forum/Modus_operandi_for_local_full_backup/comment_1_fa8ac55ebd94312a36b284047b6cf932._comment create mode 100644 doc/forum/Modus_operandi_for_local_full_backup/comment_2_fc2ac75608e91018f67c3753e9b09f76._comment create mode 100644 doc/forum/Modus_operandi_for_local_full_backup/comment_3_6089f53d8af5746f2a410d0214567943._comment create mode 100644 doc/forum/Modus_operandi_for_local_full_backup/comment_4_4c27aae1361465993fb60997bb0eadf8._comment create mode 100644 doc/forum/Move_files_in_git_annex___40__direct_mode__41__.mdwn create mode 100644 doc/forum/Move_files_in_git_annex___40__direct_mode__41__/comment_1_6426aca2296b5e03b333d5253ae7d88c._comment create mode 100644 doc/forum/Move_history.mdwn create mode 100644 doc/forum/Move_history/comment_10_da64814a7dfc2322200130a17bb79923._comment create mode 100644 doc/forum/Move_history/comment_11_46ce6990e5921238f98749af830ac5ec._comment create mode 100644 doc/forum/Move_history/comment_1_b720837e8e4ab8f4b0648f8ac336a605._comment create mode 100644 doc/forum/Move_history/comment_2_17b8c2fd3ac706cd666ad5f5c0a21715._comment create mode 100644 doc/forum/Move_history/comment_3_9ff881c26c3bd7f3a61595ffc1df743a._comment create mode 100644 doc/forum/Move_history/comment_4_d0c97744e9ccca21e4023f657e9f5f30._comment create mode 100644 doc/forum/Move_history/comment_6_0655707fe70710408b93b5f53f8d6f26._comment create mode 100644 doc/forum/Move_history/comment_6_f2e1d20e269648358b1eced616727e63._comment create mode 100644 doc/forum/Move_history/comment_7_acd690861b31e55352497b32b7c0fd6e._comment create mode 100644 doc/forum/Move_history/comment_8_0e4b1629d2bb9d360a1ba65494dd8ccd._comment create mode 100644 doc/forum/Move_history/comment_9_1153476304000f417292fdce1f9727bf._comment create mode 100644 doc/forum/Move_unsynced_file_in_direct_mode.mdwn create mode 100644 doc/forum/Move_unsynced_file_in_direct_mode/comment_1_12a797cba753168dfde9e6339c00f481._comment create mode 100644 doc/forum/Move_unsynced_file_in_direct_mode/comment_2_f3aec24668c35780a033f2b035df10ee._comment create mode 100644 doc/forum/Moving_S3_special_remote.mdwn create mode 100644 doc/forum/Moving_S3_special_remote/comment_1_b030a7afcbf1a329bb35260cf338ff96._comment create mode 100644 doc/forum/Moving_S3_special_remote/comment_2_3c4b8afa81590a1f1e2291a08d633b16._comment create mode 100644 doc/forum/Moving_large_files_within_the_repo_without_copying___63__.mdwn create mode 100644 doc/forum/Moving_large_files_within_the_repo_without_copying___63__/comment_1_9e3290138133d5a23a80f72342f47ec4._comment create mode 100644 doc/forum/Moving_large_files_within_the_repo_without_copying___63__/comment_2_232b77894dda51d02cbc34bd25d3213b._comment create mode 100644 doc/forum/Moving_large_files_within_the_repo_without_copying___63__/comment_3_d35ac1bdb3fa6e303ad92348ba174158._comment create mode 100644 doc/forum/Moving_large_files_within_the_repo_without_copying___63__/comment_4_4b443ec6b47eaabe214d0c2222083e4a._comment create mode 100644 doc/forum/Moving_older_version__39__s_file_content_without_doing_checkout.mdwn create mode 100644 doc/forum/Moving_older_version__39__s_file_content_without_doing_checkout/comment_1_f114b75b29123453758b493fae7f5167._comment create mode 100644 doc/forum/Moving_older_version__39__s_file_content_without_doing_checkout/comment_2_e377b7614c2961b460a10e285f3db274._comment create mode 100644 doc/forum/Moving_older_version__39__s_file_content_without_doing_checkout/comment_3_d251958795ab0867c65cf182e54a6ffe._comment create mode 100644 doc/forum/Multiple_group_groupwanted_settings_help.mdwn create mode 100644 doc/forum/Multiple_group_groupwanted_settings_help/comment_1_e78d0aa6b23225c509b9e97549fe915b._comment create mode 100644 doc/forum/Multiple_group_groupwanted_settings_help/comment_2_b3d95d5c03c7b985d39a4d5a45ba3dec._comment create mode 100644 doc/forum/Multiple_interface_to_the_same_annex.mdwn create mode 100644 doc/forum/Multiple_interface_to_the_same_annex/comment_1_ea9e3a987112d8bf6421be234bf61d3c._comment create mode 100644 doc/forum/Multiple_machine_remotes_on_external_drive.mdwn create mode 100644 doc/forum/Multiple_prefered_content_groups.mdwn create mode 100644 doc/forum/Multiple_prefered_content_groups/comment_1_b401d234c0730412053f0f6a6f9cf2d6._comment create mode 100644 doc/forum/Multiple_prefered_content_groups/comment_2_a91177f4f02500e8fa6594933e128ef0._comment create mode 100644 doc/forum/Multiple_remotes_with_the_same_path.mdwn create mode 100644 doc/forum/Multiple_remotes_with_the_same_path/comment_1_78f2d8e3906c11ba5753478d08973bd2._comment create mode 100644 doc/forum/Multiple_remotes_with_the_same_path/comment_2_8cd3edf2e71e904f1b651abdfd7a4499._comment create mode 100644 doc/forum/Multiple_repos_on_same_path.mdwn create mode 100644 doc/forum/Multiple_repos_on_same_path/comment_1_67ed823c4c40f5acf12b48eb75d7afa8._comment create mode 100644 doc/forum/Multiple_repos_on_same_path/comment_2_e1c4ac71eb0f9ff6ae1701b3a6d738dd._comment create mode 100644 doc/forum/Multisession_compatible__63__.mdwn create mode 100644 doc/forum/Multisession_compatible__63__/comment_1_dab5a92416314a7d4c02663d4e46cd60._comment create mode 100644 doc/forum/Multisession_compatible__63__/comment_2_1c8d0f97d353c3e1d290edbe0a48b359._comment create mode 100644 doc/forum/Multisession_compatible__63__/comment_2_c1dc4294cc2a43cfecfb7279d6411924._comment create mode 100644 doc/forum/Multisession_compatible__63__/comment_4_b7148c3afd31ce1effd135a4f7c92dbc._comment create mode 100644 doc/forum/Multisession_compatible__63__/comment_5_d0ddac05268d978e950c91e76b023ffe._comment create mode 100644 doc/forum/Multisession_compatible__63__/comment_6_e2319f774eda62600c27ab9d2d0d1e50._comment create mode 100644 doc/forum/Multisession_compatible__63__/comment_7_0e6c8ab32c589f0d971d4c208a8d1645._comment create mode 100644 doc/forum/Must_all_nodes_be_accessible_to_one_another__63__.mdwn create mode 100644 doc/forum/Must_all_nodes_be_accessible_to_one_another__63__/comment_1_7af462f69b9efc3bbe18d0dbc839cb39._comment create mode 100644 doc/forum/Must_all_nodes_be_accessible_to_one_another__63__/comment_2_882d9e6b7b2297dfd29266bbd429b046._comment create mode 100644 doc/forum/My_first_impressions_after_some_weeks_with_git-annex_assistant.mdwn create mode 100644 doc/forum/My_first_impressions_after_some_weeks_with_git-annex_assistant/comment_1_9d4019a54fb508e286a5d6d2660361d9._comment create mode 100644 doc/forum/My_first_impressions_after_some_weeks_with_git-annex_assistant/comment_2_109534a45881ce94a4586c8a83945f9f._comment create mode 100644 doc/forum/NTFS_drive_mounted_on_Linux.mdwn create mode 100644 doc/forum/NTFS_usb_on_linux_unable_to_connect_to_ssh_remote.mdwn create mode 100644 doc/forum/NTFS_usb_on_linux_unable_to_connect_to_ssh_remote/comment_1_b2d2bf6be441dc2e4443d06ef8db7134._comment create mode 100644 doc/forum/NTFS_usb_on_linux_unable_to_connect_to_ssh_remote/comment_2_75abe6da74cd0432e616e391f5be6fe3._comment create mode 100644 doc/forum/Need_new_build_instructions_for_Debian_stable.mdwn create mode 100644 doc/forum/Need_new_build_instructions_for_Debian_stable/comment_1_8c1eea6dfec8b7e1c7a371b6e9c26118._comment create mode 100644 doc/forum/Need_new_build_instructions_for_Debian_stable/comment_2_f6ff8306c946219dbe39bb8938a349ab._comment create mode 100644 doc/forum/Need_new_build_instructions_for_Debian_stable/comment_3_bcda70cbfc7c1a14fa82da70f9f876e2._comment create mode 100644 doc/forum/Need_some_help_installing_on_freeBSD.mdwn create mode 100644 doc/forum/Need_some_help_installing_on_freeBSD/comment_1_3962871e646280e2c4fdff8a08bed485._comment create mode 100644 doc/forum/Need_some_help_installing_on_freeBSD/comment_2_528fdd2c385809b971eceee1eb70ee38._comment create mode 100644 doc/forum/Need_some_help_installing_on_freeBSD/comment_3_5ae3cd6e24a25d6dc803ec2adea0414f._comment create mode 100644 doc/forum/Need_some_help_installing_on_freeBSD/comment_4_1dcc43aaad2099bb1684873d24da668f._comment create mode 100644 doc/forum/Need_some_help_installing_on_freeBSD/comment_5_527bf6df2485c5e906f1d50930ec01fe._comment create mode 100644 doc/forum/Need_some_help_to_fix_my_repository.mdwn create mode 100644 doc/forum/Need_some_help_to_fix_my_repository/comment_1_f0d279c530b796b2c93d793f85d147e8._comment create mode 100644 doc/forum/Need_some_help_to_fix_my_repository/comment_2_a3fcfa1f8eadec5fa8a9efacca174048._comment create mode 100644 doc/forum/Need_some_help_to_fix_my_repository/comment_3_7878f9b76ddfa3392c9ec6a1810cb745._comment create mode 100644 doc/forum/Need_to_recover_unused_files_because_of_bad_sync__63__.mdwn create mode 100644 doc/forum/Need_to_recover_unused_files_because_of_bad_sync__63__/comment_1_af0ed0730645c1e3c9a4946acd48c18a._comment create mode 100644 doc/forum/Need_to_recover_unused_files_because_of_bad_sync__63__/comment_2_12f3c2bb2458b69e6355c8f94bab868f._comment create mode 100644 doc/forum/Need_to_recover_unused_files_because_of_bad_sync__63__/comment_3_b233b4daac32c452776e1e3d9a29f2cc._comment create mode 100644 doc/forum/Need_to_recover_unused_files_because_of_bad_sync__63__/comment_4_8e079e92929dcfdf19f6adec16f800e5._comment create mode 100644 doc/forum/New_Arch_Linux_package_for_git-annex.mdwn create mode 100644 doc/forum/New_Arch_Linux_package_for_git-annex/comment_1_5881a5974ec1c4f701775c30b814ee2f._comment create mode 100644 doc/forum/New_Arch_Linux_package_for_git-annex/comment_2_f41f9248f4d5039309e8fd98524e86bc._comment create mode 100644 doc/forum/New_Arch_Linux_package_for_git-annex/comment_3_ab1f6e45625e6ab80770d4ff65ec4242._comment create mode 100644 doc/forum/New_external_special_remote_for_rclone.mdwn create mode 100644 doc/forum/New_external_special_remote_for_rclone/comment_1_8845852338bbb7e46c0d5585d5884faf._comment create mode 100644 doc/forum/New_external_special_remote_for_rclone/comment_2_4057e28ed32aeab048f7c97a733f180f._comment create mode 100644 doc/forum/New_external_special_remote_for_rclone/comment_3_4412a5a25ac933de71772afd23cd66bd._comment create mode 100644 doc/forum/New_external_special_remote_for_rclone/comment_4_9a23f4e9d673b4dcf60b3425fa4df4aa._comment create mode 100644 doc/forum/New_external_special_remote_for_rclone/comment_5_cf45b8efbb296013493e7756cdfcf291._comment create mode 100644 doc/forum/New_external_special_remote_for_rclone/comment_6_36a0260f013ccbd06460dea83fe22278._comment create mode 100644 doc/forum/New_external_special_remote_for_rclone/comment_7_4d7f07a872ef3cc2c4928dcd1580bd0a._comment create mode 100644 doc/forum/New_git-annex_integration_mode_for_Emacs_users.mdwn create mode 100644 doc/forum/New_user_misunderstandings.mdwn create mode 100644 doc/forum/New_user_misunderstandings/comment_1_c1785924109b5d5cde9aa3d3460cf955._comment create mode 100644 doc/forum/Newb_question_on_sneekernet_sync.mdwn create mode 100644 doc/forum/Newb_question_on_sneekernet_sync/comment_1_409cc5ba605d63331b386066d32f797b._comment create mode 100644 doc/forum/Newbie_question_for_a_simple_task.mdwn create mode 100644 doc/forum/Newbie_question_for_a_simple_task/comment_1_51cf643c8d843dd2ab49c83aaf4fd218._comment create mode 100644 doc/forum/Newbie_question_for_a_simple_task/comment_2_a9d18e6fb1c6b064f50467c23bc89d2e._comment create mode 100644 doc/forum/Newbie_stuck_at___34__Unable_to_connect_to_the_Jabber_server__34__.mdwn create mode 100644 doc/forum/Newbie_stuck_at___34__Unable_to_connect_to_the_Jabber_server__34__/comment_1_59158afcedac18a7285d57491b2a468a._comment create mode 100644 doc/forum/Newbie_stuck_at___34__Unable_to_connect_to_the_Jabber_server__34__/comment_2_2a70ac08bb95774415b09dab7d7f8605._comment create mode 100644 doc/forum/Newbie_stuck_at___34__Unable_to_connect_to_the_Jabber_server__34__/comment_3_92a52b523ed4c68b70ddcabc2a050b76._comment create mode 100644 doc/forum/Newbie_stuck_at___34__Unable_to_connect_to_the_Jabber_server__34__/comment_4_c52a75761ea107f6d69c09bac64f0f0a._comment create mode 100644 doc/forum/Newbie_stuck_at___34__Unable_to_connect_to_the_Jabber_server__34__/comment_5_2685e3a87464ccd37d593516d94ba5cf._comment create mode 100644 doc/forum/No_SSL_traffic_for_S3__63__.mdwn create mode 100644 doc/forum/No_SSL_traffic_for_S3__63__/comment_1_f509bf273896180e6df8c771438dd093._comment create mode 100644 doc/forum/No_SSL_traffic_for_S3__63__/comment_2_358635d19c82202c63014ca84de7fc3b._comment create mode 100644 doc/forum/No_known_copies_exist_of.mdwn create mode 100644 doc/forum/No_luck_getting_forgetfulness_does_not_propagate.mdwn create mode 100644 doc/forum/No_luck_getting_forgetfulness_does_not_propagate/comment_1_b4aaabb50743dd11b70ce0cd2b85df5e._comment create mode 100644 doc/forum/No_luck_getting_forgetfulness_does_not_propagate/comment_2_81c98f50953860c15473e958c55d1e4b._comment create mode 100644 doc/forum/No_luck_getting_forgetfulness_does_not_propagate/comment_3_350cc2d2025655804a58ed520a157c2e._comment create mode 100644 doc/forum/No_output_from_git-annex_status_v5.20131224-g692aa01.mdwn create mode 100644 doc/forum/No_output_from_git-annex_status_v5.20131224-g692aa01/comment_1_b014f1edcb7ce39da9b582683d3b80c0._comment create mode 100644 doc/forum/No_output_from_git-annex_status_v5.20131224-g692aa01/comment_2_24602de6cfe1f3d988c5105e7266a518._comment create mode 100644 doc/forum/Non-ASCII_filenames.mdwn create mode 100644 doc/forum/Not_enough_free_space.mdwn create mode 100644 doc/forum/Not_enough_free_space/comment_1_4721e6e6c263c2a624d6cc77f6575860._comment create mode 100644 doc/forum/Not_enough_free_space/comment_2_69e5a25b63457e702436b54d26f6d482._comment create mode 100644 doc/forum/Not_enough_free_space/comment_3_c6ad0934136448a014f6b1c317bba3e6._comment create mode 100644 doc/forum/Not_enough_free_space/comment_4_c05f95ae6d69cdc214a2b31ebc296a3b._comment create mode 100644 doc/forum/Not_enough_free_space/comment_5_f8206862e22fa354d97cc3d9d2af8d5c._comment create mode 100644 doc/forum/Not_enough_free_space/comment_6_06d27155323cf5609b17c4e1197ab9ac._comment create mode 100644 doc/forum/Not_enough_free_space/comment_7_7cf8cf6d15324b840336be561423d34b._comment create mode 100644 doc/forum/Not_sure_how_to_get_my_s3_remote_back.mdwn create mode 100644 doc/forum/Not_sure_how_to_get_my_s3_remote_back/comment_10_ed35a6ec605e8f79ec107856af6d1a46._comment create mode 100644 doc/forum/Not_sure_how_to_get_my_s3_remote_back/comment_11_e48b6efa42159dc83e1be11bfb54abcd._comment create mode 100644 doc/forum/Not_sure_how_to_get_my_s3_remote_back/comment_12_b58232d0e3fa4649565c0c7d4ce2e82e._comment create mode 100644 doc/forum/Not_sure_how_to_get_my_s3_remote_back/comment_13_85368b60091dc3ce2efb58013ffe9f83._comment create mode 100644 doc/forum/Not_sure_how_to_get_my_s3_remote_back/comment_14_e65281bef23e0076936c508728a87897._comment create mode 100644 doc/forum/Not_sure_how_to_get_my_s3_remote_back/comment_1_fffb59ad5a197d2980dd0ec35cf4aafa._comment create mode 100644 doc/forum/Not_sure_how_to_get_my_s3_remote_back/comment_2_0cfcc2075bff556b9fde5acc3dc1d599._comment create mode 100644 doc/forum/Not_sure_how_to_get_my_s3_remote_back/comment_3_6fe2ff1282fb14a4ce26ef8dc775d07e._comment create mode 100644 doc/forum/Not_sure_how_to_get_my_s3_remote_back/comment_4_64338d2d77dcbabd16b55eb145f40dc6._comment create mode 100644 doc/forum/Not_sure_how_to_get_my_s3_remote_back/comment_5_dd66c9ea0c83388f6826751944330d10._comment create mode 100644 doc/forum/Not_sure_how_to_get_my_s3_remote_back/comment_6_dc0c5e395e4c443b7227afdb157194e5._comment create mode 100644 doc/forum/Not_sure_how_to_get_my_s3_remote_back/comment_7_3c0ea4c76cdd889707f7308576e3efa0._comment create mode 100644 doc/forum/Not_sure_how_to_get_my_s3_remote_back/comment_8_36519ee4499a19f0864e4fcd264e9933._comment create mode 100644 doc/forum/Not_sure_how_to_get_my_s3_remote_back/comment_9_85b23f375e53469fb09b24b945b3aba9._comment create mode 100644 doc/forum/OSX_Finder_extension.mdwn create mode 100644 doc/forum/OSX_Finder_extension/comment_1_4aa37c3fbe3c260d71f2ed16fd4f20bc._comment create mode 100644 doc/forum/OSX_Finder_extension/comment_2_e16092041890f81dc65a6ab28b2224a6._comment create mode 100644 doc/forum/OSX_Mavericks_anyone__63__.mdwn create mode 100644 doc/forum/OSX_Mavericks_anyone__63__/comment_1_3075b02aeb57adcbf4addf9fb4c123ba._comment create mode 100644 doc/forum/OSX_Mavericks_anyone__63__/comment_2_c2b6110fc4a3d3481ed8a4b48efb9635._comment create mode 100644 doc/forum/OSX_Mavericks_anyone__63__/comment_3_7df9ba63cb1f385681242b4b58d6a87c._comment create mode 100644 doc/forum/OSX_Mavericks_anyone__63__/comment_4_740fee31c4ca9d84428f97f63ffc075a._comment create mode 100644 doc/forum/OSX__39__s_default_sshd_behaviour_has_limited_paths_set.mdwn create mode 100644 doc/forum/OSX__39__s_default_sshd_behaviour_has_limited_paths_set/comment_1_a136ff877389f0930c066ba118edd9fd._comment create mode 100644 doc/forum/OSX__39__s_default_sshd_behaviour_has_limited_paths_set/comment_2_5fcc52a62770fb932a4a2101f5badbc0._comment create mode 100644 doc/forum/OSX__39__s_default_sshd_behaviour_has_limited_paths_set/comment_3_521f34c340ad54cef6458a8b6cfff8a9._comment create mode 100644 doc/forum/OSX__39__s_haskell-platform_statically_links_things.mdwn create mode 100644 doc/forum/OSX__58___Upgrader__58___Failed_to_check_if_upgrade_is_available.mdwn create mode 100644 doc/forum/OSX__58___Upgrader__58___Failed_to_check_if_upgrade_is_available/comment_1_ac7c1f39e723cbcd49d6497649e7e44f._comment create mode 100644 doc/forum/Odd_Hybrid_Symlinks_To_Content.mdwn create mode 100644 doc/forum/Old_versions_of_files_are_not_dropped_even_though_enough_copies_exist.mdwn create mode 100644 doc/forum/Old_versions_of_files_are_not_dropped_even_though_enough_copies_exist/comment_1_d43c3b97af1d9d2d4534b40a43567420._comment create mode 100644 doc/forum/Old_versions_of_files_are_not_dropped_even_though_enough_copies_exist/comment_2_81e3664c6746fbeb2d76cca7160cf58a._comment create mode 100644 doc/forum/Old_versions_of_files_are_not_dropped_even_though_enough_copies_exist/comment_3_d5b2b68f22796c3ecd2929f47db3601e._comment create mode 100644 doc/forum/One_repo_with_multiple_remotes.mdwn create mode 100644 doc/forum/One_repo_with_multiple_remotes/comment_1_4b9b3137396a3e830fe96726401270b8._comment create mode 100644 doc/forum/OpenOffice___47___Libre_Office.mdwn create mode 100644 doc/forum/OpenOffice___47___Libre_Office/comment_1_98ed542fedd820d47bf8deb7d3232725._comment create mode 100644 doc/forum/OpenOffice___47___Libre_Office/comment_2_f313fdaa23863c2ae99cfbfe9ec2e1e0._comment create mode 100644 doc/forum/Out_of_memory_on_NFS4_with_files_bigger_than_available_memory.mdwn create mode 100644 doc/forum/Out_of_memory_on_NFS4_with_files_bigger_than_available_memory/comment_1_2e89bcc3fbd069e5d9eb12c1c19993ad._comment create mode 100644 doc/forum/Out_of_memory_on_NFS4_with_files_bigger_than_available_memory/comment_2_cf8065e697a0a83cf3461672cb6421e0._comment create mode 100644 doc/forum/Out_of_memory_on_NFS4_with_files_bigger_than_available_memory/comment_3_e6bd4eb070a094116e13064dca6d5bb5._comment create mode 100644 doc/forum/Out_of_memory_on_NFS4_with_files_bigger_than_available_memory/comment_4_42adc29a2c3216910a3bcda04d6f6a6b._comment create mode 100644 doc/forum/Overwriting_data_without_getting_it.mdwn create mode 100644 doc/forum/Overwriting_data_without_getting_it/comment_1_f1c0199ee9bffcc84287370b89361294._comment create mode 100644 doc/forum/Overwriting_data_without_getting_it/comment_2_6a1d08dbca206129ef6cf8aa97daeee1._comment create mode 100644 doc/forum/Overwriting_data_without_getting_it/comment_3_52958e76e506fdbb6b533681ab619b3b._comment create mode 100644 doc/forum/PDF-related_error_when_running_git-annex-add_or_git-annex-status.mdwn create mode 100644 doc/forum/PDF-related_error_when_running_git-annex-add_or_git-annex-status/comment_1_4df2625cc1f1de8f164aa9500eb80e13._comment create mode 100644 doc/forum/Paths_changed_in_.git__47__annex__47__objects.mdwn create mode 100644 doc/forum/Paths_changed_in_.git__47__annex__47__objects/comment_1_e89aa61303d97bfd433e24173867723a._comment create mode 100644 doc/forum/Paths_changed_in_.git__47__annex__47__objects/comment_2_3e467d256ef7c2f4d469073c00cacbca._comment create mode 100644 doc/forum/Paths_changed_in_.git__47__annex__47__objects/comment_3_119c181afe351a412e8a13c59175ec45._comment create mode 100644 doc/forum/Paths_changed_in_.git__47__annex__47__objects/comment_4_0a9cec8f4e26c2e2365b54b29c91ee3d._comment create mode 100644 doc/forum/Paths_changed_in_.git__47__annex__47__objects/comment_5_df986910016ce53a6155edf96f4c312d._comment create mode 100644 doc/forum/Paths_changed_in_.git__47__annex__47__objects/comment_6_c4fe35a93ed32f7b14c5ffd5a4a8ec27._comment create mode 100644 doc/forum/Per_directory_numcopies.mdwn create mode 100644 doc/forum/Per_directory_numcopies/comment_1_33497e3a46926595920eb3dcdb58447c._comment create mode 100644 doc/forum/Per_directory_numcopies/comment_2_00572e3c15e5a9d253fb4ea57b45ff0d._comment create mode 100644 doc/forum/Performance_implications_of_triply_nested_objects_directory.mdwn create mode 100644 doc/forum/Performance_implications_of_triply_nested_objects_directory/comment_1_068a8f120d188b8fa5d3e5b687fd02dc._comment create mode 100644 doc/forum/Performance_implications_of_triply_nested_objects_directory/comment_2_cc0f5be21fd1523bdddc7bcf6ff04435._comment create mode 100644 doc/forum/Performance_implications_of_triply_nested_objects_directory/comment_3_1133795276371c86cdd52b25a8b20c52._comment create mode 100644 doc/forum/Performance_implications_of_triply_nested_objects_directory/comment_4_4e44289e6913797844e103f9cdf4c5a2._comment create mode 100644 doc/forum/Performance_of_V6__44___V7__44___V8_repos.mdwn create mode 100644 doc/forum/Performance_of_V6__44___V7__44___V8_repos/comment_1_981279bae881a07185707c29e6c58b28._comment create mode 100644 doc/forum/Performance_of_V6__44___V7__44___V8_repos/comment_2_01e6d32c85524a23399a33b5fb12ec06._comment create mode 100644 doc/forum/Performance_of_V6__44___V7__44___V8_repos/comment_3_71e8d6ed7b1a6088cdb5abb5667ee619._comment create mode 100644 doc/forum/Permission_denied_-_what_is_wrong__63__.mdwn create mode 100644 doc/forum/Permission_denied_-_what_is_wrong__63__/comment_1_b850a32cce4c9782e59fc91076b6cae7._comment create mode 100644 doc/forum/Permission_denied_-_what_is_wrong__63__/comment_2_e8d2170e5f830d0f98bc8251caf8bc5e._comment create mode 100644 doc/forum/Permission_denied___40__publickey__41___On_second_Step_...___63__.mdwn create mode 100644 doc/forum/Permission_denied___40__publickey__41___On_second_Step_...___63__/comment_1_6c74f0b43c457fe97b2d8630ca4fde29._comment create mode 100644 doc/forum/Permission_denied___40__publickey__41___On_second_Step_...___63__/comment_2_b7a384e853e1756a684774348fad29e6._comment create mode 100644 doc/forum/Permission_denied___40__publickey__41___On_second_Step_...___63__/comment_3_3a8a7f51cb04a92c576549d379b57248._comment create mode 100644 doc/forum/Permission_denied___40__publickey__41___On_second_Step_...___63__/comment_4_582ad3ba0c62a77b08a10b37a780c670._comment create mode 100644 doc/forum/Permissions_error_with_ssh_key_authentication_to_remote.mdwn create mode 100644 doc/forum/Permissions_error_with_ssh_key_authentication_to_remote/comment_1_39a096f92f0280db9502397b9fc55541._comment create mode 100644 doc/forum/Photos__44___raw_and_jpeg__58___drop_jpeg_if_raw_is_available.mdwn create mode 100644 doc/forum/Photos__44___raw_and_jpeg__58___drop_jpeg_if_raw_is_available/comment_1_3f365138be319ac2c81bdefb3f59b0d8._comment create mode 100644 doc/forum/Photos__44___raw_and_jpeg__58___drop_jpeg_if_raw_is_available/comment_2_0186f593ec084e12216ad2f7da49474e._comment create mode 100644 doc/forum/Photos__44___raw_and_jpeg__58___drop_jpeg_if_raw_is_available/comment_4_0bc307a3fbe000059b23cf681d125ce6._comment create mode 100644 doc/forum/Photos__44___raw_and_jpeg__58___drop_jpeg_if_raw_is_available/comment_4_0dc16ef1d592be0dfeb63c28014a70b2._comment create mode 100644 doc/forum/Photos__44___raw_and_jpeg__58___drop_jpeg_if_raw_is_available/comment_5_9eb36b5b43b77de790f99ae1d764e4ea._comment create mode 100644 doc/forum/Photos__44___raw_and_jpeg__58___drop_jpeg_if_raw_is_available/comment_6_a34d404dbecd6730c1cc28af9c0eac26._comment create mode 100644 doc/forum/Photos__44___raw_and_jpeg__58___drop_jpeg_if_raw_is_available/comment_7_88b04371b3906f01c7b33d110838dc71._comment create mode 100644 doc/forum/Photos__44___raw_and_jpeg__58___drop_jpeg_if_raw_is_available/comment_8_b3e9100b92aaed66b22c76141f7c08d5._comment create mode 100644 doc/forum/Plans_on_tunable_to_remove_sha-inside-sha_single-file-dirs.mdwn create mode 100644 doc/forum/Plans_on_tunable_to_remove_sha-inside-sha_single-file-dirs/comment_1_616f610876e08828e6ad6b89b9e561be._comment create mode 100644 doc/forum/Please_diagnose__58_____96__git_status__96___is_slow_after_update.mdwn create mode 100644 doc/forum/Please_diagnose__58_____96__git_status__96___is_slow_after_update/comment_1_68429f9e44ce24250c608da8ffffe643._comment create mode 100644 doc/forum/Please_diagnose__58_____96__git_status__96___is_slow_after_update/comment_2_cefd5742da29e19f5ab3406698a13f9f._comment create mode 100644 doc/forum/Please_diagnose__58_____96__git_status__96___is_slow_after_update/comment_3_ab005dba805922597a533ddd661f20c8._comment create mode 100644 doc/forum/Please_fix_compatibility_with_ghc_7.0.mdwn create mode 100644 doc/forum/Please_fix_compatibility_with_ghc_7.0/comment_1_d1d10217ebd0151e947b3a6cd37399ce._comment create mode 100644 doc/forum/Please_help__44___half_my_files_disappeared.mdwn create mode 100644 doc/forum/Please_help__44___half_my_files_disappeared/comment_1_ba7c79dd7805aa9ec1b90d643f6bf555._comment create mode 100644 doc/forum/Please_help_me_help_my_photographer_friends.mdwn create mode 100644 doc/forum/Please_publish_new_releases_not_shorter_than_11_days.mdwn create mode 100644 doc/forum/Please_publish_new_releases_not_shorter_than_11_days/comment_1_da3d39de5be47ebe8b25a42ed1f36510._comment create mode 100644 doc/forum/Podcast_syncing_use-case.mdwn create mode 100644 doc/forum/Podcast_syncing_use-case/comment_1_ace6f9d3a950348a3ac0ff592b62e786._comment create mode 100644 doc/forum/Podcast_syncing_use-case/comment_2_930a6620b4d516e69ed952f9da5371bb._comment create mode 100644 doc/forum/Poor_man__39__s_IMAP.mdwn create mode 100644 doc/forum/Poor_man__39__s_IMAP/comment_1_258ff23c462dc88b88ced405c4f5040f._comment create mode 100644 doc/forum/Poor_man__39__s_IMAP/comment_2_c88d1abdda4cb526a6ee45a710c75bc4._comment create mode 100644 doc/forum/Poor_man__39__s_IMAP/comment_3_3847e371db1c2788c075e7dca1fbd33e._comment create mode 100644 doc/forum/Poor_man__39__s_IMAP/comment_4_cf6cc21f2cf2aa5c949844e24a7b4075._comment create mode 100644 doc/forum/Poor_man__39__s_IMAP/comment_5_d861fa69475ce526841b3195be8ee356._comment create mode 100644 doc/forum/Poor_man__39__s_IMAP/comment_6_1e81bd4bb62652bc674cdcd7ed57ac5c._comment create mode 100644 doc/forum/Poor_man__39__s_IMAP/comment_7_b3929281dff6078d77f1b9ae42e25bb6._comment create mode 100644 doc/forum/Poor_man__39__s_IMAP/comment_8_69506e8c519196f44b9ed15b32f00106._comment create mode 100644 doc/forum/Portable_version_of_git-annex_for_windows.mdwn create mode 100644 doc/forum/Portable_version_of_git-annex_for_windows/comment_1_e5e60fa8d104a09152a8164d5a906aec._comment create mode 100644 doc/forum/Portable_version_of_git-annex_for_windows/comment_2_d8d1aa0920351e880ba6678bb97585de._comment create mode 100644 doc/forum/Possible_bug_in_setting_up_Rsync.net_remote.mdwn create mode 100644 doc/forum/Possible_bug_in_setting_up_Rsync.net_remote/comment_1_dba203d6c701365685f1a0d4269633a3._comment create mode 100644 doc/forum/Possible_bug_in_setting_up_Rsync.net_remote/comment_2_47b14e71ce0dd653a300dabe8ab0ac3a._comment create mode 100644 doc/forum/Possible_bug_in_setting_up_Rsync.net_remote/comment_3_753ff00c43be5f9bef6bcb529ad68bb9._comment create mode 100644 doc/forum/Possible_bug_in_setting_up_Rsync.net_remote/comment_4_43f04bfbaeb4f04a5980ade59a36ae91._comment create mode 100644 doc/forum/Possible_bug_in_setting_up_Rsync.net_remote/comment_5_6dd6819103814056d8b71356804be56a._comment create mode 100644 doc/forum/Possible_bug_in_setting_up_Rsync.net_remote/comment_6_b90f349f00ea283d018681505b4feaf5._comment create mode 100644 doc/forum/Possible_to_restore_from_an_encrypted_s3_remote__63__.mdwn create mode 100644 doc/forum/Possible_to_restore_from_an_encrypted_s3_remote__63__/comment_1_98033f3324bf78af886fa0f003f5eff8._comment create mode 100644 doc/forum/Possible_to_restore_from_an_encrypted_s3_remote__63__/comment_2_ddd6a56d583fd5b9d676365f4ebd9b68._comment create mode 100644 doc/forum/Post-Kickstarter.mdwn create mode 100644 doc/forum/Preferred_content_settings_for_sets_of_backup_drives__63__.mdwn create mode 100644 doc/forum/Preferred_content_settings_for_sets_of_backup_drives__63__/comment_1_54cdea3a60d61dad6332af31b2968bdd._comment create mode 100644 doc/forum/Preferred_content_settings_for_sets_of_backup_drives__63__/comment_2_c21e128f6bdd5408607b51c963854d4d._comment create mode 100644 doc/forum/Preferred_contents_based_on_presence_in_repo.mdwn create mode 100644 doc/forum/Preferred_contents_based_on_presence_in_repo/comment_1_2109fe43fccc6576e782a2e765eb6b50._comment create mode 100644 doc/forum/Preferred_contents_based_on_presence_in_repo/comment_2_f3adab92e7015245735f4bcad1d7a146._comment create mode 100644 doc/forum/Preferred_contents_based_on_presence_in_repo/comment_3_6aaf8226051e9dd104da206b032cfe5a._comment create mode 100644 doc/forum/Preferred_contents_based_on_presence_in_repo/comment_4_ffda2c94cbccab1d462a4e333816773b._comment create mode 100644 doc/forum/Prepare_simple_USB_backup___40__for_WAF__41__.mdwn create mode 100644 doc/forum/Prepare_simple_USB_backup___40__for_WAF__41__/comment_1_a02dd00950793814ea9617e0eec738ba._comment create mode 100644 doc/forum/Preserving_Directories_in_Metadata_Views.mdwn create mode 100644 doc/forum/Preserving_Directories_in_Metadata_Views/comment_1_30332d3828324455600b0b452e3b6c5a._comment create mode 100644 doc/forum/Preserving_Directories_in_Metadata_Views/comment_2_0decf76e18bb9fbc9b55e94f647a466d._comment create mode 100644 doc/forum/Preserving_extended_attributes.mdwn create mode 100644 doc/forum/Preserving_file_access_rights_in_directory_tree_below_objects__47__.mdwn create mode 100644 doc/forum/Preserving_file_access_rights_in_directory_tree_below_objects__47__/comment_1_5dd978f9b5a0771f44ab9e086bf5a07f._comment create mode 100644 doc/forum/Preserving_file_access_rights_in_directory_tree_below_objects__47__/comment_2_9f51947b35ee04e473655e20d56c740a._comment create mode 100644 doc/forum/Preserving_the_v5_experience.mdwn create mode 100644 doc/forum/Preserving_the_v5_experience/comment_1_9b188fecb7eaeb3ec3ba47f4c5e17e37._comment create mode 100644 doc/forum/Preserving_the_v5_experience/comment_2_d2da6d56980b535431d7f0360f58d04c._comment create mode 100644 doc/forum/Preserving_the_v5_experience/comment_3_b15c92675cf6a5087ced6a649dd1b6c7._comment create mode 100644 doc/forum/Preserving_times_for_Annexed_files_on_Android___47___Termux_not_permitted.mdwn create mode 100644 doc/forum/Preventing_annex.ignore_for_remote.mdwn create mode 100644 doc/forum/Preventing_annex.ignore_for_remote/comment_1_ec28f3ed75f2abad3d01a90c5b79c4b8._comment create mode 100644 doc/forum/Preventing_annex.ignore_for_remote/comment_2_57703f8d610aae7fadb8980e77a408b0._comment create mode 100644 doc/forum/Previous_versions_in_direct_mode__63__.mdwn create mode 100644 doc/forum/Previous_versions_in_direct_mode__63__/comment_1_352d460acd5500587e679d934180eee4._comment create mode 100644 doc/forum/Problem_compiling_current_master.mdwn create mode 100644 doc/forum/Problem_compiling_current_master/comment_1_135df61ec850c06e3b48ccfef7b5b031._comment create mode 100644 doc/forum/Problem_compiling_current_master/comment_2_fb3e27b6014e84bd919a7a4a95e39ef9._comment create mode 100644 doc/forum/Problem_compiling_current_master/comment_3_b737b3945103c5e2aa798b4e65fbce06._comment create mode 100644 doc/forum/Problem_compiling_current_master/comment_4_28c1b335ae388d4e1f22b711ac1c001f._comment create mode 100644 doc/forum/Problem_with_Anaconda_and_git-annex_on_Windows.mdwn create mode 100644 doc/forum/Problem_with_corrupt_SQLite_DB.mdwn create mode 100644 doc/forum/Problem_with_corrupt_SQLite_DB/comment_1_4e10e6d1882feba8d0c1ad058e01143c._comment create mode 100644 doc/forum/Problem_with_corrupt_SQLite_DB/comment_2_98020b857e5b52ebbbaaeba1313f2697._comment create mode 100644 doc/forum/Problem_with_corrupt_SQLite_DB/comment_3_079359513b6b9fcf0030f49df0eaf64d._comment create mode 100644 doc/forum/Problem_with_corrupt_SQLite_DB/comment_4_6a5f8590e6a60be5afe6bc6ffce1c94e._comment create mode 100644 doc/forum/Problems_syncing_with_box.com.mdwn create mode 100644 doc/forum/Problems_syncing_with_box.com/comment_1_8db642849da4d42cd9a43142e2b7cb70._comment create mode 100644 doc/forum/Problems_syncing_with_box.com/comment_2_cd18f33647aebc04af5469e4ce1fbcd2._comment create mode 100644 doc/forum/Problems_using_blake2_backend.mdwn create mode 100644 doc/forum/Problems_using_blake2_backend/comment_1_f3ffd27a9b515e867041b6cebfeeafad._comment create mode 100644 doc/forum/Problems_using_submodules_with_git-annex__63__.mdwn create mode 100644 doc/forum/Problems_using_submodules_with_git-annex__63__/comment_1_c7a927736d419d3c31c912001ff16ee4._comment create mode 100644 doc/forum/Problems_using_submodules_with_git-annex__63__/comment_2_26f6581b5969eb2cb77495c40de88951._comment create mode 100644 doc/forum/Problems_when_cloning_a_repository.mdwn create mode 100644 doc/forum/Problems_when_cloning_a_repository/comment_1_191c091c384d8d97d24f8a77e8ff90ee._comment create mode 100644 doc/forum/Problems_when_cloning_a_repository/comment_2_74ccbb09677444478074e9eab405fbaf._comment create mode 100644 doc/forum/Problems_when_cloning_a_repository/comment_3_3436e26dd9fe07233a070d4e95d81cdf._comment create mode 100644 doc/forum/Problems_with_Assistant_on_Android.mdwn create mode 100644 doc/forum/Problems_with_FAT_links.mdwn create mode 100644 doc/forum/Problems_with_FAT_links/comment_1_1628c68ef7bdaedb01fcb897a447bb91._comment create mode 100644 doc/forum/Problems_with_FAT_links/comment_2_734850345a66d5df38c468ffaa1182cd._comment create mode 100644 doc/forum/Problems_with_FAT_links/comment_3_2728cd609cb5e792d1dc722d450e4c8d._comment create mode 100644 doc/forum/Problems_with_FAT_links/comment_4_0a5f0239b3b6376672c8d91eaf68a460._comment create mode 100644 doc/forum/Problems_with_FAT_links/comment_5_3c9dd1e2586b27911422066ca71f5298._comment create mode 100644 doc/forum/Problems_with_large_numbers_of_files.mdwn create mode 100644 doc/forum/Problems_with_large_numbers_of_files/comment_1_08791cb78b982087c2a07316fe3ed46c._comment create mode 100644 doc/forum/Problems_with_large_numbers_of_files/comment_2_0392a11219463e40c53bae73c8188b69._comment create mode 100644 doc/forum/Problems_with_large_numbers_of_files/comment_3_537e9884c1488a7a4bcf131ea63b71f7._comment create mode 100644 doc/forum/Problems_with_large_numbers_of_files/comment_4_7cb65d013e72bd2b7e90452079d42ac9._comment create mode 100644 doc/forum/Problems_with_large_numbers_of_files/comment_5_86a42ee3173a5d38f803e64b79496ab3._comment create mode 100644 doc/forum/Problems_with_large_numbers_of_files/comment_6_4551274288383c9cc27cbf85b122d307._comment create mode 100644 doc/forum/Problems_with_large_numbers_of_files/comment_7_d18cf944352f8303799c86f2c0354e8e._comment create mode 100644 doc/forum/Propagate_changes_and_remove_adjusted_branch.mdwn create mode 100644 doc/forum/Propagate_changes_and_remove_adjusted_branch/comment_1_84651b939b10b84df5e685393546732e._comment create mode 100644 doc/forum/Proper_usage_of_git_annex_proxy_to_mimc_undo_--depth.mdwn create mode 100644 doc/forum/Pruning_out_unwanted_Git_objects.mdwn create mode 100644 doc/forum/Pruning_out_unwanted_Git_objects/comment_1_0cf7a12bfa2957260f4b2f79b0cadf2f._comment create mode 100644 doc/forum/Pruning_out_unwanted_Git_objects/comment_2_7472943c02cfe2808b0d566e06caa1a5._comment create mode 100644 doc/forum/Pruning_out_unwanted_Git_objects/comment_3_6a1e7a83d94394454fc085f6d2728cd7._comment create mode 100644 doc/forum/Pull_files_through_cloud.mdwn create mode 100644 doc/forum/Pull_files_through_cloud/comment_1_ae71f9876c8376ba0d0ab424bfb66e72._comment create mode 100644 doc/forum/Pull_files_through_cloud/comment_2_f4dfc4b212e23f7443abfb28b5613f63._comment create mode 100644 doc/forum/Purge_a_remote.mdwn create mode 100644 doc/forum/Purge_a_remote/comment_1_78b3b77f457c65d31fd8a5abf714905d._comment create mode 100644 doc/forum/Purge_a_remote/comment_2_dc65719157dee63b3979563ed57ee0ce._comment create mode 100644 doc/forum/Purge_a_remote/comment_3_63e0280273b816fa4b837724e102f813._comment create mode 100644 doc/forum/Purge_a_remote/comment_4_7fad1c4798ca03a4095ac3241c279f6d._comment create mode 100644 doc/forum/Purge_whereis.mdwn create mode 100644 doc/forum/Purge_whereis/comment_1_89d2446e3c9a58ab7b2a85ff941f7c8d._comment create mode 100644 doc/forum/Purge_whereis/comment_2_0307ce47de9b719adc2096600d94dff6._comment create mode 100644 doc/forum/Purge_whereis/comment_3_e87b53ebbf8053bb17caeb2aed871212._comment create mode 100644 doc/forum/Purge_whereis/comment_4_72b6c28d8a4865ad8c84b1f7dfefb78a._comment create mode 100644 doc/forum/Purge_whereis/comment_5_966e0285639a41ee9db3e9fb337e2699._comment create mode 100644 doc/forum/Push__47__Pull_with_the_Assistant.mdwn create mode 100644 doc/forum/Push__47__Pull_with_the_Assistant/comment_1_f7b63d379c2d21794adf8658f546f8a7._comment create mode 100644 doc/forum/Push__47__Pull_with_the_Assistant/comment_2_aec8cc20576e7ffd5a8be4348d1a0073._comment create mode 100644 doc/forum/Pusher_crashed__44___attempt_to_repair_hangs__44___broken_symlinks.mdwn create mode 100644 doc/forum/Pusher_crashed__44___attempt_to_repair_hangs__44___broken_symlinks/comment_1_c89b64b0dc7c5a760a84a9d2cfd8982c._comment create mode 100644 doc/forum/Pusher_crashed__44___attempt_to_repair_hangs__44___broken_symlinks/comment_2_c511691c4ea6c77e63ef85c28c921be9._comment create mode 100644 doc/forum/Pushing_an_existing_git_annex_repo_to_a_remote_ssh_host.mdwn create mode 100644 doc/forum/Pushing_an_existing_git_annex_repo_to_a_remote_ssh_host/comment_1_4008b735809161d5950b7991d69d3f68._comment create mode 100644 doc/forum/Pushing_git_repo_to_AWS_S3_from_behind_proxy.mdwn create mode 100644 doc/forum/Question__58___git-annex-only_repo___63__.mdwn create mode 100644 doc/forum/Question__58___git-annex-only_repo___63__/comment_10_ada27f7b8c7dc3c388e6c56ef095e682._comment create mode 100644 doc/forum/Question__58___git-annex-only_repo___63__/comment_11_531e6a091c8d005626e4e8290ba317d7._comment create mode 100644 doc/forum/Question__58___git-annex-only_repo___63__/comment_1_321632cc794c00181932f5737db9aff0._comment create mode 100644 doc/forum/Question__58___git-annex-only_repo___63__/comment_2_941b62a63c11caa1ada5d544c2e926ca._comment create mode 100644 doc/forum/Question__58___git-annex-only_repo___63__/comment_3_0c0dad1ffa11f2f8708906d310a189db._comment create mode 100644 doc/forum/Question__58___git-annex-only_repo___63__/comment_4_426160c2237db790b133b9c9f0abd4b2._comment create mode 100644 doc/forum/Question__58___git-annex-only_repo___63__/comment_5_36bd0a398b385e65df7eda26fa5c50d0._comment create mode 100644 doc/forum/Question__58___git-annex-only_repo___63__/comment_6_32fb6930bcaac36d00b088d8ee09face._comment create mode 100644 doc/forum/Question__58___git-annex-only_repo___63__/comment_7_8278ee493da14aac86e928d2349d8173._comment create mode 100644 doc/forum/Question__58___git-annex-only_repo___63__/comment_8_3e24c9f9042d6abdafaae45015645b11._comment create mode 100644 doc/forum/Question__58___git-annex-only_repo___63__/comment_9_182c66e98086dbfde29b615d0cf0e8e4._comment create mode 100644 doc/forum/Questions_about_borg_special_remotes.mdwn create mode 100644 doc/forum/Questions_about_borg_special_remotes/comment_1_bbeb30671d707f2a1d7ac0dbf342136e._comment create mode 100644 doc/forum/Questions_about_borg_special_remotes/comment_2_5c10ff05b8e1714aa9b413d6b01e275e._comment create mode 100644 doc/forum/Reappearing_repos_in_webapp_and_vicfg.mdwn create mode 100644 doc/forum/Reappearing_repos_in_webapp_and_vicfg/comment_1_bd977e864ae89816fa7f4ff69879b15f._comment create mode 100644 doc/forum/Reappearing_repos_in_webapp_and_vicfg/comment_2_05749f9e75689d0111339b7126c12300._comment create mode 100644 doc/forum/Reappearing_repos_in_webapp_and_vicfg/comment_3_b1531994eea0fbbf4cb097e604378a53._comment create mode 100644 doc/forum/Reappearing_repos_in_webapp_and_vicfg/comment_4_f1eba3e8aa4116e3c20747ec1d6e24e5._comment create mode 100644 doc/forum/Rebuild__47__populate_archive_bypassing___34__here__34___repo.mdwn create mode 100644 doc/forum/Rebuild__47__populate_archive_bypassing___34__here__34___repo/comment_1_901272a6f738bfe8a0289c4900fd0c20._comment create mode 100644 doc/forum/Rebuild__47__populate_archive_bypassing___34__here__34___repo/comment_2_aec1d16cb47b59dd4f2811b2956e5fdf._comment create mode 100644 doc/forum/Rebuild__47__populate_archive_bypassing___34__here__34___repo/comment_3_652d9957ead7dbf4feb3ba096137d22b._comment create mode 100644 doc/forum/Rebuild_a_set_of_repos_from_checked-out_trees_and_.git__47__annex__47__objects__63__.mdwn create mode 100644 doc/forum/Rebuild_a_set_of_repos_from_checked-out_trees_and_.git__47__annex__47__objects__63__/comment_1_456772b5b0deb0c121d7feb5dcf41979._comment create mode 100644 doc/forum/Rebuild_a_set_of_repos_from_checked-out_trees_and_.git__47__annex__47__objects__63__/comment_2_410f329fb47f13afc59b5b37b88a8c3a._comment create mode 100644 doc/forum/RecentChanges__58___link_to_the_diff__63__.mdwn create mode 100644 doc/forum/RecentChanges__58___link_to_the_diff__63__/comment_1_85254a327ffed22b407d25610558c15b._comment create mode 100644 doc/forum/Recomended_Setup_for_Syncthing_Remote.mdwn create mode 100644 doc/forum/Recommended_number_of_repositories.mdwn create mode 100644 doc/forum/Recommended_number_of_repositories/comment_1_3ef256230756be8a9679b107cdbfd018._comment create mode 100644 doc/forum/Recommended_way_to_work_with_semi-permanent_filename_changes.mdwn create mode 100644 doc/forum/Recommended_way_to_work_with_semi-permanent_filename_changes/comment_1_ec1c86e41ce3ee243df9a5008db87070._comment create mode 100644 doc/forum/Recommended_way_to_work_with_semi-permanent_filename_changes/comment_2_47b248b36146c5ad9986b69c8d212b4e._comment create mode 100644 doc/forum/Recommended_way_to_work_with_semi-permanent_filename_changes/comment_3_47951337fa2155b797b40fe19446ef51._comment create mode 100644 doc/forum/Recommended_way_to_work_with_semi-permanent_filename_changes/comment_4_12ae880e559bde5f75cb0c451b56b322._comment create mode 100644 doc/forum/Recover_files__44___annex_stuck.mdwn create mode 100644 doc/forum/Recover_files__44___annex_stuck/comment_10_6d85c3ec73ddc0682d9643f4d5eeda70._comment create mode 100644 doc/forum/Recover_files__44___annex_stuck/comment_11_52e799bb6f24a1ebed58fad6cebd3a71._comment create mode 100644 doc/forum/Recover_files__44___annex_stuck/comment_12_686a285bc7e950aae67856c47e7cb21e._comment create mode 100644 doc/forum/Recover_files__44___annex_stuck/comment_13_a4d62d494b340458e6535d573bade965._comment create mode 100644 doc/forum/Recover_files__44___annex_stuck/comment_14_c10f0fe1440ccd170804a433db2267ee._comment create mode 100644 doc/forum/Recover_files__44___annex_stuck/comment_15_14446cafac6c33a3f95b5344c42c0bef._comment create mode 100644 doc/forum/Recover_files__44___annex_stuck/comment_16_63c19f58b7e95e39ba25a735bdcc0bcf._comment create mode 100644 doc/forum/Recover_files__44___annex_stuck/comment_17_8e5c7572ab8d1f0e41fedf6f805b942a._comment create mode 100644 doc/forum/Recover_files__44___annex_stuck/comment_18_e5357c63107f79571bd3ff609b4406a7._comment create mode 100644 doc/forum/Recover_files__44___annex_stuck/comment_19_3316652073710f39965cd49ceea5c4ff._comment create mode 100644 doc/forum/Recover_files__44___annex_stuck/comment_1_d605f755c363d56cf5f1060ad06ee173._comment create mode 100644 doc/forum/Recover_files__44___annex_stuck/comment_2_f3ee184a4d3b8d82a8a362a6c03a54a3._comment create mode 100644 doc/forum/Recover_files__44___annex_stuck/comment_3_341b47663d133411587ec70ef2b178c6._comment create mode 100644 doc/forum/Recover_files__44___annex_stuck/comment_4_66c0d9284d5edbac189a64b03c4fe50a._comment create mode 100644 doc/forum/Recover_files__44___annex_stuck/comment_5_8b32f6597f447f88bee7a80698fb4df6._comment create mode 100644 doc/forum/Recover_files__44___annex_stuck/comment_6_4cc81169e99a453cdb6e83e57e638f37._comment create mode 100644 doc/forum/Recover_files__44___annex_stuck/comment_7_2d104cf4682e04906f8ca0ced7288cf1._comment create mode 100644 doc/forum/Recover_files__44___annex_stuck/comment_8_d356c4fce9f1197e5292f9dedf85bbc9._comment create mode 100644 doc/forum/Recover_files__44___annex_stuck/comment_9_856c7e1575f5d99530ecd54004315487._comment create mode 100644 doc/forum/Recover_repository_from_bup_repository.mdwn create mode 100644 doc/forum/Recover_repository_from_bup_repository/comment_1_6e3b1ff58fbdc10bcaca6d660eb1156f._comment create mode 100644 doc/forum/Recovering_data_from_rsync_special_remote_after_git-annex-forget.mdwn create mode 100644 doc/forum/Recovering_data_from_rsync_special_remote_after_git-annex-forget/comment_1_265563f95a8ec5918314afc7e6226b56._comment create mode 100644 doc/forum/Recovering_data_from_rsync_special_remote_after_git-annex-forget/comment_2_4da1d3f6a37b8772838bae762d4c43be._comment create mode 100644 doc/forum/Recovering_data_from_rsync_special_remote_after_git-annex-forget/comment_3_5aff48172bb767ed03e96812e4f89f38._comment create mode 100644 doc/forum/Recovering_deleted_file_in_direct_mode.mdwn create mode 100644 doc/forum/Recovering_deleted_file_in_direct_mode/comment_1_a3e6fc93669ec76656c84793d1f59149._comment create mode 100644 doc/forum/Recovering_deleted_file_in_direct_mode/comment_2_98c01a756c5f2dda28cffa5dd1dea385._comment create mode 100644 doc/forum/Recovering_from_a_cross-merge.mdwn create mode 100644 doc/forum/Recovery_after_freeze_while_importing_files.mdwn create mode 100644 doc/forum/Recovery_after_freeze_while_importing_files/comment_1_d033b77b9417468e13076ff9302f2963._comment create mode 100644 doc/forum/Recovery_after_freeze_while_importing_files/comment_2_e14f330de3e9ebfa9a99c32e65d59d11._comment create mode 100644 doc/forum/Reduce_disk_space_by_dropping_older_versions_in_local_git_annex.mdwn create mode 100644 doc/forum/Reduce_disk_space_by_dropping_older_versions_in_local_git_annex/comment_1_2a84bf661e0cbd5c8a558d3dbf5aef65._comment create mode 100644 doc/forum/Reinject_does_not_have_expected_content_of_file.mdwn create mode 100644 doc/forum/Reloading_.git__47__config_mid-sync.mdwn create mode 100644 doc/forum/Reloading_.git__47__config_mid-sync/comment_1_69e8879e0fed0e1b1589a721f9c6e3c7._comment create mode 100644 doc/forum/Relocating_annex_directory.mdwn create mode 100644 doc/forum/Relocating_annex_directory/comment_1_13ff5438baa1db110beb6aab3a783def._comment create mode 100644 doc/forum/Relocating_annex_directory/comment_2_6d88ff03fcf00ae872442e8a86c968ed._comment create mode 100644 doc/forum/Remote__39__s_git-annex-shell_not_detected.mdwn create mode 100644 doc/forum/Remote__39__s_git-annex-shell_not_detected/comment_1_8354782cf0fab248e607c7eae59d6bb2._comment create mode 100644 doc/forum/Remote__39__s_git-annex-shell_not_detected/comment_2_35e5d9b427963fc7b9618eb522bd1273._comment create mode 100644 doc/forum/Remote__39__s_git-annex-shell_not_detected/comment_2_7fb6168197c3f16de9775a60b7941cde._comment create mode 100644 doc/forum/Remote_in_webapp_shows_syncing_disabled_but_is_enabled___40__maybe__41__.mdwn create mode 100644 doc/forum/Remote_in_webapp_shows_syncing_disabled_but_is_enabled___40__maybe__41__/comment_1_04144280b69a7ba0cfa4fa3e1b5ef4ec._comment create mode 100644 doc/forum/Remote_in_webapp_shows_syncing_disabled_but_is_enabled___40__maybe__41__/comment_2_2c0340e5eac6d712045614886a8403a5._comment create mode 100644 doc/forum/Remote_in_webapp_shows_syncing_disabled_but_is_enabled___40__maybe__41__/comment_3_2b1ac09cb8b5f5ec62a201785c2f6531._comment create mode 100644 doc/forum/Remote_in_webapp_shows_syncing_disabled_but_is_enabled___40__maybe__41__/comment_4_a8e68a41e069803d89f18d1645876298._comment create mode 100644 doc/forum/Remote_listed_in_whereis_but_not_in_info.mdwn create mode 100644 doc/forum/Remote_listed_in_whereis_but_not_in_info/comment_1_85cc355213f894e8c1aeece432de67c3._comment create mode 100644 doc/forum/Remote_listed_in_whereis_but_not_in_info/comment_2_ddede3236f1d91ac4f0117b76267a021._comment create mode 100644 doc/forum/Remote_listed_in_whereis_but_not_in_info/comment_3_607d5b01eb95906391337f7351e0193c._comment create mode 100644 doc/forum/Remote_server_only_for_the_git_repository.mdwn create mode 100644 doc/forum/Remote_server_only_for_the_git_repository/comment_1_d4d8d8cfebf9a98ca8878c5684d5bb50._comment create mode 100644 doc/forum/Remote_server_only_for_the_git_repository/comment_2_a62dec8ab98ac7bd65059a9e425a01e2._comment create mode 100644 doc/forum/Remote_type_to_make_portable_HDD_like_normal_but_indexed.mdwn create mode 100644 doc/forum/Remote_type_to_make_portable_HDD_like_normal_but_indexed/comment_1_7caf32756f799b67b0c0588ea5e17a20._comment create mode 100644 doc/forum/Remote_type_to_make_portable_HDD_like_normal_but_indexed/comment_2_36c202f5883b66a431ae5e72c5ecede1._comment create mode 100644 doc/forum/Remove_unused_content_from_S3_special_remote.mdwn create mode 100644 doc/forum/Remove_unused_content_from_S3_special_remote/comment_1_acfd4eab2cd80d722479dbb410ccfe2e._comment create mode 100644 doc/forum/Remove_unused_content_from_S3_special_remote/comment_2_adc602d325b8639ac5bfed088c504e1e._comment create mode 100644 doc/forum/Remove_variants_from_all_repositories___40__and_possibly_restore_the_original_naming__41__.mdwn create mode 100644 doc/forum/Remove_variants_from_all_repositories___40__and_possibly_restore_the_original_naming__41__/comment_1_dfc64d8618e07177bb196d9af4474698._comment create mode 100644 doc/forum/Removing_files_not_found_by_git_annex_unused.mdwn create mode 100644 doc/forum/Removing_files_not_found_by_git_annex_unused/comment_1_420c6230e68de0a0ac7d7da91ac60801._comment create mode 100644 doc/forum/Removing_git-annex_repo/comment_1_58fcceb96647a8c7f33d188ae908f3bd._comment create mode 100644 doc/forum/Rename_local_repository_for_git-annex-info.mdwn create mode 100644 doc/forum/Rename_local_repository_for_git-annex-info/comment_1_6df9b666f7d948b9e03b2ecf9858f6c5._comment create mode 100644 doc/forum/Rename_local_repository_for_git-annex-info/comment_2_a13ef241d6d24b4abee3eedff18032a8._comment create mode 100644 doc/forum/Rename_local_repository_for_git-annex-info/comment_3_c75652b23bc4554d43593d1984c9c5d9._comment create mode 100644 doc/forum/Rename_local_repository_for_git-annex-info/comment_4_695a821eee66f8c4d4e22518edd15c40._comment create mode 100644 doc/forum/Repair_in_steps__63__.mdwn create mode 100644 doc/forum/Repair_in_steps__63__/comment_1_6a512ab2d6ea583a1913c9837e953760._comment create mode 100644 doc/forum/Replace_glacier-cli__63__.mdwn create mode 100644 doc/forum/Replace_glacier-cli__63__/comment_1_318cd0ca9f4e997161ed22fffa5d5da3._comment create mode 100644 doc/forum/Replace_glacier-cli__63__/comment_2_c91e393951825cdcceac845e234d7497._comment create mode 100644 doc/forum/Replace_glacier-cli__63__/comment_3_405aad8dd28ea035226f7fda470fde33._comment create mode 100644 doc/forum/Replace_glacier-cli__63__/comment_4_a863eb91006df199fcdbc98f42b2d40b._comment create mode 100644 doc/forum/Replace_glacier-cli__63__/comment_5_fda6c754437385afa0851e680bf17cf0._comment create mode 100644 doc/forum/Replace_glacier-cli__63__/comment_6_2e7b5b6cc7c2e33be36c3c510adec01c._comment create mode 100644 doc/forum/Replacing_a_special_remote_by_another_one.mdwn create mode 100644 doc/forum/RepoFS__58___File_system_view_of_Git_repositories.mdwn create mode 100644 doc/forum/Repo_accessible_from___34__dumb__34___client_without_git-annex.mdwn create mode 100644 doc/forum/Repo_accessible_from___34__dumb__34___client_without_git-annex/comment_1_077c492fd37d335f74a5c886ff0d524f._comment create mode 100644 doc/forum/Repo_accessible_from___34__dumb__34___client_without_git-annex/comment_2_00e6576e3e60d2650461eeb0f918e6e5._comment create mode 100644 doc/forum/Repo_accessible_from___34__dumb__34___client_without_git-annex/comment_3_c36a9562c53ac683b62fc4471405aa2a._comment create mode 100644 doc/forum/Repository_backup.mdwn create mode 100644 doc/forum/Repository_backup/comment_1_4d3197a1fefeb744e8b1e1b5fcf9b104._comment create mode 100644 doc/forum/Repository_backup/comment_2_e362221ef3d13bd417b2b6b0c51738a8._comment create mode 100644 doc/forum/Repository_backup/comment_3_ead30baf0a6d718569feb4002ba19b9e._comment create mode 100644 doc/forum/Repository_backup/comment_4_6f20653dff70aaaea4460a5efb28081f._comment create mode 100644 doc/forum/Repository_backup/comment_5_287510b4e8b9043fe361b7c5dc1f4e9f._comment create mode 100644 doc/forum/Repository_operations_stuck_suddenly.mdwn create mode 100644 doc/forum/Repository_operations_stuck_suddenly/comment_1_b0fa5b0e1b507e9a99e62849b1d66b7e._comment create mode 100644 doc/forum/Repository_operations_stuck_suddenly/comment_2_ff76dc687c2f632b39240d5e242d41f4._comment create mode 100644 doc/forum/Require_a_local_copy_of_all_new_files_without_explicitly_calling___34__get__34___or___34__sync__34__.mdwn create mode 100644 doc/forum/Require_a_local_copy_of_all_new_files_without_explicitly_calling___34__get__34___or___34__sync__34__/comment_1_8adf9c6d2a3ef29120703bfa1b8f9ae2._comment create mode 100644 doc/forum/Required_Content_Always_True___40____61____62___cannot_drop__41__.mdwn create mode 100644 doc/forum/Required_Content_Always_True___40____61____62___cannot_drop__41__/comment_1_1db8c68e8d82ed169b4687dfb5da1ba6._comment create mode 100644 doc/forum/Required_Content_Always_True___40____61____62___cannot_drop__41__/comment_2_ea362bb99294571f0b0e808e87b7d422._comment create mode 100644 doc/forum/Restoring_files__63__.mdwn create mode 100644 doc/forum/Restoring_files__63__/comment_1_735b98419b3ba6207cc364426b03ce74._comment create mode 100644 doc/forum/Restricting_SSH_+_supply_key.mdwn create mode 100644 doc/forum/Restricting_SSH_+_supply_key/comment_10_8bbd0b6488c23ce8b182bd6b1765c94b._comment create mode 100644 doc/forum/Restricting_SSH_+_supply_key/comment_11_3b946519c9f52569ce60ac04bdc3380a._comment create mode 100644 doc/forum/Restricting_SSH_+_supply_key/comment_1_cac35ac1ac0b300ddfac5ffc74291bce._comment create mode 100644 doc/forum/Restricting_SSH_+_supply_key/comment_2_e9803dd1794b4d078efa9435ff5ba295._comment create mode 100644 doc/forum/Restricting_SSH_+_supply_key/comment_3_1c3beb859e76cb69d2bacd2473ec72b7._comment create mode 100644 doc/forum/Restricting_SSH_+_supply_key/comment_4_1c541fc9a44e5cfb13c7d3ef0eeba2c7._comment create mode 100644 doc/forum/Restricting_SSH_+_supply_key/comment_5_4dbd5605f2638de0a3edfb3886a47938._comment create mode 100644 doc/forum/Restricting_SSH_+_supply_key/comment_6_a9c5b424a6acb2da152bf87b2e7617bb._comment create mode 100644 doc/forum/Restricting_SSH_+_supply_key/comment_7_93b7c2a5947fb6904c88cd5c120e404c._comment create mode 100644 doc/forum/Restricting_SSH_+_supply_key/comment_8_beaa350751eca4642545d1b83e528dd7._comment create mode 100644 doc/forum/Restricting_SSH_+_supply_key/comment_9_2faceeaf0d39f82e5d624eae19e4ca53._comment create mode 100644 doc/forum/Restricting_git-annex-shell_to_a_specific_repository.mdwn create mode 100644 doc/forum/Restricting_git-annex-shell_to_a_specific_repository/comment_1_66544520bff71181e4a03ca583b0b458._comment create mode 100644 doc/forum/Restricting_git-annex-shell_to_a_specific_repository/comment_2_2a210255e8535712c71fa183e56ab600._comment create mode 100644 doc/forum/Restricting_git-annex-shell_to_a_specific_repository/comment_3_52cd4bd9694b2100b0e0dd2eafa9e828._comment create mode 100644 doc/forum/Restricting_git-annex-shell_to_a_specific_repository/comment_4_4712a74774f60c29704d1e0f598caa78._comment create mode 100644 doc/forum/Restricting_git-annex-shell_to_a_specific_repository/comment_5_27aa66428410cb8e77fcebccd2c6d1f4._comment create mode 100644 doc/forum/Restricting_git-annex-shell_to_a_specific_repository/comment_6_b3a0db1c2f11770b7c6f13964f2d1784._comment create mode 100644 doc/forum/Retrieve_previous_version_in_direct_mode.mdwn create mode 100644 doc/forum/Retrieve_previous_version_in_direct_mode/comment_1_ca3a999ed64c42b8df810115de205d2f._comment create mode 100644 doc/forum/Retrieve_previous_version_in_direct_mode/comment_2_1292b34ff6d9976b2bd08748e1ba4e7a._comment create mode 100644 doc/forum/Retrieve_previous_version_in_direct_mode/comment_3_699e816c0397f6db924feeab906f1151._comment create mode 100644 doc/forum/Retrieve_previous_version_in_direct_mode/comment_4_d900388753de5870b7b9c0e8b8c06ed7._comment create mode 100644 doc/forum/Retrieve_previous_version_in_direct_mode/comment_5_1360b936aa389a0ab5e5e453824b2ece._comment create mode 100644 doc/forum/Reusing_existing_annex.uuid.mdwn create mode 100644 doc/forum/Reusing_existing_annex.uuid/comment_1_dc3d6efbf5c076bedd0c7a75ff5314bc._comment create mode 100644 doc/forum/Reusing_existing_annex.uuid/comment_2_cdb21c9c47c8a116e82062c9354d9339._comment create mode 100644 doc/forum/Reusing_existing_annex.uuid/comment_3_5544f712897e06024342aa1bdd68df1a._comment create mode 100644 doc/forum/Reverse_index_key_to_list_of_file_paths.mdwn create mode 100644 doc/forum/Reverse_index_key_to_list_of_file_paths/comment_1_acae766349a036040a03e75fa8ed34c6._comment create mode 100644 doc/forum/Reverse_index_key_to_list_of_file_paths/comment_2_716efb07d216d9a063bb9498c8e76ea1._comment create mode 100644 doc/forum/Reverse_index_key_to_list_of_file_paths/comment_3_6b75bd75623004f05f609a39e95250ab._comment create mode 100644 doc/forum/Reverse_index_key_to_list_of_file_paths/comment_4_e54268d93837b3b8e216ec6af074f3c6._comment create mode 100644 doc/forum/Reverse_index_key_to_list_of_file_paths/comment_5_022728be6cd3ac168a74d16baf29c0e1._comment create mode 100644 doc/forum/Revert_file_linkage_to_original_files.mdwn create mode 100644 doc/forum/Revert_file_linkage_to_original_files/comment_1_898ca2c9976e92d22470c7404aa9813f._comment create mode 100644 doc/forum/Revert_to_a_precedent_state_in_direct_mode.mdwn create mode 100644 doc/forum/Revert_to_a_precedent_state_in_direct_mode/comment_1_1ae9f7defbab44621c3108973a4f683a._comment create mode 100644 doc/forum/Revert_to_a_precedent_state_in_direct_mode/comment_2_0bcfc0e89de7072bfdf1e3cdeaa16a1b._comment create mode 100644 doc/forum/Revert_to_a_precedent_state_in_direct_mode/comment_3_e49a37f92a3dd7d386e1e5f37ab37df4._comment create mode 100644 doc/forum/Revisiting_migration_and_multiple_keys.mdwn create mode 100644 doc/forum/Revisiting_migration_and_multiple_keys/comment_1_a85c3c7af6b1e01f887e0e1ffe2cde6f._comment create mode 100644 doc/forum/Revisiting_migration_and_multiple_keys/comment_2_b5545aba08c7af2f8f56caba66232c41._comment create mode 100644 doc/forum/Revisiting_migration_and_multiple_keys/comment_3_a712ec9b616ca45976154fd0c98ae1c4._comment create mode 100644 doc/forum/Revisiting_migration_and_multiple_keys/comment_4_7d367f38250a4a3454299170700d5c6c._comment create mode 100644 doc/forum/Revisiting_migration_and_multiple_keys/comment_5_93b85fbe5c36e986cf7c1fc87070c04c._comment create mode 100644 doc/forum/Revisiting_migration_and_multiple_keys/comment_6_3db8d28e13f6508e22e8488a6faaa8b2._comment create mode 100644 doc/forum/Robustness_on_failing_hardware.mdwn create mode 100644 doc/forum/Robustness_on_failing_hardware/comment_1_d89ffbebe59d05fb2c47d957792cf97e._comment create mode 100644 doc/forum/Running_assistant_on_a_server___40__no_X_available__41__.mdwn create mode 100644 doc/forum/Running_assistant_on_a_server___40__no_X_available__41__/comment_1_dd75d78ef63f2689199a302ed1846017._comment create mode 100644 doc/forum/Running_assistant_on_a_server___40__no_X_available__41__/comment_2_df654df60c5fa6a84d786d248928a352._comment create mode 100644 doc/forum/Running_assistant_steps_manually.mdwn create mode 100644 doc/forum/Running_assistant_steps_manually/comment_1_e14e0a1d55d01cb4f67a94bbe349b872._comment create mode 100644 doc/forum/Running_assistant_steps_manually/comment_2_3192f614c929b8060d4fbde56a7adec1._comment create mode 100644 doc/forum/Running_out_of__inodes.mdwn create mode 100644 doc/forum/Running_out_of__inodes/comment_1_abc73d9ad662ef642337b683bf0a0253._comment create mode 100644 doc/forum/Running_out_of__inodes/comment_2_30d58cb046b13d6ddd435ad0ae2f0ae1._comment create mode 100644 doc/forum/Running_out_of__inodes/comment_3_31926fc5c095a1d12d4005958047a3d0._comment create mode 100644 doc/forum/S3_Host_Question.mdwn create mode 100644 doc/forum/S3_Host_Question/comment_1_8c8ecea703405753e47e0da5e8325929._comment create mode 100644 doc/forum/S3_Host_Question/comment_2_3d6fa3147d59a5e0d10b005388b23c7a._comment create mode 100644 doc/forum/S3_Host_Question/comment_3_797edf3ad41561ab8960f3b28d20611e._comment create mode 100644 doc/forum/S3_copies__58___unsafe_to_drop_from_another_repo__63__.mdwn create mode 100644 doc/forum/S3_copies__58___unsafe_to_drop_from_another_repo__63__/comment_1_536a526a78a775142ad66c0689411c6a._comment create mode 100644 doc/forum/S3_copies__58___unsafe_to_drop_from_another_repo__63__/comment_2_48d27b557d31f25fc4b2fc7e4ef55df3._comment create mode 100644 doc/forum/S3_remote_not_available.mdwn create mode 100644 doc/forum/S3_remote_not_available/comment_1_0caf92239fb1475cf03de45f0d25291d._comment create mode 100644 doc/forum/S3_remote_not_available/comment_2_5895bd050237d08314e3595d93455830._comment create mode 100644 doc/forum/S3_remote_not_available/comment_3_b685f1d172cca4c488a517024c86ba21._comment create mode 100644 doc/forum/S3_remote_not_available/comment_4_ff5ce14bd27b32fc1707426f8c2a5487._comment create mode 100644 doc/forum/SSH_remote_transfers_queued_but_no_movement.mdwn create mode 100644 doc/forum/SSH_remote_transfers_queued_but_no_movement/comment_1_fea4e2317f850d6166480cddba088ae5._comment create mode 100644 doc/forum/Same_Jabber_account_for_different_annexes.mdwn create mode 100644 doc/forum/Same_Jabber_account_for_different_annexes/comment_1_90c3954fe11980eef42b5f5d34f83488._comment create mode 100644 doc/forum/Same_Jabber_account_for_different_annexes/comment_2_802600b3568e5f94d0550092b22975db._comment create mode 100644 doc/forum/Same_file_sent_to_a_webdav_remote_in_transfer_group_multiple_time_during_syncing.mdwn create mode 100644 doc/forum/Same_files_are_synced_over_and_over_again.mdwn create mode 100644 doc/forum/Same_files_are_synced_over_and_over_again/comment_1_1260b5ede5a88a95e98855363455ca41._comment create mode 100644 doc/forum/Searching_metadata_and_file_content__63__.mdwn create mode 100644 doc/forum/Searching_metadata_and_file_content__63__/comment_1_25ac180194a59b659e0b02bb95dd26aa._comment create mode 100644 doc/forum/Searching_metadata_and_file_content__63__/comment_2_5dd29566dacb5ca70340d54b469c40a5._comment create mode 100644 doc/forum/Searching_metadata_and_file_content__63__/comment_3_67715b73349dc92e9746b234024057ef._comment create mode 100644 doc/forum/Searching_metadata_and_file_content__63__/comment_4_b8fbd129664c9680cd77f89185974741._comment create mode 100644 doc/forum/Securing_a_shared_ssh_server.mdwn create mode 100644 doc/forum/Securing_a_shared_ssh_server/comment_1_ea971b57d94db5b8d487f728faa5e9a8._comment create mode 100644 doc/forum/Securing_a_shared_ssh_server/comment_2_421a19f6e1fb40db6ee205daf8e3f867._comment create mode 100644 doc/forum/Securing_a_shared_ssh_server/comment_3_acdbf92f646dbbf691621f08b3d94c26._comment create mode 100644 doc/forum/Securing_a_shared_ssh_server/comment_4_67533d08e1b8706b844262e9c483d982._comment create mode 100644 doc/forum/Securing_a_shared_ssh_server/comment_5_bf193e02b388b4358632a169d2425b5c._comment create mode 100644 doc/forum/Securing_a_shared_ssh_server/comment_6_50d391992cd444080ebc70db30b215c5._comment create mode 100644 doc/forum/Sending_requests_across_the_network.mdwn create mode 100644 doc/forum/Sending_requests_across_the_network/comment_1_8ff713d4c968705061bf2044ea0fe5a0._comment create mode 100644 doc/forum/Sending_requests_across_the_network/comment_2_cb29e5346a8775d87d30b18b7fc005a7._comment create mode 100644 doc/forum/Sending_requests_across_the_network/comment_3_9859c46db3527ad329c8e0df06edd153._comment create mode 100644 doc/forum/Sending_requests_across_the_network/comment_4_b228914d2a3d7838ebc8f1cae4d8b59a._comment create mode 100644 doc/forum/Sending_requests_across_the_network/comment_5_3dba5baa95b43f542fe3737397b8c7a8._comment create mode 100644 doc/forum/Sending_requests_across_the_network/comment_6_6ef44abc1c279abf315b949d2f947fa4._comment create mode 100644 doc/forum/Setting_required_to___34__groupwanted__34___doesn__39__t_work__44___but_copying_the_groupwanted_expression_does..mdwn create mode 100644 doc/forum/Setup_of_rsync_special_remote_with_non-standard_ssh_port.mdwn create mode 100644 doc/forum/Setup_of_rsync_special_remote_with_non-standard_ssh_port/comment_1_1eb6990e93ec92cb6fd7dbee59f31072._comment create mode 100644 doc/forum/Setup_of_rsync_special_remote_with_non-standard_ssh_port/comment_2_c85d5167e7ccce1ecf1de396e72ce7bc._comment create mode 100644 doc/forum/Several_concurrent_operations.mdwn create mode 100644 doc/forum/Several_concurrent_operations/comment_1_885edabc67687e727ab1a111d7d10d1f._comment create mode 100644 doc/forum/Several_concurrent_operations/comment_2_581e53306e47ddb826c030333f9ae9c2._comment create mode 100644 doc/forum/Several_concurrent_operations/comment_3_fe49537fa9e0a284705543b010e7aea9._comment create mode 100644 doc/forum/Several_lines_for_one_remote_in_remote.log.mdwn create mode 100644 doc/forum/Several_lines_for_one_remote_in_remote.log/comment_1_fdfb0099924f19fcbf334498d31f1656._comment create mode 100644 doc/forum/Several_lines_for_one_remote_in_remote.log/comment_2_f45a9c92de2d0271e6a427810794b0e4._comment create mode 100644 doc/forum/Share_only_certain_files_of_a_repo___40__Assistant__41__.mdwn create mode 100644 doc/forum/Share_only_certain_files_of_a_repo___40__Assistant__41__/comment_1_ec0d56cb31b918023a9184cee168b406._comment create mode 100644 doc/forum/Share_with_friend_copies_only_sym_links.mdwn create mode 100644 doc/forum/Share_with_friend_copies_only_sym_links/comment_1_a8d22dfefb219f0c9130cc294364b198._comment create mode 100644 doc/forum/Shared_Encryption_does_not_Work_as_Expected.mdwn create mode 100644 doc/forum/Shared_Encryption_does_not_Work_as_Expected/comment_1_793c71a1efcf160e1829bec3ef0b1be6._comment create mode 100644 doc/forum/Shared_Encryption_does_not_Work_as_Expected/comment_2_6b603265a2fc78bd2df54102bf94234f._comment create mode 100644 doc/forum/Shared_directory_with_non_git-annex_users.mdwn create mode 100644 doc/forum/Shared_directory_with_non_git-annex_users/comment_1_a56cb4993982e030eb9fd4cdb3b0c368._comment create mode 100644 doc/forum/Shared_pubkeys__58___decrypting_files_in_special_remotes_without_git-annex.mdwn create mode 100644 doc/forum/Shared_pubkeys__58___decrypting_files_in_special_remotes_without_git-annex/comment_10_d214446e2b5a95a6e14b288457e53305._comment create mode 100644 doc/forum/Shared_pubkeys__58___decrypting_files_in_special_remotes_without_git-annex/comment_11_d7cf8754a3e923d3f90be44ebd224d18._comment create mode 100644 doc/forum/Shared_pubkeys__58___decrypting_files_in_special_remotes_without_git-annex/comment_1_cf81a5c0d055875a858dd1e6a137b53c._comment create mode 100644 doc/forum/Shared_pubkeys__58___decrypting_files_in_special_remotes_without_git-annex/comment_2_82be119d86818f63da519fa1669d8cdd._comment create mode 100644 doc/forum/Shared_pubkeys__58___decrypting_files_in_special_remotes_without_git-annex/comment_3_9852ed3def9f7c73924d8be88b8581e5._comment create mode 100644 doc/forum/Shared_pubkeys__58___decrypting_files_in_special_remotes_without_git-annex/comment_4_cd56ee6915acb9389876b7a4b7c0e728._comment create mode 100644 doc/forum/Shared_pubkeys__58___decrypting_files_in_special_remotes_without_git-annex/comment_5_feda43ef61bc7676c3fd8c9308605650._comment create mode 100644 doc/forum/Shared_pubkeys__58___decrypting_files_in_special_remotes_without_git-annex/comment_6_da33ab62284728f832257014c351f151._comment create mode 100644 doc/forum/Shared_pubkeys__58___decrypting_files_in_special_remotes_without_git-annex/comment_7_eb448e997e4dc77c845bc4a9462ee128._comment create mode 100644 doc/forum/Shared_pubkeys__58___decrypting_files_in_special_remotes_without_git-annex/comment_8_7001fb7530f2ee1591b400195f702cd9._comment create mode 100644 doc/forum/Shared_pubkeys__58___decrypting_files_in_special_remotes_without_git-annex/comment_9_a27a661e8b589cffb4acad3591586433._comment create mode 100644 doc/forum/Shared_repository_without_git-annex_on_central_server.mdwn create mode 100644 doc/forum/Shared_repository_without_git-annex_on_central_server/comment_1_286c963b30eee46b261d64937cf66d06._comment create mode 100644 doc/forum/Shared_repository_without_git-annex_on_central_server/comment_2_d1f803b68c3789854e483da1318d043d._comment create mode 100644 doc/forum/Sharing_annex_with_local_clones.mdwn create mode 100644 doc/forum/Sharing_annex_with_local_clones/comment_1_2b60e13e5f7b8cee56cf2ddc6c47f64d._comment create mode 100644 doc/forum/Sharing_annex_with_local_clones/comment_2_24ff2c1eb643077daa37c01644cebcd2._comment create mode 100644 doc/forum/Sharing_annex_with_local_clones/comment_3_5359b8eada24d27be83214ac0ae62f23._comment create mode 100644 doc/forum/Sharing_annex_with_local_clones/comment_4_5c870c49d8093e1a2895224cc6e91ca0._comment create mode 100644 doc/forum/Sharing_annex_with_local_clones/comment_5_0bf4c0aa3258b156a3df794d5fabb6a2._comment create mode 100644 doc/forum/Sharing_annex_with_local_clones/comment_6_d2ebe3cc20ec8b7c778c7b22aa62896c._comment create mode 100644 doc/forum/Sharing_over_SMB__47__NFS_while_running_assistant__63__.mdwn create mode 100644 doc/forum/Should_transfer_to_a_special_remote_verify_source_content__63__.mdwn create mode 100644 doc/forum/Should_transfer_to_a_special_remote_verify_source_content__63__/comment_1_6de754a926c5ad0e2da6cf6a1c58ce69._comment create mode 100644 doc/forum/Simple_check_out_with_assistant__63__.mdwn create mode 100644 doc/forum/Simple_check_out_with_assistant__63__/comment_1_ade8a0743ef1ec933c8a40ed64eeac2d._comment create mode 100644 doc/forum/Simple_question_about_web_remote.mdwn create mode 100644 doc/forum/Simple_question_about_web_remote/comment_1_a732a7264b60faed29782a034c0bc592._comment create mode 100644 doc/forum/Simple_question_about_web_remote/comment_2_274810bdc176984c056304e17668c63b._comment create mode 100644 doc/forum/Simple_question_about_web_remote/comment_3_984a3b05bcc6b24430210d9ae039a026._comment create mode 100644 doc/forum/Simple_question_about_web_remote/comment_4_510abbb4deca924020b87f1eb7d61005._comment create mode 100644 doc/forum/Slightly_finer_control_over_file_whereabouts.mdwn create mode 100644 doc/forum/Slightly_finer_control_over_file_whereabouts/comment_10_bcb883d46a637dd1a8ef9a92733d202a._comment create mode 100644 doc/forum/Slightly_finer_control_over_file_whereabouts/comment_11_b7a8b9eaf114f883866fbf2be51b622f._comment create mode 100644 doc/forum/Slightly_finer_control_over_file_whereabouts/comment_1_6236bcfa9beba705ead3ec2141c5d835._comment create mode 100644 doc/forum/Slightly_finer_control_over_file_whereabouts/comment_2_ea935b37ca93e73c85d04df7c9bf6057._comment create mode 100644 doc/forum/Slightly_finer_control_over_file_whereabouts/comment_3_f89a8e38283ac4c8c4a3b74c413d67a1._comment create mode 100644 doc/forum/Slightly_finer_control_over_file_whereabouts/comment_4_07a0a754a089c46ff69dc97ea7ba9384._comment create mode 100644 doc/forum/Slightly_finer_control_over_file_whereabouts/comment_5_e884c001a556a0c693d1cc9a97c068ac._comment create mode 100644 doc/forum/Slightly_finer_control_over_file_whereabouts/comment_6_3e8674b5857e4994dfbc26be4f4b2855._comment create mode 100644 doc/forum/Slightly_finer_control_over_file_whereabouts/comment_7_7aeabc2e52a39423e83fbd04560e8f91._comment create mode 100644 doc/forum/Slightly_finer_control_over_file_whereabouts/comment_8_53b95449cfad2fe0f72d2ad642822c03._comment create mode 100644 doc/forum/Slightly_finer_control_over_file_whereabouts/comment_9_a17c102a45e4fc3f101a79acb8eb4081._comment create mode 100644 doc/forum/Slow_direct_mode_repository.mdwn create mode 100644 doc/forum/Slow_direct_mode_repository/comment_1_63656f103d418b35712a68f771ed559c._comment create mode 100644 doc/forum/Slow_transfer_speeds_on_copy_in_Windows.mdwn create mode 100644 doc/forum/Slow_transfer_speeds_on_copy_in_Windows/comment_1_dd4ebb10ac87e3ee6158b7e7b1273a81._comment create mode 100644 doc/forum/Slow_transfer_speeds_on_copy_in_Windows/comment_2_9ebd40fe286f6c13f1021bf360e9c48e._comment create mode 100644 doc/forum/Slow_transfer_speeds_on_copy_in_Windows/comment_3_c169ad6205c998f3d44f9c0859071b2d._comment create mode 100644 doc/forum/Slow_transfer_speeds_on_copy_in_Windows/comment_4_aee3fc6be01bb75709451eea0decf112._comment create mode 100644 doc/forum/Slow_transfer_speeds_on_copy_in_Windows/comment_5_b1841fc129a9ce6d1c22840ee648f958._comment create mode 100644 doc/forum/Slow_transfer_speeds_on_copy_in_Windows/comment_6_1ce9bb47dadd2b1c500b2a20fd669907._comment create mode 100644 doc/forum/Slow_transfer_speeds_on_copy_in_Windows/comment_7_4b78b200b884c4ac7c052055b3e26784._comment create mode 100644 doc/forum/Slow_transfer_speeds_on_copy_in_Windows/comment_8_97ef11581c5dc6eeeabb4b244bdc6c30._comment create mode 100644 doc/forum/So_this_is_embarrassing__59___git_export_not_working.mdwn create mode 100644 doc/forum/So_this_is_embarrassing__59___git_export_not_working/comment_1_70a68381641ea3369cd19e2864de753c._comment create mode 100644 doc/forum/So_this_is_embarrassing__59___git_export_not_working/comment_2_57ce71a398b0e2c947164e97ba8d0e2d._comment create mode 100644 doc/forum/So_this_is_embarrassing__59___git_export_not_working/comment_3_b7dcb0a5e69e620278d1aa4d6f5829cd._comment create mode 100644 doc/forum/So_this_is_embarrassing__59___git_export_not_working/comment_4_a5822d922a107e2a0e8972b7f55d92cc._comment create mode 100644 doc/forum/So_this_is_embarrassing__59___git_export_not_working/comment_5_edbc4191d6444dfe50f4c1d7bbab572d._comment create mode 100644 doc/forum/So_this_is_embarrassing__59___git_export_not_working/comment_6_b5072042bda56ad5a781aab8419ede74._comment create mode 100644 doc/forum/Some_files_missing_extension_in_annex.mdwn create mode 100644 doc/forum/Some_files_missing_extension_in_annex/comment_1_12ab578a4390c0f5896106906997de4b._comment create mode 100644 doc/forum/Some_files_missing_extension_in_annex/comment_2_7fa25274fb00ba823b112d587c52df76._comment create mode 100644 doc/forum/Some_files_missing_extension_in_annex/comment_3_b05b478e91f58bd4ccd6d8ccf3b7ddf1._comment create mode 100644 doc/forum/Some_mounted_devices_not_detected.mdwn create mode 100644 doc/forum/Some_mounted_devices_not_detected/comment_1_0ba07b95f12f57ea63bb450b88430c45._comment create mode 100644 doc/forum/Some_mounted_devices_not_detected/comment_2_4f8c7bcd0f20dafa5635a3580ec8d1f6._comment create mode 100644 doc/forum/Some_mounted_devices_not_detected/comment_3_06c0db7d670d9b82823102d22db15a36._comment create mode 100644 doc/forum/Some_mounted_devices_not_detected/comment_4_80820a29361c5be4a94672dacfdefa6f._comment create mode 100644 doc/forum/Somehow_have_lots_of_directories_in_root__58___000...ffff.mdwn create mode 100644 doc/forum/Somehow_have_lots_of_directories_in_root__58___000...ffff/comment_1_20147b287fd995fa8ac9e868b5974d8a._comment create mode 100644 doc/forum/Somehow_have_lots_of_directories_in_root__58___000...ffff/comment_2_f6d977a534264b4368401e1b13628931._comment create mode 100644 doc/forum/Somehow_have_lots_of_directories_in_root__58___000...ffff/comment_3_d534da276b79a40fdb7d8d158f6eae26._comment create mode 100644 doc/forum/Somehow_have_lots_of_directories_in_root__58___000...ffff/comment_4_8c817d08ca9d94a1228fb21cd0b15744._comment create mode 100644 doc/forum/Special_remote_public_key_encryption_issue.mdwn create mode 100644 doc/forum/Special_remote_public_key_encryption_issue/comment_1_a9caafea017a3c148f89d4ddeee15a4c._comment create mode 100644 doc/forum/Special_remote_public_key_encryption_issue/comment_2_adfa582d611ca501e21110282df07315._comment create mode 100644 doc/forum/Special_remote_public_key_encryption_issue/comment_3_eac16bf98a6e87461ba2f3ab7e990b2b._comment create mode 100644 doc/forum/Special_remote_public_key_encryption_issue/comment_6_097f52aaf178340b3abb5bfc80f0d447._comment create mode 100644 doc/forum/Special_remote_without_chmod.mdwn create mode 100644 doc/forum/Special_remote_without_chmod/comment_1_4f5f9506cae72a1f321296fc5a5f339a._comment create mode 100644 doc/forum/Special_remotes_description_misleading.mdwn create mode 100644 doc/forum/Special_remotes_description_misleading/comment_1_5226553dd5f529e3e4882ea18c3be600._comment create mode 100644 doc/forum/Special_remotes_description_misleading/comment_2_616cc2f7d729682c69a9379df785dda5._comment create mode 100644 doc/forum/Specifying_private_key_for_ssh_remote.mdwn create mode 100644 doc/forum/Specifying_private_key_for_ssh_remote/comment_1_94d38f788ab5bc34da9ba56c2fb729b5._comment create mode 100644 doc/forum/Speed_up_remote_transfers.mdwn create mode 100644 doc/forum/Speed_up_remote_transfers/comment_1_bd97e1c47338322c5232cea7cdbc26fc._comment create mode 100644 doc/forum/Speed_up_remote_transfers/comment_2_723b3b69d47c947e5cbe8e94b84df022._comment create mode 100644 doc/forum/Split_annex_into_multiple.mdwn create mode 100644 doc/forum/Split_annex_into_multiple/comment_1_e934b404f738cbd67df928fd6769e3ff._comment create mode 100644 doc/forum/Split_annex_into_multiple/comment_2_eec6bc8c49c08411a4bb2cf7cc1c4697._comment create mode 100644 doc/forum/Ssh_remote_on_NAS.mdwn create mode 100644 doc/forum/Ssh_remote_on_NAS/comment_1_1dd8a0d0e70a1fb36fce62e89c99b404._comment create mode 100644 doc/forum/Ssh_remote_on_NAS/comment_2_261601313d8825c52322949b8509bc74._comment create mode 100644 doc/forum/Ssh_remote_on_NAS/comment_3_ed602f4f972b78bce4f62bdfca8cfe47._comment create mode 100644 doc/forum/Ssh_remote_on_NAS/comment_4_423244f174123318f1ece7b5794aeea5._comment create mode 100644 doc/forum/Ssh_remote_on_NAS/comment_5_07348ed61ccdd93417365f1525a05bf2._comment create mode 100644 doc/forum/Ssh_remote_on_NAS/comment_6_26d444afe2edea3500f80bb5c62ba491._comment create mode 100644 doc/forum/Ssh_remote_on_NAS/comment_7_3c70f8b9ac2a77462c6f21929c02d9d3._comment create mode 100644 doc/forum/Stale_keys_and_.cache_files_left_in_.git__47__annex__47__objects.mdwn create mode 100644 doc/forum/Stale_keys_and_.cache_files_left_in_.git__47__annex__47__objects/comment_1_2aa80b317863a99e676a375d907d0e84._comment create mode 100644 doc/forum/Standard_groups__47__preferred_contents.mdwn create mode 100644 doc/forum/Standard_groups__47__preferred_contents/comment_1_143aa3095d7222c869c36a5039282e35._comment create mode 100644 doc/forum/Standard_groups__47__preferred_contents/comment_2_65bef012eb113986a2e9b02470a6cbd1._comment create mode 100644 doc/forum/Standard_groups__47__preferred_contents/comment_3_202a7e2820e0adf079ccd14a7993ad25._comment create mode 100644 doc/forum/Standard_groups__47__preferred_contents/comment_4_e0faf9ebd3162e0de860eba0fd28c67c._comment create mode 100644 doc/forum/Standard_groups__47__preferred_contents/comment_5_eb47696244931173bddcbeb8d5f78637._comment create mode 100644 doc/forum/Standard_groups__47__preferred_contents/comment_6_c70c9fa97bce8e4eb9b3880d8f843aef._comment create mode 100644 doc/forum/Standard_groups__47__preferred_contents/comment_7_413593ea0663874196305c9eb602e7c4._comment create mode 100644 doc/forum/Standards_usage_pattern__63__.mdwn create mode 100644 doc/forum/Standards_usage_pattern__63__/comment_1_1ccbfaefe3bbaf767e999cd1c61debfb._comment create mode 100644 doc/forum/Starting_assistant_from_CLI.mdwn create mode 100644 doc/forum/Starting_assistant_from_CLI/comment_1_afd51ddb0f1bb3cac528e1d96829ef83._comment create mode 100644 doc/forum/Starting_assistant_from_CLI/comment_2_76c34c00cf2065809b15a594023a688b._comment create mode 100644 doc/forum/Starting_assistant_from_CLI/comment_3_f7826867f78b1adbfc2dad2fad4d6720._comment create mode 100644 doc/forum/Starting_assistant_from_CLI/comment_4_fa7055a232a1dcb743db47308f7acf0b._comment create mode 100644 doc/forum/Starting_assistant_from_CLI/comment_5_8d657646080bf2b99b7792993b877502._comment create mode 100644 doc/forum/Steps_for_setting_up_Google_Cloud_Storage___40__GSC__41__.mdwn create mode 100644 doc/forum/Steps_for_setting_up_Google_Cloud_Storage___40__GSC__41__/comment_1_addbedd6ee8a534c5c4f0e639c05591c._comment create mode 100644 doc/forum/Store_annexed_files_encrypted_on_special_remote_with_gcrypt.mdwn create mode 100644 doc/forum/Store_annexed_files_encrypted_on_special_remote_with_gcrypt/comment_1_5a643827a1ced7c0b9bba5303f71a52c._comment create mode 100644 doc/forum/Store_annexed_files_encrypted_on_special_remote_with_gcrypt/comment_2_92e1aef2ce26210b15a908e2cf729b80._comment create mode 100644 doc/forum/Store_annexed_files_encrypted_on_special_remote_with_gcrypt/comment_3_12a72b294e2808b09bff6788cf2b19dd._comment create mode 100644 doc/forum/Storing_copies_on_LTO_tapes__63__.mdwn create mode 100644 doc/forum/Storing_copies_on_LTO_tapes__63__/comment_1_9ae9ca3983f7d4209fd1de65d982731d._comment create mode 100644 doc/forum/Storing_copies_on_LTO_tapes__63__/comment_2_6d16d00c7ef8d846e370e1b298a7bc7a._comment create mode 100644 doc/forum/Storing_git_repos_in_git-annex.mdwn create mode 100644 doc/forum/Storing_git_repos_in_git-annex/comment_1_ac7b52c0b0f75d79760ffe6a9b5c8759._comment create mode 100644 doc/forum/Storing_git_repos_in_git-annex/comment_3_3bec1f02ff1a61791e3cbb428c7acb4c._comment create mode 100644 doc/forum/Storing_git_repos_in_git-annex/comment_4_76ddbd27cc2f3785bb5aaebb0bb6e087._comment create mode 100644 doc/forum/Storing_git_repos_in_git-annex/comment_5_f9520cbc6669622aa342acad35581943._comment create mode 100644 doc/forum/Storing_git_repos_in_git-annex/comment_6_4a5ddb1980b9ba0378531a8d4fb93523._comment create mode 100644 doc/forum/Storing_git_repos_in_git-annex/comment_9_d5676400e7148b7d3408f2bdb3d54b7d._comment create mode 100644 doc/forum/Storing_uncontrolled_files_in_an_annex.mdwn create mode 100644 doc/forum/Storing_uncontrolled_files_in_an_annex/comment_1_175645a90be0c79221c129308adf643e._comment create mode 100644 doc/forum/Storing_uncontrolled_files_in_an_annex/comment_2_d29f214eadfe3bfd098bbc3bcf07129a._comment create mode 100644 doc/forum/Storing_uncontrolled_files_in_an_annex/comment_3_286b502e7906cca50e9e747db735bc88._comment create mode 100644 doc/forum/Strategy_for_dealing_with_an_old_archive_drive.mdwn create mode 100644 doc/forum/Strategy_for_dealing_with_an_old_archive_drive/comment_1_7405e507dd15f207445be1e5099e02f3._comment create mode 100644 doc/forum/Strategy_for_dealing_with_an_old_archive_drive/comment_2_bafde6d22fdb5106c2e4a519e5945072._comment create mode 100644 doc/forum/Structure_needs_cleaning_git-annex__58___fd__58__15__58___hGetLine__58___end_of_file.mdwn create mode 100644 doc/forum/Structure_needs_cleaning_git-annex__58___fd__58__15__58___hGetLine__58___end_of_file/comment_1_7bcc0111015985bde398a2a1a02b28ba._comment create mode 100644 doc/forum/Structure_needs_cleaning_git-annex__58___fd__58__15__58___hGetLine__58___end_of_file/comment_2_b1dfc6168bb7127312d3e06cc0939b8d._comment create mode 100644 doc/forum/Stuck_in_a_bad_state.mdwn create mode 100644 doc/forum/Stupid_mistake__58___recoverable__63__.mdwn create mode 100644 doc/forum/Stupid_mistake__58___recoverable__63__/comment_1_00ceb3a5e37825c4bbc806f532893706._comment create mode 100644 doc/forum/Stupid_mistake__58___recoverable__63__/comment_2_cbedc29678d9b6af3b3c0bb1915d2391._comment create mode 100644 doc/forum/Stupid_mistake__58___recoverable__63__/comment_3_86aa4d92a1330811862da1ba568b3037._comment create mode 100644 doc/forum/Stupid_mistake__58___recoverable__63__/comment_4_6d15bf8a3c3c27cc92957070161675a9._comment create mode 100644 doc/forum/Stupid_mistake__58___recoverable__63__/comment_5_f836b9b1d03d94c49e3798961790b2ba._comment create mode 100644 doc/forum/Submodule_.git_not_converted_to_symlink.mdwn create mode 100644 doc/forum/Submodule_.git_not_converted_to_symlink/comment_1_5d95da69235eb3c6b60227544380a4e8._comment create mode 100644 doc/forum/Submodule_.git_not_converted_to_symlink/comment_2_351c58b21d36770729c52991901d668c._comment create mode 100644 doc/forum/Submodule_.git_not_converted_to_symlink/comment_3_636fe0ff273cd8987168e3095929aa7f._comment create mode 100644 doc/forum/Suggestion__58___Put_ssh_server_back_into_android_version.mdwn create mode 100644 doc/forum/Suggestion__58___Put_ssh_server_back_into_android_version/comment_1_5c2f376a82458c6387560355940419d3._comment create mode 100644 doc/forum/Suggestion__58___Put_ssh_server_back_into_android_version/comment_2_6321dec0b2f22f841f3cb986e063113f._comment create mode 100644 doc/forum/Suggestion__58___downgrade_error.mdwn create mode 100644 doc/forum/Symantec_endpoint_protection_raises_WS.Reputation.1_on_git-annex_windows_installer.mdwn create mode 100644 doc/forum/Symantec_endpoint_protection_raises_WS.Reputation.1_on_git-annex_windows_installer/comment_1_3b1da8ce0dcf43efcdc9b264ef21fb3a._comment create mode 100644 doc/forum/Symlink_points_to_old_version.mdwn create mode 100644 doc/forum/Symlink_points_to_old_version/comment_1_c9c777333a01865e95332ea7ff1e6cf7._comment create mode 100644 doc/forum/Symlink_points_to_old_version/comment_2_9bf097d27a64743a420cba0136787165._comment create mode 100644 doc/forum/Sync_All_Missing_Content__63__.mdwn create mode 100644 doc/forum/Sync_All_Missing_Content__63__/comment_1_fbe27e8dc9dd85e860b3382f99426c14._comment create mode 100644 doc/forum/Sync_All_Missing_Content__63__/comment_2_d77b7f56dcb8bf384f5a19bf54fe629e._comment create mode 100644 doc/forum/Sync_Enabled__47__Disabled_Status.mdwn create mode 100644 doc/forum/Sync_Enabled__47__Disabled_Status/comment_1_cfe98bdd50cea0fd0e36a42892262084._comment create mode 100644 doc/forum/Sync_files_from_remote_to_remote.mdwn create mode 100644 doc/forum/Sync_files_from_remote_to_remote/comment_1_c5247657a5b3cd68fd55112efe97ef99._comment create mode 100644 doc/forum/Sync_files_from_remote_to_remote/comment_2_634e399d21271f26f7f77c15c5fb132b._comment create mode 100644 doc/forum/Sync_files_from_remote_to_remote/comment_3_b89701582b40e2c337a1a49733877210._comment create mode 100644 doc/forum/Sync_files_from_remote_to_remote/comment_4_b3ad93e032c3c9d2312970711540bf92._comment create mode 100644 doc/forum/Sync_files_from_remote_to_remote/comment_5_bdf293d30692311983d0586231535bd4._comment create mode 100644 doc/forum/Sync_files_from_remote_to_remote/comment_6_fda62d735035213f2a0b5b2fc95991ab._comment create mode 100644 doc/forum/Sync_files_from_remote_to_remote/comment_7_77c6550397435e9601fbae467be90976._comment create mode 100644 doc/forum/Sync_files_from_remote_to_remote/comment_8_4d3c05acc310a21f6c8ab77fb2638a8c._comment create mode 100644 doc/forum/Sync_files_via_remote_server.mdwn create mode 100644 doc/forum/Sync_from_one_remote_to_another___40__rsync.net_to_s3__41____63__.mdwn create mode 100644 doc/forum/Sync_from_one_remote_to_another___40__rsync.net_to_s3__41____63__/comment_1_68e73ffa29338214fa030c5f0e2823c6._comment create mode 100644 doc/forum/Sync_from_one_remote_to_another___40__rsync.net_to_s3__41____63__/comment_3_3d57de3c12527e5a4b30ff7982ae749d._comment create mode 100644 doc/forum/Sync_from_one_remote_to_another___40__rsync.net_to_s3__41____63__/comment_3_94b40e68418f732322c9a01418688165._comment create mode 100644 doc/forum/Sync_only_what_is_not_available_from_my_central_git_repo.mdwn create mode 100644 doc/forum/Sync_only_what_is_not_available_from_my_central_git_repo/comment_1_b31d02c97447996495de73705ac39f71._comment create mode 100644 doc/forum/Sync_only_what_is_not_available_from_my_central_git_repo/comment_2_098465ae8af32931779d2cd63750d5dc._comment create mode 100644 doc/forum/Sync_with_one_offline_peer.mdwn create mode 100644 doc/forum/Sync_with_one_offline_peer/comment_1_3859d842d4f7e2ef44877b05ebe881fb._comment create mode 100644 doc/forum/Sync_with_one_offline_peer/comment_2_c9ba3983b37b0c1868269616fd81e518._comment create mode 100644 doc/forum/Sync_with_one_offline_peer/comment_3_28b9c003b4560c3ce90c9ebf808b091b._comment create mode 100644 doc/forum/Sync_without_jabber_account.mdwn create mode 100644 doc/forum/Sync_without_jabber_account/comment_1_3e95ac2e67451f953cf0538094109f8b._comment create mode 100644 doc/forum/Synchronize_large_files___40__VM_images__41__.mdwn create mode 100644 doc/forum/Synchronize_large_files___40__VM_images__41__/comment_1_619f6ed2d7da5832ab253d61b6dd8044._comment create mode 100644 doc/forum/Synchronize_large_files___40__VM_images__41__/comment_2_bbd98d0b5d77dc7efc55ef8c2a18d612._comment create mode 100644 doc/forum/Synchronize_large_files___40__VM_images__41__/comment_3_6488bbe6f39e7154f950530498e9b548._comment create mode 100644 doc/forum/Synchronize_two_latops_with_a_ssh_remote.mdwn create mode 100644 doc/forum/Syncing_Compressed_files.mdwn create mode 100644 doc/forum/Syncing_Compressed_files/comment_1_e44598cd735830a8df9a29e0031d34f1._comment create mode 100644 doc/forum/Syncing_Compressed_files/comment_2_db1ea446ae9720fe1651c56da38e7088._comment create mode 100644 doc/forum/Syncing_Compressed_files/comment_3_885c045c8ddfccbd426a6bc1bc053435._comment create mode 100644 doc/forum/Syncing_Compressed_files/comment_4_d619d9b7ad4ca3f2fa9505ea928d5bf7._comment create mode 100644 doc/forum/Syncing_Compressed_files/comment_5_0c7af752cc35013273a07a5fa1f71f6e._comment create mode 100644 doc/forum/Syncing_machines_on_different_networks.mdwn create mode 100644 doc/forum/Syncing_machines_on_different_networks/comment_1_1c3523c722c178a96b096a68b9be4165._comment create mode 100644 doc/forum/Syncing_machines_on_different_networks/comment_2_d7b14ffee65072329cfe9ab08a0dba50._comment create mode 100644 doc/forum/Syncing_machines_on_different_networks/comment_3_65d1dae9b76fccb5f2b8fd8c69b60075._comment create mode 100644 doc/forum/Syncing_machines_on_different_networks/comment_4_2ec67428af69d6c0ea051c6a67d58905._comment create mode 100644 doc/forum/Syncing_machines_on_different_networks/comment_5_5ce093f82a2aad3fd8d7ccd5fdcab94f._comment create mode 100644 doc/forum/Syncing_machines_on_different_networks/comment_6_a55982c28d7b90e0b70ec2bb5e594e08._comment create mode 100644 doc/forum/Syncing_machines_on_different_networks/comment_7_c519d546e1a2a4e834609f3de3a605b0._comment create mode 100644 doc/forum/Syncing_machines_on_different_networks/comment_8_84a822238ddbaf211cce5f527c3559d3._comment create mode 100644 doc/forum/Syncing_with___39__include__39___rule_for_duplicate_files.mdwn create mode 100644 doc/forum/Syncing_with___39__include__39___rule_for_duplicate_files/comment_1_5d776e90c24c4eed14ae01c6019c76b8._comment create mode 100644 doc/forum/Syncing_with_an_encrypted_remote_from_a_different_computer__63__.mdwn create mode 100644 doc/forum/Syncing_with_an_encrypted_remote_from_a_different_computer__63__/comment_1_cd55d06a4065b9d3f14d50674c3fcaf7._comment create mode 100644 doc/forum/Syncing_with_an_encrypted_remote_from_a_different_computer__63__/comment_2_25cbdf478091af9923090e049c432a7d._comment create mode 100644 doc/forum/Syncing_with_an_encrypted_remote_from_a_different_computer__63__/comment_3_7e71d355457d6b1a0391d4cdae6895e6._comment create mode 100644 doc/forum/Syncing_with_an_encrypted_remote_from_a_different_computer__63__/comment_4_a73f67f2fcf0762fbd7c8366b3844af6._comment create mode 100644 doc/forum/Syncronisation_of_syncronisation_between_3_repositories__63__.mdwn create mode 100644 doc/forum/Syncronisation_of_syncronisation_between_3_repositories__63__/comment_1_ca5192a26950627a1c2efcb55d6d2fa3._comment create mode 100644 doc/forum/Termux_Android_8.1_Proot_Error.mdwn create mode 100644 doc/forum/Termux_Android_8.1_Proot_Error/comment_1_1ef5f1b83e1bc0061d9fb1bba601a692._comment create mode 100644 doc/forum/Thank_you.mdwn create mode 100644 doc/forum/Thank_you/comment_1_3be1d5e92c3abc222713c75169b43dfb._comment create mode 100644 doc/forum/The_ability_to_leave_a_file_unlocked_for_a_bit_while_committing_it_repeatedly__63__.mdwn create mode 100644 doc/forum/The_ability_to_leave_a_file_unlocked_for_a_bit_while_committing_it_repeatedly__63__/comment_1_3cbe520b184d323219cb402ff046c3b4._comment create mode 100644 doc/forum/The_ability_to_leave_a_file_unlocked_for_a_bit_while_committing_it_repeatedly__63__/comment_2_6afe7f593e955db2eefe87d9fa01882b._comment create mode 100644 doc/forum/The_ability_to_leave_a_file_unlocked_for_a_bit_while_committing_it_repeatedly__63__/comment_3_209399487fc4f76b29f03ad82dbc2d6f._comment create mode 100644 doc/forum/The_ability_to_leave_a_file_unlocked_for_a_bit_while_committing_it_repeatedly__63__/comment_4_f33fd6f72cb9ad7dd20a04c82199413b._comment create mode 100644 doc/forum/The_future_of_Direct_Mode.mdwn create mode 100644 doc/forum/The_future_of_Direct_Mode/comment_1_f16f6e41f01d59ccef9666a2ec46d294._comment create mode 100644 doc/forum/The_future_of_Direct_Mode/comment_2_c7408d45d0a2a854020e4169fe757d51._comment create mode 100644 doc/forum/This_account_is_restricted_by_rssh._Allowed_commands__58___scp_rsync__160__.mdwn create mode 100644 doc/forum/This_account_is_restricted_by_rssh._Allowed_commands__58___scp_rsync__160__/comment_1_68e911629da672473bd6188407a68be2._comment create mode 100644 doc/forum/Thoughts_on_glacier_remotes_for_archive_purposes.mdwn create mode 100644 doc/forum/Thoughts_on_glacier_remotes_for_archive_purposes/comment_1_c874e49e668baa1fed293318cef88dd0._comment create mode 100644 doc/forum/Thoughts_on_glacier_remotes_for_archive_purposes/comment_2_28926e01b82de55352702182730a6b4b._comment create mode 100644 doc/forum/Time_for_another_user_survey__63__.mdwn create mode 100644 doc/forum/Time_for_another_user_survey__63__/comment_1_e746e11d30049906758a015059658e16._comment create mode 100644 doc/forum/Timeline_of_git_reinject__63__.mdwn create mode 100644 doc/forum/Timeline_of_git_reinject__63__/comment_1_e88d612590d3cd0c2ea824c1e8a38678._comment create mode 100644 doc/forum/Timeout_sync_faster__63__.mdwn create mode 100644 doc/forum/Timeout_sync_faster__63__/comment_1_eb4c13c1ad9803f402215478c0baab2b._comment create mode 100644 doc/forum/Timeout_sync_faster__63__/comment_2_16d655b754d2d512c2b01bac8276f31c._comment create mode 100644 doc/forum/Tracking_a_directory_with_some_hg_and_git_repositories.mdwn create mode 100644 doc/forum/Tracking_a_directory_with_some_hg_and_git_repositories/comment_1_9fc3f6c2f7379755e0084a850fa9acd4._comment create mode 100644 doc/forum/Tracking_a_directory_with_some_hg_and_git_repositories/comment_2_f024d6a105143af1e06aafe49661ee06._comment create mode 100644 doc/forum/Tracking_a_directory_with_some_hg_and_git_repositories/comment_3_aff0093c38bda8b093f05e8cbe8775e9._comment create mode 100644 doc/forum/Tracking_a_directory_with_some_hg_and_git_repositories/comment_4_c889050d3079edefc4633451bd5baff8._comment create mode 100644 doc/forum/Transfer_remotes.mdwn create mode 100644 doc/forum/Transfer_remotes/comment_1_c08cf3bda00d7f20a3ca3d0fdba19c9c._comment create mode 100644 doc/forum/Transfer_remotes/comment_2_98930629d398329f1161135464a966a5._comment create mode 100644 doc/forum/Transparent_compression_of_files.mdwn create mode 100644 doc/forum/Transparent_compression_of_files/comment_1_7242325defa000572ca8e78e29012451._comment create mode 100644 doc/forum/Transparent_compression_of_files/comment_2_a75e32b0825de0b405c45de14b9711c0._comment create mode 100644 doc/forum/Transparent_compression_of_files/comment_3_a876239d4a2fe96f2e2fe1c16e7f202b._comment create mode 100644 doc/forum/Trouble_adding_ssh_remote_using_assistant_on_windows.mdwn create mode 100644 doc/forum/Trouble_adding_ssh_remote_using_assistant_on_windows/comment_1_0055392bfead0dd1d9dc1a196a6e5269._comment create mode 100644 doc/forum/Trouble_adding_ssh_remote_using_assistant_on_windows/comment_2_3ec8af32b8148d31aaa3ba781b4dcf89._comment create mode 100644 doc/forum/Trouble_adding_ssh_remote_using_assistant_on_windows/comment_3_8ddec87534a9025c26394fecd5456b84._comment create mode 100644 doc/forum/Trouble_adding_ssh_remote_using_assistant_on_windows/comment_4_9c12c508f62f2e76d09f4ed15af9c74e._comment create mode 100644 doc/forum/Trouble_adding_ssh_remote_using_assistant_on_windows/comment_5_b496f6938bd463de501eaa5c1850ce5c._comment create mode 100644 doc/forum/Trouble_installing_from_cabal_on_debian-testing.mdwn create mode 100644 doc/forum/Trouble_installing_from_cabal_on_debian-testing/comment_1_0d3e9d7cffafc34bc212557e8bbb987d._comment create mode 100644 doc/forum/Trouble_setting_up_public_repo_cloneable_from_a_web_site.mdwn create mode 100644 doc/forum/Trouble_setting_up_public_repo_cloneable_from_a_web_site/comment_1_34a858688c46faf624fa7d98b05e6519._comment create mode 100644 doc/forum/Trouble_setting_up_public_repo_cloneable_from_a_web_site/comment_2_409103144cf803ced9d81d3380ca76fb._comment create mode 100644 doc/forum/Truly_purging_dead_repositories.mdwn create mode 100644 doc/forum/Truly_purging_dead_repositories/comment_1_a4c75d49714b3543a9f1617a15d4a2d1._comment create mode 100644 doc/forum/Truly_purging_dead_repositories/comment_2_3da60a02e7323a204c5c5dd02ba04d6c._comment create mode 100644 doc/forum/Truly_purging_dead_repositories/comment_3_2576e45436008ff5a7ae5a38cade658e._comment create mode 100644 doc/forum/Truly_purging_dead_repositories/comment_4_477e3c213c5a5d4a33afd42a5b94c718._comment create mode 100644 doc/forum/Trying_to_delete_an_S3_repo_fails.mdwn create mode 100644 doc/forum/Trying_to_delete_an_S3_repo_fails/comment_1_d8ab7757cd224439d55a18bfec405772._comment create mode 100644 doc/forum/Trying_to_delete_an_S3_repo_fails/comment_2_94653e0c2c9e3e3be45c383442c7ec9b._comment create mode 100644 doc/forum/Trying_to_setup_2_full_backup_repos_that_sync_with_eachother.mdwn create mode 100644 doc/forum/Trying_to_wrap_my_head_around_git-annex__44___need_some_feedback.mdwn create mode 100644 doc/forum/Trying_to_wrap_my_head_around_git-annex__44___need_some_feedback/comment_1_86a86f1f3ea2e778e4022689391b887b._comment create mode 100644 doc/forum/Trying_to_wrap_my_head_around_git-annex__44___need_some_feedback/comment_2_77d61eceec24d2f41f044a643d8542cc._comment create mode 100644 doc/forum/Trying_to_wrap_my_head_around_git-annex__44___need_some_feedback/comment_3_529cada8df4888c12254818c26231835._comment create mode 100644 doc/forum/Trying_to_wrap_my_head_around_git-annex__44___need_some_feedback/comment_4_1561613ff2f0f3d7b42159d09ae1c7f7._comment create mode 100644 doc/forum/Trying_to_wrap_my_head_around_git-annex__44___need_some_feedback/comment_5_59991756981681648070d03e2277ccbb._comment create mode 100644 doc/forum/Trying_to_wrap_my_head_around_git-annex__44___need_some_feedback/comment_6_eeafd62249d44b89d1091f0be79b3086._comment create mode 100644 doc/forum/Trying_to_wrap_my_head_around_git-annex__44___need_some_feedback/comment_7_24a20071d43ded3be9c4c68a637ca4f5._comment create mode 100644 doc/forum/Trying_to_wrap_my_head_around_git-annex__44___need_some_feedback/comment_8_8ad6bd5fce8f9bc1622f225c162ae167._comment create mode 100644 doc/forum/Trying_to_wrap_my_head_around_git-annex__44___need_some_feedback/comment_9_6406fcf0021ac8266b4f2ef850be0fa0._comment create mode 100644 doc/forum/Two_computer_setup__58_____34__transfer__34___or___34__full_backup__34___repository_groups__63__.mdwn create mode 100644 doc/forum/Two_computer_setup__58_____34__transfer__34___or___34__full_backup__34___repository_groups__63__/comment_1_b8702892280447193e6e80be22a580a0._comment create mode 100644 doc/forum/Two_computer_setup__58_____34__transfer__34___or___34__full_backup__34___repository_groups__63__/comment_2_50cafde7e30b928480d1f142ddd763d2._comment create mode 100644 doc/forum/Two_computers__44___one_networked_repository__44___no_Jabber_-_how_to_setup_sync__63___.mdwn create mode 100644 doc/forum/Two_computers__44___one_networked_repository__44___no_Jabber_-_how_to_setup_sync__63___/comment_1_b90aef011d853ad9feb6f8edc08bf7d9._comment create mode 100644 doc/forum/USB_backup_with_files_visible.mdwn create mode 100644 doc/forum/USB_backup_with_files_visible/comment_10_b90b18ca57f9299f1920254bb2aa699b._comment create mode 100644 doc/forum/USB_backup_with_files_visible/comment_1_2832f8ae24dfb0f101e06f7c18283028._comment create mode 100644 doc/forum/USB_backup_with_files_visible/comment_2_6163e01aa441f8435091f026cc6da337._comment create mode 100644 doc/forum/USB_backup_with_files_visible/comment_3_ee92ff320eb5d9a031bdd1896aee0d86._comment create mode 100644 doc/forum/USB_backup_with_files_visible/comment_4_437c8342c0b65e3a89129800313eb73c._comment create mode 100644 doc/forum/USB_backup_with_files_visible/comment_5_5e10cffe8465ea4ecaa71c03a4c29ea4._comment create mode 100644 doc/forum/USB_backup_with_files_visible/comment_6_add048a16837f7940a859f21426cdbe9._comment create mode 100644 doc/forum/USB_backup_with_files_visible/comment_7_de227ca9911fe57d7a6d3e037f574fe9._comment create mode 100644 doc/forum/USB_backup_with_files_visible/comment_8_0c0ed0e038f7f0e2d2d4ed69b7b29fbc._comment create mode 100644 doc/forum/USB_backup_with_files_visible/comment_9_dfb830fb00c10b797c3d26179e6dfefd._comment create mode 100644 doc/forum/USB_drive_in_transfer_group_keeps_growing_-_assistant.mdwn create mode 100644 doc/forum/USB_drive_in_transfer_group_keeps_growing_-_assistant/comment_1_0a6f6054d70009979f4a036e24b7c500._comment create mode 100644 doc/forum/USB_drive_in_transfer_group_keeps_growing_-_assistant/comment_2_f9eef3019fe690e90c1228d62a16f70a._comment create mode 100644 doc/forum/USB_drive_in_transfer_group_keeps_growing_-_assistant/comment_3_7fb74f7fab6c1baff4ffc270cf15ef0a._comment create mode 100644 doc/forum/USB_drive_in_transfer_group_keeps_growing_-_assistant/comment_4_5925b609aff0954f2860269cff107284._comment create mode 100644 doc/forum/USB_drive_in_transfer_group_keeps_growing_-_assistant/comment_5_45062d5776f8aefb0850d70f2a517c75._comment create mode 100644 doc/forum/Ubuntu_PPA.mdwn create mode 100644 doc/forum/Ubuntu_PPA/comment_1_b55535258b1b4bcfc802235f0cba075d._comment create mode 100644 doc/forum/Ubuntu_PPA/comment_2_adc4d644fed058d1811acf0b35db9c18._comment create mode 100644 doc/forum/Ubuntu_PPA/comment_3_fc9cd51558c47718f243437202a11803._comment create mode 100644 doc/forum/Ubuntu_PPA/comment_4_3a8bbd0a7450a7f5323cd13144824aea._comment create mode 100644 doc/forum/Ubuntu_PPA/comment_5_2e1beaeebda0201c635db8b276cedf20._comment create mode 100644 doc/forum/Ubuntu_PPA/comment_6_bd99fb70399fc58d98781a89c6d38428._comment create mode 100644 doc/forum/Ubuntu_PPA/comment_7_c3f7ec8573934c59d70a48e36e321c13._comment create mode 100644 doc/forum/Ubuntu_PPA/comment_8_feecd478a4d44cb5ffc7020c646174ba._comment create mode 100644 doc/forum/Un-git-annex__63__.mdwn create mode 100644 doc/forum/Un-git-annex__63__/comment_1_6059265afb66190d325083e0f28bcf33._comment create mode 100644 doc/forum/Un-git-annex__63__/comment_2_fac4bfb81dbbf0dc82059aace261eb51._comment create mode 100644 doc/forum/Unable_to_change_RSS_feeds.mdwn create mode 100644 doc/forum/Unable_to_change_RSS_feeds/comment_1_9f6517f3c6dc8cd4e27d0011efcf2bb5._comment create mode 100644 doc/forum/Unable_to_change_RSS_feeds/comment_2_9ed0f746a199bb0ce474b2e9fa4f0a9e._comment create mode 100644 doc/forum/Understanding___34__deletion__34___and___34__dropping__34_____38___cleanup_of_history.mdwn create mode 100644 doc/forum/Understanding___34__deletion__34___and___34__dropping__34_____38___cleanup_of_history/comment_1_08dbad67df1d8f07d3883c6fed2fe0c4._comment create mode 100644 doc/forum/Undo_Git_Annex_Changes_To_Linked_Files.mdwn create mode 100644 doc/forum/Undo_Git_Annex_Changes_To_Linked_Files/comment_1_568dde820c2608d86d05b07444146a26._comment create mode 100644 doc/forum/Undo_Git_Annex_Changes_To_Linked_Files/comment_2_a8cf71cdf1217d9c8596cd9006eb83f5._comment create mode 100644 doc/forum/Undo_git_merge_git-annex.mdwn create mode 100644 doc/forum/Undo_git_merge_git-annex/comment_1_0b15f7a8c3bca87dcbf748a229e13a4b._comment create mode 100644 doc/forum/Undo_git_merge_git-annex/comment_2_c5a8839c53145a3b0d44950096c5180f._comment create mode 100644 doc/forum/Unknown_remote_type_S3.mdwn create mode 100644 doc/forum/Unknown_remote_type_S3/comment_1_2aea2cd51286c809427d16519606cd37._comment create mode 100644 doc/forum/Unknown_remote_type_S3/comment_2_06f775062cd30767979fe56bcb3cf7bf._comment create mode 100644 doc/forum/Unlock_files_when_assistant_is_running__63__.mdwn create mode 100644 doc/forum/Unlock_files_when_assistant_is_running__63__/comment_1_3f4aadf0c856c81e15c6f5ae7f1992b4._comment create mode 100644 doc/forum/Unlock_files_when_assistant_is_running__63__/comment_2_a76797ee9e05e43af7947508cadd7bed._comment create mode 100644 doc/forum/Unlocked_directory__63___Having_all_its_new_files_unlocked.mdwn create mode 100644 doc/forum/Unlocked_directory__63___Having_all_its_new_files_unlocked/comment_1_cd08064d171bea606df1cb7dafbdd381._comment create mode 100644 doc/forum/Unlocked_directory__63___Having_all_its_new_files_unlocked/comment_2_6da3347c2d9243a9fe61fd75999d6f36._comment create mode 100644 doc/forum/Unlocked_directory__63___Having_all_its_new_files_unlocked/comment_3_78dfedd93393709d3d7e417b779109d4._comment create mode 100644 doc/forum/Unlocked_directory__63___Having_all_its_new_files_unlocked/comment_4_bdd6cb9cdf2366e5d930c0cdd80b3984._comment create mode 100644 doc/forum/Unlocked_directory__63___Having_all_its_new_files_unlocked/comment_5_7a2109bbe16de4c05db48763d00bfaf1._comment create mode 100644 doc/forum/Unlocked_directory__63___Having_all_its_new_files_unlocked/comment_6_9ed97ec6e540f2b795bf5bc11fcfdc90._comment create mode 100644 doc/forum/Unlocked_directory__63___Having_all_its_new_files_unlocked/comment_7_c6f1dd606d2aa9aa473cdd3a6d92bd33._comment create mode 100644 doc/forum/Unlocked_files_confusion.mdwn create mode 100644 doc/forum/Unlocked_files_confusion/comment_1_6442aa304b4d44bfc6bc038f4b55f37a._comment create mode 100644 doc/forum/Unlocked_mode_without_data_also_under_.git__47__annex__63__.mdwn create mode 100644 doc/forum/Unlocked_mode_without_data_also_under_.git__47__annex__63__/comment_1_d35829cd466139e0e77a79c251a79ad8._comment create mode 100644 doc/forum/Unlocked_mode_without_data_also_under_.git__47__annex__63__/comment_2_07861ab33ec31659ec3cfa8520580fd4._comment create mode 100644 doc/forum/Unlocked_mode_without_data_also_under_.git__47__annex__63__/comment_3_ce7ff5d0ea390649af64a296fecf9113._comment create mode 100644 doc/forum/Unlocked_mode_without_data_also_under_.git__47__annex__63__/comment_4_b7eead64e39b5ebb1a22131b4e35251e._comment create mode 100644 doc/forum/Unlocked_mode_without_data_also_under_.git__47__annex__63__/comment_5_97fd65626991b1e8012e15595941d25d._comment create mode 100644 doc/forum/Unlocked_mode_without_data_also_under_.git__47__annex__63__/comment_6_f2572320e3cc93c7dd6db51e78f31c10._comment create mode 100644 doc/forum/Unlocking_files_gives_symlink_content.mdwn create mode 100644 doc/forum/Unlocking_files_gives_symlink_content/comment_1_f8032a5ea72f2cd833a626a197f94ba2._comment create mode 100644 doc/forum/Unlocking_files_gives_symlink_content/comment_2_f50b8ef54737798183490d5a660248f2._comment create mode 100644 doc/forum/Unlocking_files_gives_symlink_content/comment_3_29e467b112a94736147708c6892dae9c._comment create mode 100644 doc/forum/Update_on_remote_repo.mdwn create mode 100644 doc/forum/Update_on_remote_repo/comment_1_d58cfe914d6c36d8bff8d1342e1c2102._comment create mode 100644 doc/forum/Updating_a_podcast_episode_checksum.mdwn create mode 100644 doc/forum/Updating_a_podcast_episode_checksum/comment_1_8a4c7119f55dba5ff3cb858dbc96f1a5._comment create mode 100644 doc/forum/Updating_repository_permissions.mdwn create mode 100644 doc/forum/Upspin.mdwn create mode 100644 doc/forum/Upspin/comment_1_30adffff50a043c14b765ebdc6d637d2._comment create mode 100644 doc/forum/Use_addurl_with_a_file_on_an_HPC_cluster.mdwn create mode 100644 doc/forum/Use_addurl_with_a_file_on_an_HPC_cluster/comment_10_55d285c796f04049e26b6810c7c879ad._comment create mode 100644 doc/forum/Use_addurl_with_a_file_on_an_HPC_cluster/comment_11_7c7c0b3442902dbe0b9f875e0f1b634a._comment create mode 100644 doc/forum/Use_addurl_with_a_file_on_an_HPC_cluster/comment_1_bc5ffcf6d3b72c1ed7b7763549880560._comment create mode 100644 doc/forum/Use_addurl_with_a_file_on_an_HPC_cluster/comment_2_3bd66bf73386821c3837fe9da841fd1e._comment create mode 100644 doc/forum/Use_addurl_with_a_file_on_an_HPC_cluster/comment_3_a5bd659bc98d6879b5175dc53915fdc8._comment create mode 100644 doc/forum/Use_addurl_with_a_file_on_an_HPC_cluster/comment_4_9ec91c1eb9fe119c52831a4ce5c44e25._comment create mode 100644 doc/forum/Use_addurl_with_a_file_on_an_HPC_cluster/comment_5_bc7a29f8da461439cfb3cb270403181b._comment create mode 100644 doc/forum/Use_addurl_with_a_file_on_an_HPC_cluster/comment_6_4c8eb6c893ccd0a075500f4b9d4bccd9._comment create mode 100644 doc/forum/Use_addurl_with_a_file_on_an_HPC_cluster/comment_7_12f6a1b93c36095f12e2a721311dee2a._comment create mode 100644 doc/forum/Use_addurl_with_a_file_on_an_HPC_cluster/comment_8_83228ff27a74b575b77f0e380e13cc8a._comment create mode 100644 doc/forum/Use_addurl_with_a_file_on_an_HPC_cluster/comment_9_23ae2824d52b1f165b02294b0f89d704._comment create mode 100644 doc/forum/Use_assistant_to_sync_just_git_repos__63__.mdwn create mode 100644 doc/forum/Use_assistant_to_sync_just_git_repos__63__/comment_1_d487c7097db97e316f086742e851b01f._comment create mode 100644 doc/forum/Use_assistant_to_sync_just_git_repos__63__/comment_2_f0bb3c9461a6b84ca034ebfff814dc77._comment create mode 100644 doc/forum/Use_assistant_to_sync_just_git_repos__63__/comment_3_809b8a20c4de0da47e3f6bf794043744._comment create mode 100644 doc/forum/Use_assistant_to_sync_just_git_repos__63__/comment_4_fc4f3e2692c98e8168c8cbc696726f98._comment create mode 100644 doc/forum/Use_assistant_to_sync_just_git_repos__63__/comment_5_e9d1f0a0b10a16079f06b63251806b0e._comment create mode 100644 doc/forum/Use_assistant_to_sync_just_git_repos__63__/comment_6_0bd5e37ad9428eb38d2fdb84e58a0c2a._comment create mode 100644 doc/forum/Use_assistant_to_sync_just_git_repos__63__/comment_7_4ba1e89d84fedfd6508f37717310893d._comment create mode 100644 doc/forum/Use_assistant_to_sync_just_git_repos__63__/comment_8_d57eb0b4d41600a6709c03f00a9091be._comment create mode 100644 doc/forum/Use_case__58___Main_machine__44___portable_drive__44___backup_machine.mdwn create mode 100644 doc/forum/Use_case__58___Main_machine__44___portable_drive__44___backup_machine/comment_1_d2991b94eb067f0a6e47cd77f922411d._comment create mode 100644 doc/forum/Use_case__58___Main_machine__44___portable_drive__44___backup_machine/comment_2_0b778710b23eab1413256e289f0aa180._comment create mode 100644 doc/forum/Use_case__58___backup_on_multiple_USB_Drives.mdwn create mode 100644 doc/forum/Use_case__58___backup_on_multiple_USB_Drives/comment_1_5d45ee72f91af9ec8384b178af77bc2d._comment create mode 100644 doc/forum/Use_case__58___backup_on_multiple_USB_Drives/comment_2_502fedae83c3b6e0b32897ce4c1a8317._comment create mode 100644 doc/forum/Use_case_for_addurl.mdwn create mode 100644 doc/forum/Use_case_for_addurl/comment_1_2205b1857158cca4f6e2225c53bec1d5._comment create mode 100644 doc/forum/Use_case_with_syncing_only_a_subset_possible__63__.mdwn create mode 100644 doc/forum/Use_case_with_syncing_only_a_subset_possible__63__/comment_1_a0a272a0931b27e5c94b93e42656b62c._comment create mode 100644 doc/forum/Use_existing_S3_bucket.mdwn create mode 100644 doc/forum/Use_existing_S3_bucket/comment_1_ed0ead0b09ddbe52d42150a281d84f5c._comment create mode 100644 doc/forum/Use_existing_S3_bucket/comment_2_6b108846fca4a514d507f56d1052fdde._comment create mode 100644 doc/forum/Use_local_files_instead_of_re-downloading_from_S3_remote.mdwn create mode 100644 doc/forum/Use_local_files_instead_of_re-downloading_from_S3_remote/comment_1_cfb6021a36eee087705967a69967f327._comment create mode 100644 doc/forum/Use_local_files_instead_of_re-downloading_from_S3_remote/comment_2_7268b194ba72331858bc3274996b780e._comment create mode 100644 doc/forum/Use_on_large_media_collection_without_modifying_it.mdwn create mode 100644 doc/forum/Use_on_large_media_collection_without_modifying_it/comment_1_76307d95cf46992fbc5f084f9c056edc._comment create mode 100644 doc/forum/Use_on_large_media_collection_without_modifying_it/comment_2_b89b598844b0709a5b6709d0fb2ef60c._comment create mode 100644 doc/forum/Use_on_large_media_collection_without_modifying_it/comment_3_2d707dc516dad666fb2a647f65fcedcf._comment create mode 100644 doc/forum/Use_on_large_media_collection_without_modifying_it/comment_4_4529364f2919bd05f53da94cf8ba4268._comment create mode 100644 doc/forum/Use_password_protected_gpg_keypair_without_password_prompt__63__.mdwn create mode 100644 doc/forum/Use_password_protected_gpg_keypair_without_password_prompt__63__/comment_1_b177f16daeab7f02022f18154cfa1c3c._comment create mode 100644 doc/forum/Use_password_protected_gpg_keypair_without_password_prompt__63__/comment_2_6d88e5a48de78e6add0e4e4b6ebc3f1b._comment create mode 100644 doc/forum/Use_password_protected_gpg_keypair_without_password_prompt__63__/comment_3_a2eb4244788eebba5167cd32a73ff204._comment create mode 100644 doc/forum/Use_reflinks_on_BTRFS_instead_of_symlinks___63__.mdwn create mode 100644 doc/forum/Use_reflinks_on_BTRFS_instead_of_symlinks___63__/comment_1_85806316ed28d7a891f04fab4027141b._comment create mode 100644 doc/forum/Use_reflinks_on_BTRFS_instead_of_symlinks___63__/comment_2_ecb411a2c4d67917b734a90bd460d44b._comment create mode 100644 doc/forum/Use_reflinks_on_BTRFS_instead_of_symlinks___63__/comment_3_83dc719be1883d5369d27a787a5b5705._comment create mode 100644 doc/forum/Use_reflinks_on_BTRFS_instead_of_symlinks___63__/comment_4_bbe2e6359f7b754bde9d61b5a8d5e672._comment create mode 100644 doc/forum/Usecase__58___Tree_of_files_on_a_remote_SMB_server_that_i_need_to_leave_there__44____while_also_cloning_and_syncing_too.mdwn create mode 100644 doc/forum/Usecase__58___Tree_of_files_on_a_remote_SMB_server_that_i_need_to_leave_there__44____while_also_cloning_and_syncing_too/comment_1_30205c1ba18e5dca2314f593e1a0e236._comment create mode 100644 doc/forum/Usecase__58___Tree_of_files_on_a_remote_SMB_server_that_i_need_to_leave_there__44____while_also_cloning_and_syncing_too/comment_2_f8df728de28218a6b060ae9f08adac79._comment create mode 100644 doc/forum/Usecase__58___Tree_of_files_on_a_remote_SMB_server_that_i_need_to_leave_there__44____while_also_cloning_and_syncing_too/comment_3_ba438b3a371261ee841665f1ae57eba2._comment create mode 100644 doc/forum/Usecase__58___Tree_of_files_on_a_remote_SMB_server_that_i_need_to_leave_there__44____while_also_cloning_and_syncing_too/comment_4_9f72e6c7c14a77330297526aef260762._comment create mode 100644 doc/forum/Usecase__58___Tree_of_files_on_a_remote_SMB_server_that_i_need_to_leave_there__44____while_also_cloning_and_syncing_too/comment_5_a06e8c9b4e30c1cd6cbed40d2db50abc._comment create mode 100644 doc/forum/User_name_with_whitespace_not_working_with___34____40__+__41___Local_computer__34__.mdwn create mode 100644 doc/forum/User_name_with_whitespace_not_working_with___34____40__+__41___Local_computer__34__/comment_1_f803fc1fb340587fc4b55640fbae6604._comment create mode 100644 doc/forum/Using_Git-Annex___40__Assistant__41___to_manage_photos_with_Shotwell.mdwn create mode 100644 doc/forum/Using_Git-Annex___40__Assistant__41___to_manage_photos_with_Shotwell/comment_1_5e8d54daf6b7ff357619ac65fe39a2d7._comment create mode 100644 doc/forum/Using_Linux_static_builds.mdwn create mode 100644 doc/forum/Using_Linux_static_builds/comment_1_22fd266cbe68af3e754a10f1f1295e9b._comment create mode 100644 doc/forum/Using_Linux_static_builds/comment_2_36f69f30117ff8696425a754ab19a08b._comment create mode 100644 doc/forum/Using_Linux_static_builds/comment_3_64506833dad0202626239e00d1eb6490._comment create mode 100644 doc/forum/Using___34__sync__34___to_sink_all_branches__63__.mdwn create mode 100644 doc/forum/Using___34__sync__34___to_sink_all_branches__63__/comment_1_ef3d5c5e2600ffa36dd933c8a42cdf96._comment create mode 100644 doc/forum/Using___34__sync__34___to_sink_all_branches__63__/comment_2_424b0c6fdfe87ca08f5d408b7684ab08._comment create mode 100644 doc/forum/Using___34__sync__34___to_sink_all_branches__63__/comment_3_adaf9114c69f1268330adcebd8018fa0._comment create mode 100644 doc/forum/Using___39__git_add__39___in_mixed_content_repository__63__.mdwn create mode 100644 doc/forum/Using___39__git_add__39___in_mixed_content_repository__63__/comment_1_4b524cbbd40aedeb7d44f0c6dec9ffa1._comment create mode 100644 doc/forum/Using_a_glacier_remote_as_a_backup.mdwn create mode 100644 doc/forum/Using_a_glacier_remote_as_a_backup/comment_1_bb6022943ec739b1e80351c76f259e89._comment create mode 100644 doc/forum/Using_a_glacier_remote_as_a_backup/comment_2_41d47f0ca2e05e3296face5f89b819da._comment create mode 100644 doc/forum/Using_a_glacier_remote_as_a_backup/comment_3_e572b7bd25b4e7f6c6f83c7354d7407f._comment create mode 100644 doc/forum/Using_a_single_backup_repo_for_multiple_independent_client_repos__63__.mdwn create mode 100644 doc/forum/Using_a_single_backup_repo_for_multiple_independent_client_repos__63__/comment_1_c61c28600f1079fb03ddabc950307f27._comment create mode 100644 doc/forum/Using_for_Music_repo.mdwn create mode 100644 doc/forum/Using_for_Music_repo/comment_1_3488ed85ad98f14cb17f229225ece26e._comment create mode 100644 doc/forum/Using_for_Music_repo/comment_2_c794648878cfc77558f8db862271f997._comment create mode 100644 doc/forum/Using_for_Music_repo/comment_3_8c5e820f5ff7d717d64b1fd66927941b._comment create mode 100644 doc/forum/Using_git-annex.mdwn create mode 100644 doc/forum/Using_git-annex/comment_1_ac386ca07e9aaf009c264f3deed83832._comment create mode 100644 doc/forum/Using_git-annex/comment_2_bf5e13a490e16943acd2732f093695fc._comment create mode 100644 doc/forum/Using_git-annex/comment_3_471c9268b028f47ef3fac3f0be14b2b1._comment create mode 100644 doc/forum/Using_git-annex_as_a_library.mdwn create mode 100644 doc/forum/Using_git-annex_as_a_library/comment_10_cfded5c6325007c3f3f83818bd2e1dbc._comment create mode 100644 doc/forum/Using_git-annex_as_a_library/comment_1_1f8e74c5856f21c53d5a91892cbef0c6._comment create mode 100644 doc/forum/Using_git-annex_as_a_library/comment_2_11a243fa7d8ac947aa9a798228dbd191._comment create mode 100644 doc/forum/Using_git-annex_as_a_library/comment_3_ac52304a096ebc66967352efaffb060a._comment create mode 100644 doc/forum/Using_git-annex_as_a_library/comment_4_d502fea60bf3a82f8a50f72a90a80c25._comment create mode 100644 doc/forum/Using_git-annex_as_a_library/comment_5_a4ab4173620b72ac0a24d575fa9c810c._comment create mode 100644 doc/forum/Using_git-annex_as_a_library/comment_6_45d9520ebc13d1b4fd88c25abc61f1b4._comment create mode 100644 doc/forum/Using_git-annex_as_a_library/comment_7_909628f1edd0d3448498fc434c61a3a4._comment create mode 100644 doc/forum/Using_git-annex_as_a_library/comment_8_cef28b8639b6c6e84804b485fb5037f1._comment create mode 100644 doc/forum/Using_git-annex_as_a_library/comment_9_6d8ebdedf76fdf0c267444a7a07e225e._comment create mode 100644 doc/forum/Using_git-annex_to_manage_git_repositories.mdwn create mode 100644 doc/forum/Using_git-annex_to_manage_git_repositories/comment_1_f221717814f62e0779d691d2f601ab12._comment create mode 100644 doc/forum/Using_git-annex_to_manage_git_repositories/comment_2_ab24098c2f4519cbbfdcd00ba3e21d2b._comment create mode 100644 doc/forum/Using_git-annex_to_manage_git_repositories/comment_3_5cf9e2ff83bb76650469444c80fee4fb._comment create mode 100644 doc/forum/Using_git-annex_via_command_line_in_OS_X.mdwn create mode 100644 doc/forum/Using_git-annex_via_command_line_in_OS_X/comment_1_1c9e121f60fb6868c07f1a53b03c4ed0._comment create mode 100644 doc/forum/Using_git-annex_via_command_line_in_OS_X/comment_2_52d8ffba82e29ac2722a8e43e469cc47._comment create mode 100644 doc/forum/Using_git_annex_as_a_library.mdwn create mode 100644 doc/forum/Using_git_annex_as_a_library/comment_1_42cd26878e4e5c2c238c1227e3c372d9._comment create mode 100644 doc/forum/Using_git_annex_as_a_library/comment_2_1323238fc63e121fbc0f408a23d1ada5._comment create mode 100644 doc/forum/Using_git_annex_with_Android_tablet_which_only_has_exFAT_and_no_symlinks.mdwn create mode 100644 doc/forum/Using_git_annex_with_Android_tablet_which_only_has_exFAT_and_no_symlinks/comment_1_b9f202a30ba7e3bc264064d24454c099._comment create mode 100644 doc/forum/Using_git_annex_with_Android_tablet_which_only_has_exFAT_and_no_symlinks/comment_2_1334a8d9f4bb60f3bf3ebabc656d98d9._comment create mode 100644 doc/forum/Using_git_annex_with_Android_tablet_which_only_has_exFAT_and_no_symlinks/comment_3_076f22d05fad140068a540e4d835106f._comment create mode 100644 doc/forum/Using_git_annex_with_Android_tablet_which_only_has_exFAT_and_no_symlinks/comment_4_c8446ee1b817f1824fa0df07e742015c._comment create mode 100644 doc/forum/Using_git_annex_with_Android_tablet_which_only_has_exFAT_and_no_symlinks/comment_5_f746c1b85ee8e4b57b6819ccceabd28b._comment create mode 100644 doc/forum/Using_git_annex_with_a_SMB__47__FTP_TV_NAS_with_preconfigured_dirs.mdwn create mode 100644 doc/forum/Using_git_annex_with_a_SMB__47__FTP_TV_NAS_with_preconfigured_dirs/comment_1_bd73c8d10028e1b45da9ea8f657e5064._comment create mode 100644 doc/forum/Using_git_annex_with_a_SMB__47__FTP_TV_NAS_with_preconfigured_dirs/comment_2_16c3c994ee8fcb466e52ca0e812e5915._comment create mode 100644 doc/forum/Using_git_annex_with_a_SMB__47__FTP_TV_NAS_with_preconfigured_dirs/comment_3_ac60f6edb76bdd541711e472eec9591a._comment create mode 100644 doc/forum/Using_git_annex_with_a_SMB__47__FTP_TV_NAS_with_preconfigured_dirs/comment_4_2194f0600d9a90f0d9c947ea9cc213a3._comment create mode 100644 doc/forum/Using_git_annex_with_a_SMB__47__FTP_TV_NAS_with_preconfigured_dirs/comment_5_eb7d13f6b6fa674a2536bde51bfc3fd1._comment create mode 100644 doc/forum/Using_git_annex_with_a_SMB__47__FTP_TV_NAS_with_preconfigured_dirs/comment_6_ae323b16ddb9342e91be955408eca3b1._comment create mode 100644 doc/forum/Using_hashdirlower_layout_for_S3_special_remote.mdwn create mode 100644 doc/forum/Using_hashdirlower_layout_for_S3_special_remote/comment_1_ff8c84af9d08dfe7d8e502d1b84732f4._comment create mode 100644 doc/forum/Using_hashdirlower_layout_for_S3_special_remote/comment_2_9f22f7f14fab759caa1ddecda435311c._comment create mode 100644 doc/forum/Using_hashdirlower_layout_for_S3_special_remote/comment_3_d90ee84a9b0cf190961d92d089dbf7a6._comment create mode 100644 doc/forum/Using_hashdirlower_layout_for_S3_special_remote/comment_4_5aa6dff353af7beffdd56652d6fc6d3e._comment create mode 100644 doc/forum/Using_hashdirlower_layout_for_S3_special_remote/comment_5_79519a4c0fc25d41226a7048cd3a8306._comment create mode 100644 doc/forum/Using_integer_ranges_with_metadata.mdwn create mode 100644 doc/forum/Using_integer_ranges_with_metadata/comment_1_36298a679379e807892cd6af18ec1dd6._comment create mode 100644 doc/forum/Using_integer_ranges_with_metadata/comment_2_064e2c5706d1acc0f9e4576ff80407f7._comment create mode 100644 doc/forum/Using_integer_ranges_with_metadata/comment_3_c3ce727f93cce19db1f76de9f7216cee._comment create mode 100644 doc/forum/Using_integer_ranges_with_metadata/comment_4_c3301d1b2b57994666947fd518fb9922._comment create mode 100644 doc/forum/Using_integer_ranges_with_metadata/comment_5_9d310fac003f1cd9e6ca9bc96a210def._comment create mode 100644 doc/forum/Using_integer_ranges_with_metadata/comment_6_ead2b08bf4631547c34486ce58559017._comment create mode 100644 doc/forum/Using_standard_groups_and_sync_to_preserve_history__58___--all_not_recognised.mdwn create mode 100644 doc/forum/Using_standard_groups_and_sync_to_preserve_history__58___--all_not_recognised/comment_1_c3dd239d4b5b372229f2cec42a8a6eb4._comment create mode 100644 doc/forum/Using_standard_groups_and_sync_to_preserve_history__58___--all_not_recognised/comment_2_b76dd79aabe87ec717eea164aa965d74._comment create mode 100644 doc/forum/Using_the_Git-Annex_Assistant_as_a_Backup_and_Syncing_Service.mdwn create mode 100644 doc/forum/Using_the_Git-Annex_Assistant_as_a_Backup_and_Syncing_Service/comment_1_7070f6e7e05fba7686d8620d62906a83._comment create mode 100644 doc/forum/Verification.mdwn create mode 100644 doc/forum/Verification/comment_1_d56818a8f5b3a94ecf5159c76f24768c._comment create mode 100644 doc/forum/Verification/comment_2_7df45d1e20a32458791603d5b9fe3dc4._comment create mode 100644 doc/forum/Verification/comment_3_74db3ec8b03f48912306e48b8d5f7242._comment create mode 100644 doc/forum/Verification/comment_4_eb4d936a9bd577f58483b278ae5dc5f6._comment create mode 100644 doc/forum/Verification/comment_5_c327c72ceced27920681d5f93bc256c8._comment create mode 100644 doc/forum/Version_5_repo_with_git-annex_client_8.20211123___63__.mdwn create mode 100644 doc/forum/Version_5_repo_with_git-annex_client_8.20211123___63__/comment_1_780fb88d5cfcde6e8a8b6f025be6a043._comment create mode 100644 doc/forum/View_for_locally_existing_files.mdwn create mode 100644 doc/forum/View_for_locally_existing_files/comment_1_8ede4c8f1ca48e34629c46a77ba01f11._comment create mode 100644 doc/forum/View_for_locally_existing_files/comment_2_e8d7672850518f4859643a0ee40e57e1._comment create mode 100644 doc/forum/View_performance_with_7__44__000_files.mdwn create mode 100644 doc/forum/View_performance_with_7__44__000_files/comment_1_e45ea752100d09d29efb6136a722eab3._comment create mode 100644 doc/forum/View_performance_with_7__44__000_files/comment_2_b1942eed65e9b5c046095a094191a38c._comment create mode 100644 doc/forum/View_performance_with_7__44__000_files/comment_3_e6e19339c9d72cf8eaae32ef4269e850._comment create mode 100644 doc/forum/View_special_remote_information__63__.mdwn create mode 100644 doc/forum/View_special_remote_information__63__/comment_1_7c106e0679890f7279c73b5c52d648e2._comment create mode 100644 doc/forum/WARNING__58___linker__58__git-annex_has_text_relocations.mdwn create mode 100644 doc/forum/WARNING__58___linker__58__git-annex_has_text_relocations/comment_1_fee360353f0b46aab6ee7a902c0837bb._comment create mode 100644 doc/forum/Walkthrough_does_not_work_for_me__44___what_am_i_doing_wrong__63__.mdwn create mode 100644 doc/forum/Walkthrough_does_not_work_for_me__44___what_am_i_doing_wrong__63__/comment_1_cdac15fec6fc41d5487b7f653fa718a4._comment create mode 100644 doc/forum/Walkthrough_does_not_work_for_me__44___what_am_i_doing_wrong__63__/comment_2_82050b7dc367ca5968ab0306db9bd7e3._comment create mode 100644 doc/forum/Walkthrough_for_direct_mode__63__.mdwn create mode 100644 doc/forum/Want_to_stop_using_Git-Annex.mdwn create mode 100644 doc/forum/Want_to_stop_using_Git-Annex/comment_1_32e37515bd4f5d22ff9aedd3c9d98046._comment create mode 100644 doc/forum/Want_to_stop_using_Git-Annex/comment_2_e29e6d052ef3677ad7d5615721f3fe33._comment create mode 100644 doc/forum/Wanted___39__present__39___makes_sync_slow_on_thin_copy_of_large_annex..mdwn create mode 100644 doc/forum/Wanted_content_based_on_date_added.mdwn create mode 100644 doc/forum/Wanted_content_based_on_date_added/comment_1_af2a6e6cba4cdfe24e9ee2c819a007eb._comment create mode 100644 doc/forum/Warning__58___linker_on_each_command_Android_8.20210429.mdwn create mode 100644 doc/forum/Warning__58___linker_on_each_command_Android_8.20210429/comment_1_02c38a5dc1c2213dd5f12c4b7fb0c72e._comment create mode 100644 doc/forum/Warning__58___linker_on_each_command_Android_8.20210429/comment_2_02e5631245348bcef541360b5ca0e9e5._comment create mode 100644 doc/forum/Warning__58___linker_on_each_command_Android_8.20210429/comment_3_12c9af06c1473de6740b782ca42d6a5a._comment create mode 100644 doc/forum/Warning__58___linker_on_each_command_Android_8.20210429/comment_4_daa8522e3be6a0563d7cd107e79577b8._comment create mode 100644 doc/forum/Warning__58___linker_on_each_command_Android_8.20210429/comment_5_32c3cae8fb69c42747bb3ec4f3926dfb._comment create mode 100644 doc/forum/Warning__58___linker_on_each_command_Android_8.20210429/comment_6_95e16558f7010627ef4136043f63b937._comment create mode 100644 doc/forum/Warning__58___linker_on_each_command_Android_8.20210429/comment_7_733131f7608bc0309c034a954f297275._comment create mode 100644 doc/forum/Warning__58___linker_on_each_command_Android_8.20210429/comment_8_c73d26803fcc932edd7049efd0318aab._comment create mode 100644 doc/forum/Warning__58___linker_on_each_command_Android_8.20210429/comment_9_3eb65e0d204832d7d8700a85b3f4e51e._comment create mode 100644 doc/forum/Watch__47__assistant__47__webapp_documentation.mdwn create mode 100644 doc/forum/Watch__47__assistant__47__webapp_documentation/comment_1_adb377589dbae7fc91001df235c6b48e._comment create mode 100644 doc/forum/Way_to_add_file_in_other_directory_without_change__63__.mdwn create mode 100644 doc/forum/Way_to_add_file_in_other_directory_without_change__63__/comment_2_1c324fdc46fe9db3778bf21d9fbdd021._comment create mode 100644 doc/forum/Way_to_add_file_in_other_directory_without_change__63__/comment_2_9d18e0752ae4b1ded9611759fbe2eeec._comment create mode 100644 doc/forum/Way_to_add_file_in_other_directory_without_change__63__/comment_3_61841267c85651158652b20b137fb5fb._comment create mode 100644 doc/forum/Way_to_add_file_in_other_directory_without_change__63__/comment_4_f414a1d2c54eda4602d224a937d413b7._comment create mode 100644 doc/forum/Way_to_add_file_in_other_directory_without_change__63__/comment_5_8290c580d2788dbefb4e41cb9671eecb._comment create mode 100644 doc/forum/Way_to_copy_files___40__the_symbolic_links__41__.mdwn create mode 100644 doc/forum/Way_to_copy_files___40__the_symbolic_links__41__/comment_1_5f452eeb652e1bbec54cddc3735a6d4a._comment create mode 100644 doc/forum/Way_to_copy_files___40__the_symbolic_links__41__/comment_2_56617a9d760e7528d7b30ed479e5070a._comment create mode 100644 doc/forum/Way_to_copy_files___40__the_symbolic_links__41__/comment_3_8c8f09c8a916dd44d787a02f1570bd82._comment create mode 100644 doc/forum/Way_to_list_missing_files.mdwn create mode 100644 doc/forum/Way_to_list_missing_files/comment_1_d302a4b64cfca76e8af756018768ff08._comment create mode 100644 doc/forum/Web_app_on_server_without_X11__63__.mdwn create mode 100644 doc/forum/Web_app_on_server_without_X11__63__/comment_1_bee409ad389e5fb5f3e8de4b5c68278d._comment create mode 100644 doc/forum/Web_interface_to_git-annex__63__.mdwn create mode 100644 doc/forum/Web_interface_to_git-annex__63__/comment_1_371586edbeca15724121a5123bce66d6._comment create mode 100644 doc/forum/Webapp_not_watching_repos.mdwn create mode 100644 doc/forum/Webapp_not_watching_repos/comment_1_02735050122afdb6498d91b462d32767._comment create mode 100644 doc/forum/Webapp_not_watching_repos/comment_2_8ab2d4c18ddc99774e44c4f4401bfa57._comment create mode 100644 doc/forum/Webapp_not_watching_repos/comment_3_b448aa5a95a57a5228b361390e5fc838._comment create mode 100644 doc/forum/Webapp_on_ARM.mdwn create mode 100644 doc/forum/Webapp_on_ARM/comment_1_82ac40cef5b59070136527b8d81a5ce2._comment create mode 100644 doc/forum/Weird_behavior_with_OS_X_Finder_and_Preview.app.mdwn create mode 100644 doc/forum/Weird_behavior_with_OS_X_Finder_and_Preview.app/comment_1_8c8d86790a9d31518f9bb96a2d2dafee._comment create mode 100644 doc/forum/Weird_behavior_with_OS_X_Finder_and_Preview.app/comment_2_b538dc2c6f122b9ce5f7569de1b03f3e._comment create mode 100644 doc/forum/Weird_behavior_with_OS_X_Finder_and_Preview.app/comment_3_16e6724fa184392d4decbe0c4eb6efe6._comment create mode 100644 doc/forum/Weird_behavior_with_OS_X_Finder_and_Preview.app/comment_4_e514fe2d4d0ad6a10e281939e6ab4266._comment create mode 100644 doc/forum/Weird_behavior_with_OS_X_Finder_and_Preview.app/comment_5_e0eec765f72f7bf6f5a2a92c9b5dacad._comment create mode 100644 doc/forum/What__39__s_the_difference_between_encryption___38___gcrypt__63__.mdwn create mode 100644 doc/forum/What__39__s_the_difference_between_encryption___38___gcrypt__63__/comment_1_e4e9c6858fe905b17154e19cbe7ee2f5._comment create mode 100644 doc/forum/What__39__s_the_difference_between_encryption___38___gcrypt__63__/comment_2_359e52a73f236bce4e8e31e76436fba7._comment create mode 100644 doc/forum/What__39__s_the_difference_between_encryption___38___gcrypt__63__/comment_3_d43cf2928e2ebbf2793911e49cffd671._comment create mode 100644 doc/forum/What_am_I_doing_wrong_with_move__63__.mdwn create mode 100644 doc/forum/What_am_I_doing_wrong_with_move__63__/comment_1_a49d98426ef8dd17e6cca6b5fba5c9bf._comment create mode 100644 doc/forum/What_am_I_doing_wrong_with_move__63__/comment_2_eeae2f172b4481fcb08745fc28aa4d4e._comment create mode 100644 doc/forum/What_am_I_doing_wrong_with_move__63__/comment_3_f2770f86138d9b8489fbf9a25462b4ce._comment create mode 100644 doc/forum/What_am_I_doing_wrong_with_move__63__/comment_4_76aa27cdeefb1413baaa1c891ccd4d0d._comment create mode 100644 doc/forum/What_can_be_done_in_case_of_conflict.mdwn create mode 100644 doc/forum/What_can_be_done_in_case_of_conflict/comment_1_5ca86b099dfa08a50f656ea03bf1dcd9._comment create mode 100644 doc/forum/What_can_be_done_in_case_of_conflict/comment_2_69ee17959a92bb8359c0fd7b2a9d8dfb._comment create mode 100644 doc/forum/What_can_be_done_in_case_of_conflict/comment_3_017f4bac57a040c496e0c9d068dcfd9e._comment create mode 100644 doc/forum/What_does___34__disable__47__enable_expiry_after_X_days__34___mean__63__.mdwn create mode 100644 doc/forum/What_does___34__disable__47__enable_expiry_after_X_days__34___mean__63__/comment_1_face45c85e4713325bb23bbca7b07502._comment create mode 100644 doc/forum/What_does_a___91__RepoName__93___means__63__.mdwn create mode 100644 doc/forum/What_does_a___91__RepoName__93___means__63__/comment_1_9b1cb4beea0f67d7e7375e7ec189b802._comment create mode 100644 doc/forum/What_does_a___91__RepoName__93___means__63__/comment_2_a233086f100fec27cd26f4d39c25a385._comment create mode 100644 doc/forum/What_does_a___91__RepoName__93___means__63__/comment_3_4b62bf0c03fed86270a7873a8835dc7f._comment create mode 100644 doc/forum/What_happened_to_the_walkthrough__63__.mdwn create mode 100644 doc/forum/What_happened_to_the_walkthrough__63__/comment_1_70db0e3cfb1318e95671c23726e5541d._comment create mode 100644 doc/forum/What_happened_to_the_walkthrough__63__/comment_2_f9305dd19b9b5f35e66d915b8c30374b._comment create mode 100644 doc/forum/What_happens_after_terminated_add_of_huge_picture_folder__63__.mdwn create mode 100644 doc/forum/What_happens_after_terminated_add_of_huge_picture_folder__63__/comment_1_0ba60f9625ccda45d59adbd385f5fe98._comment create mode 100644 doc/forum/What_happens_after_terminated_add_of_huge_picture_folder__63__/comment_3_f0a2ec3d0b05d84fb05a1708313a6762._comment create mode 100644 doc/forum/What_happens_after_terminated_add_of_huge_picture_folder__63__/comment_3_f628f146a0c652f812c09f78bd574b77._comment create mode 100644 doc/forum/What_happens_when_in_the_git-annex_assistant_you___34__Add_another_local_repository__34___on_an_existing_repository__63__.mdwn create mode 100644 doc/forum/What_happens_when_in_the_git-annex_assistant_you___34__Add_another_local_repository__34___on_an_existing_repository__63__/comment_1_d844cfe5f9907a766e871b64d68966c2._comment create mode 100644 doc/forum/What_is_going_on_here__63__.mdwn create mode 100644 doc/forum/What_is_going_on_here__63__/comment_1_499bf04c32c86a747bd7c38d13f5de50._comment create mode 100644 doc/forum/What_is_going_on_here__63__/comment_2_0acd71ec48c69da62886e69afa496120._comment create mode 100644 doc/forum/What_is_going_on_here__63__/comment_3_a1221c0a0585b7e60643a8e4a50b282b._comment create mode 100644 doc/forum/What_is_going_on_here__63__/comment_4_a9fa5282774cc32ece9196b864435957._comment create mode 100644 doc/forum/What_is_going_on_here__63__/comment_5_8e35d10c208d0d1e93254a1a275fcba6._comment create mode 100644 doc/forum/What_is_going_on_here__63__/comment_6_536adad665f481a15d4096360d0106c1._comment create mode 100644 doc/forum/What_is_the_assistant_up_to__63__.mdwn create mode 100644 doc/forum/What_is_the_assistant_up_to__63__/comment_1_9baa0e54c19105c7cce946c19c587866._comment create mode 100644 doc/forum/What_is_the_best_way_to___34__git_annex_mv__34___file__63__.mdwn create mode 100644 doc/forum/What_is_the_best_way_to___34__git_annex_mv__34___file__63__/comment_1_02d305f307b4d2ff7acd98cb36508a2f._comment create mode 100644 doc/forum/What_is_the_best_way_to___34__git_annex_mv__34___file__63__/comment_2_9f7daf0a3e53b2cf64b2b64ca6fbfd9b._comment create mode 100644 doc/forum/What_is_the_best_way_to___34__git_annex_mv__34___file__63__/comment_3_06b137018b4c995afc8891032704c1d8._comment create mode 100644 doc/forum/What_is_the_best_way_to___34__git_annex_mv__34___file__63__/comment_4_138d9067831e26407404b993199d5a0f._comment create mode 100644 doc/forum/What_is_the_difference_between___34__local_computer__34___and___34__remote_server__34__.mdwn create mode 100644 doc/forum/What_is_the_difference_between___34__local_computer__34___and___34__remote_server__34__/comment_1_68734a118b7dc0c88ba67eca20953a55._comment create mode 100644 doc/forum/What_operations_are_safe_to_interrupt__63__.mdwn create mode 100644 doc/forum/What_operations_are_safe_to_interrupt__63__/comment_1_03d8ddc049cf073e5579ca829b352367._comment create mode 100644 doc/forum/What_operations_are_safe_to_interrupt__63__/comment_2_207435949b2674ea82390c66549873e5._comment create mode 100644 doc/forum/What_operations_are_safe_to_interrupt__63__/comment_4_279302a0f5bb0a8d8d87182e03c6b475._comment create mode 100644 doc/forum/What_operations_are_safe_to_interrupt__63__/comment_5_8d36d42e34f5deae04bfa83c568b89d5._comment create mode 100644 doc/forum/What_to_do_if_special_remotes_refuses_drops__63__.mdwn create mode 100644 doc/forum/What_to_do_if_special_remotes_refuses_drops__63__/comment_1_0b523b2b6c361346c36ad456bbbac645._comment create mode 100644 doc/forum/What_to_do_when_computer_is_lost_and_only_an_encrypted_ssh_remote_is_left__63__.mdwn create mode 100644 doc/forum/What_to_do_when_computer_is_lost_and_only_an_encrypted_ssh_remote_is_left__63__/comment_1_67ee446ca6d66e2c259ea771c2c9a2b2._comment create mode 100644 doc/forum/What_to_do_when_computer_is_lost_and_only_an_encrypted_ssh_remote_is_left__63__/comment_2_6d3cce3c8048e4aea8f0ed76473f6af1._comment create mode 100644 doc/forum/What_to_do_when_computer_is_lost_and_only_an_encrypted_ssh_remote_is_left__63__/comment_3_bd506e1ca7307660b3b9769eb97beddb._comment create mode 100644 doc/forum/When_--git-dir_is_not_in_--work-tree.mdwn create mode 100644 doc/forum/When_--git-dir_is_not_in_--work-tree/comment_1_0169812633d92bed8883e903e03056e3._comment create mode 100644 doc/forum/When_--git-dir_is_not_in_--work-tree/comment_2_0c101e5b017f56897599c2cbd37b1754._comment create mode 100644 doc/forum/When_to_reuse_UUIDs_and_avoiding_UUID_clutter.mdwn create mode 100644 doc/forum/Where_are_my_remote_ssh_files__63__.mdwn create mode 100644 doc/forum/Where_did_my_files_go__63__.mdwn create mode 100644 doc/forum/Where_did_my_files_go__63__/comment_1_3ff3ffa95eb2745ff9ec2a903e071d97._comment create mode 100644 doc/forum/Where_did_my_files_go__63__/comment_2_9d902e66ca19b3332f4454f694d4a12e._comment create mode 100644 doc/forum/Where_is_the_S3_config__63__.mdwn create mode 100644 doc/forum/Where_is_the_S3_config__63__/comment_1_63009ad122cfafc9682e06f984eaefe1._comment create mode 100644 doc/forum/Where_is_the_S3_config__63__/comment_2_61403be4cc347fecedd8b19d6604e6d3._comment create mode 100644 doc/forum/Where_is_the_content__63__.mdwn create mode 100644 doc/forum/Where_is_the_content__63__/comment_1_812e1cf740cbfa449ab3ef4dd5f2df08._comment create mode 100644 doc/forum/Where_is_the_content__63__/comment_2_5e2cfdfab6c4f84fe7a19447b417b5a7._comment create mode 100644 doc/forum/Where_is_the_content__63__/comment_3_bd4cbc8f256a94ffde4f57d2c406a9ec._comment create mode 100644 doc/forum/Where_is_the_content__63__/comment_4_a36b35d47472b5db779b0489bf3d4893._comment create mode 100644 doc/forum/Which_branches_are___34__required__34__.mdwn create mode 100644 doc/forum/Which_branches_are___34__required__34__/comment_1_78d9ac05c66b7ccec031e0c57095af39._comment create mode 100644 doc/forum/Which_cloud_providers_are_supported__63___.mdwn create mode 100644 doc/forum/Which_cloud_providers_are_supported__63___/comment_1_1f9398840144e0452a2fed9336046547._comment create mode 100644 doc/forum/Why_are_ignored_files_being_deleted__63__.mdwn create mode 100644 doc/forum/Why_are_ignored_files_being_deleted__63__/comment_1_3081bda5bb600fc564185499ddfb5cf9._comment create mode 100644 doc/forum/Why_are_ignored_files_being_deleted__63__/comment_2_178aa574855a3bfffab4b21f90a84092._comment create mode 100644 doc/forum/Why_are_new_repos_v5__63___Should_I_be_concerned__63__.mdwn create mode 100644 doc/forum/Why_are_new_repos_v5__63___Should_I_be_concerned__63__/comment_1_b7fc905780f941314c99b94a87e0438a._comment create mode 100644 doc/forum/Why_are_we_stopping_at_a_duplicate__63__.mdwn create mode 100644 doc/forum/Why_are_we_stopping_at_a_duplicate__63__/comment_1_dd3b610032cd3091effdb3f0828f45a8._comment create mode 100644 doc/forum/Why_can__39__t_encryption_be_enabled_for_removable_drives__63__.mdwn create mode 100644 doc/forum/Why_can__39__t_encryption_be_enabled_for_removable_drives__63__/comment_1_4341898d5ae4f09a5b06d24f5fe6192d._comment create mode 100644 doc/forum/Why_does_git_annex_does_not_want_that_file__63__.mdwn create mode 100644 doc/forum/Why_does_git_annex_does_not_want_that_file__63__/comment_1_44cd6ca1f7215395e19ce654513197a9._comment create mode 100644 doc/forum/Why_does_the_bup_remote_use___126____47__.bup__63__.mdwn create mode 100644 doc/forum/Why_does_the_bup_remote_use___126____47__.bup__63__/comment_1_da9c7c0e93aefc2da7409de5b138d86f._comment create mode 100644 doc/forum/Why_git_commit_fails_from_within_a_newly_git-annexed_subdir__63__.mdwn create mode 100644 doc/forum/Why_git_commit_fails_from_within_a_newly_git-annexed_subdir__63__/comment_10_abae8a95b60f17052a5e2ac30a7ece32._comment create mode 100644 doc/forum/Why_git_commit_fails_from_within_a_newly_git-annexed_subdir__63__/comment_1_dfd69ac96065f8146f5ea87b957cca6e._comment create mode 100644 doc/forum/Why_git_commit_fails_from_within_a_newly_git-annexed_subdir__63__/comment_2_8d36f559d7f8b61f5633f0d24b424cec._comment create mode 100644 doc/forum/Why_git_commit_fails_from_within_a_newly_git-annexed_subdir__63__/comment_3_a318582d30f5483f3738e8f0f1a2e1df._comment create mode 100644 doc/forum/Why_git_commit_fails_from_within_a_newly_git-annexed_subdir__63__/comment_4_bc2e255f8732f6ec02e90a6623ffc8af._comment create mode 100644 doc/forum/Why_git_commit_fails_from_within_a_newly_git-annexed_subdir__63__/comment_5_691dc07b192f077f50611544d488b394._comment create mode 100644 doc/forum/Why_git_commit_fails_from_within_a_newly_git-annexed_subdir__63__/comment_6_71d7a08600dcba07dd895ddf6ad1331a._comment create mode 100644 doc/forum/Why_git_commit_fails_from_within_a_newly_git-annexed_subdir__63__/comment_7_a5d60323c2c6b2d263514b33ad774aa9._comment create mode 100644 doc/forum/Why_git_commit_fails_from_within_a_newly_git-annexed_subdir__63__/comment_8_83e52bd3d66ce87ba7d2913d21c76b08._comment create mode 100644 doc/forum/Why_git_commit_fails_from_within_a_newly_git-annexed_subdir__63__/comment_9_0bd122e2e664d29dca027719721b1523._comment create mode 100644 doc/forum/Why_is_git_annex_status_slow__63__.mdwn create mode 100644 doc/forum/Why_is_git_annex_status_slow__63__/comment_1_a5139c5a9fc94486cf62fc9a9fa9f8d9._comment create mode 100644 doc/forum/Why_is_git_annex_status_slow__63__/comment_2_2f61c2cdf9d1ffd298fd906207012818._comment create mode 100644 doc/forum/Why_is_git_annex_status_slow__63__/comment_3_8d9e5a1aef2648d7a844623e6237d551._comment create mode 100644 doc/forum/Will_git-annex_solve_my_problem__63__.mdwn create mode 100644 doc/forum/Will_git-annex_solve_my_problem__63__/comment_1_35acbdd1a7727df204d776c2e8f02b53._comment create mode 100644 doc/forum/Will_git-annex_solve_my_problem__63__/comment_2_230256c19ac139dea207d89c06f70782._comment create mode 100644 doc/forum/Will_git_annex_work_on_a_FAT32_formatted_key__63__.mdwn create mode 100644 doc/forum/Will_git_annex_work_on_a_FAT32_formatted_key__63__/comment_1_426482e6eb3a27687a48f24f6ef2332f._comment create mode 100644 doc/forum/Will_git_annex_work_on_a_FAT32_formatted_key__63__/comment_2_af4f8b52526d8bea2904c95406fd2796._comment create mode 100644 doc/forum/Windows_-_You_don__39__t_have_access.mdwn create mode 100644 doc/forum/Windows_-_You_don__39__t_have_access/comment_1_5c1da63922cc71483c9519e8670d532b._comment create mode 100644 doc/forum/Windows_-_You_don__39__t_have_access/comment_2_aa6ea60465df9fab7990bd6f510b74c5._comment create mode 100644 doc/forum/Windows_-_You_don__39__t_have_access/comment_3_593a8a54fa80258d5048f5c061992664._comment create mode 100644 doc/forum/Windows_-_You_don__39__t_have_access/comment_4_aa28602eb0b7fa7103eaf90dc1d5cf8f._comment create mode 100644 doc/forum/Windows_-_You_don__39__t_have_access/comment_5_f9041e48b911dbdd37ad3c1bbc801709._comment create mode 100644 doc/forum/Windows_-_You_don__39__t_have_access/comment_6_7656eb72bb9e39db59092557c57a2489._comment create mode 100644 doc/forum/Windows_-_gpg_fails_with_shared_encryption.mdwn create mode 100644 doc/forum/Windows_-_gpg_fails_with_shared_encryption/comment_1_708da81b0678576a240ce7a388806e07._comment create mode 100644 doc/forum/Windows_-_gpg_fails_with_shared_encryption/comment_2_9f5d0e8d0c6eff548318b54797cefd09._comment create mode 100644 doc/forum/Windows_S3_host_issue.mdwn create mode 100644 doc/forum/Windows_S3_host_issue/comment_1_8c0a1e84713a04a25fdc1f74919d34aa._comment create mode 100644 doc/forum/Windows_S3_host_issue/comment_2_06ecc76797c430b27a2e24776761d043._comment create mode 100644 doc/forum/Windows_S3_host_issue/comment_3_1715557daa15b9e9e17b4850141e62af._comment create mode 100644 doc/forum/Windows_eol_issues.mdwn create mode 100644 doc/forum/Windows_eol_issues/comment_1_72e4c3a200e3fceb2afd4df563eaa5d4._comment create mode 100644 doc/forum/Windows_eol_issues/comment_2_77383b959d576c7930c726c55097c964._comment create mode 100644 doc/forum/Windows_eol_issues/comment_3_926b386f5ca59f1c5232cf5cba69e12a._comment create mode 100644 doc/forum/Windows_eol_issues/comment_4_dc470ae359ee4ce017770a89441a8b65._comment create mode 100644 doc/forum/Windows_eol_issues/comment_5_e711bdfcee4ec9a2860662e8c65a9c0f._comment create mode 100644 doc/forum/Windows_eol_issues/comment_6_62f748e40324bc988366e19088b33295._comment create mode 100644 doc/forum/Windows_eol_issues/comment_7_f9b71ea2158c02dfa8a7c59891aea679._comment create mode 100644 doc/forum/Windows_error__58_____34__git__58_____39__annex__39___is_not_a_git_command.__34__.mdwn create mode 100644 doc/forum/Windows_error__58_____34__git__58_____39__annex__39___is_not_a_git_command.__34__/comment_1_b051dc30bf5a0fc9f5710c664f487ea9._comment create mode 100644 doc/forum/Windows_error__58_____34__git__58_____39__annex__39___is_not_a_git_command.__34__/comment_2_8775a1483b29e2cc8f0456473c24e51e._comment create mode 100644 doc/forum/Windows_error__58_____34__git__58_____39__annex__39___is_not_a_git_command.__34__/comment_3_cbaa3e0fa4e2347332b3929411f60d1d._comment create mode 100644 doc/forum/Windows_error__58_____34__git__58_____39__annex__39___is_not_a_git_command.__34__/comment_4_3dc3cc824256b1f7530c7f516b0abbec._comment create mode 100644 doc/forum/Windows_installation_notes.mdwn create mode 100644 doc/forum/Windows_installation_notes/comment_1_54c253ab61fea4f5aaefa04bb078c7b0._comment create mode 100644 doc/forum/Windows_installation_notes/comment_2_c8c2744e30f2950d9830936d2bd51617._comment create mode 100644 doc/forum/Windows_support.mdwn create mode 100644 doc/forum/Windows_support/comment_1_23fa9aa3b00940a1c1b3876c35eef019._comment create mode 100644 doc/forum/Windows_usage_instructions.mdwn create mode 100644 doc/forum/Windows_usage_instructions/comment_1_d43dbd9406da3b9747b147715eca94ac._comment create mode 100644 doc/forum/Wishlist__58___Bittorrent-like_transfers.mdwn create mode 100644 doc/forum/Wishlist__58___Bittorrent-like_transfers/comment_1_13544d54fb0418af4ca9200cdb045d91._comment create mode 100644 doc/forum/Wishlist__58___Bittorrent-like_transfers/comment_2_9a7dad35bf80c684ad97892420d7370c._comment create mode 100644 doc/forum/Wishlist__58___Bittorrent-like_transfers/comment_3_e5de748bc5da12a4a01e08cde2407dd1._comment create mode 100644 doc/forum/Wishlist__58___Bittorrent-like_transfers/comment_4_e51530178f1e034c0fdd5c9aa9945567._comment create mode 100644 doc/forum/Wishlist__58___Bittorrent-like_transfers/comment_5_81ea9c129d8c02097f09ef8c68f1bb11._comment create mode 100644 doc/forum/Wishlist__58___Bittorrent-like_transfers/comment_6_3b5798414f89686526da3dfa72c0c4f2._comment create mode 100644 doc/forum/Wishlist__58___Don__39__t_make_files_readonly.mdwn create mode 100644 doc/forum/Wishlist__58___Don__39__t_make_files_readonly/comment_1_7148527961e2d27793810966588c8d35._comment create mode 100644 doc/forum/Wishlist__58___Is_it_possible_to___34__unlock__34___files_without_copying_the_file_data__63__.mdwn create mode 100644 doc/forum/Wishlist__58___Is_it_possible_to___34__unlock__34___files_without_copying_the_file_data__63__/comment_1_1cf4ab29dfa2cff59b86305fc0018251._comment create mode 100644 doc/forum/Wishlist__58___Is_it_possible_to___34__unlock__34___files_without_copying_the_file_data__63__/comment_2_f5ebb7f43dcef861ecc13373fb1e263f._comment create mode 100644 doc/forum/Wishlist__58___Ways_of_selecting_files_based_on_meta-information.mdwn create mode 100644 doc/forum/Wishlist__58___Ways_of_selecting_files_based_on_meta-information/comment_1_818f38aa988177d3a9415055e084f0fb._comment create mode 100644 doc/forum/Wishlist__58___Ways_of_selecting_files_based_on_meta-information/comment_2_97e2ed48bd552d02918c4f98f963e6e1._comment create mode 100644 doc/forum/Wishlist__58___automatic_reinject.mdwn create mode 100644 doc/forum/Wishlist__58___automatic_reinject/comment_1_6bf093f228353130e80e7a30bcf0075d._comment create mode 100644 doc/forum/Wishlist__58___getting_the_disk_used_by_a_subtree_of_files.mdwn create mode 100644 doc/forum/Wishlist__58___getting_the_disk_used_by_a_subtree_of_files/comment_1_7abb1155081a23ce4829ee69b2064541._comment create mode 100644 doc/forum/Wishlist__58___getting_the_disk_used_by_a_subtree_of_files/comment_2_b4c6ebada7526263e04c70eac312fda9._comment create mode 100644 doc/forum/Wishlist__58___getting_the_disk_used_by_a_subtree_of_files/comment_3_ded71b270b94617a8ebb3a713d46a274._comment create mode 100644 doc/forum/Wishlist__58___logging_to_file_when_running_as_a_daemon___40__for_the_assistant__41__.mdwn create mode 100644 doc/forum/Wishlist__58___logging_to_file_when_running_as_a_daemon___40__for_the_assistant__41__/comment_1_42aa2b61b880f4048d874210212aa63b._comment create mode 100644 doc/forum/Wishlist__58___logging_to_file_when_running_as_a_daemon___40__for_the_assistant__41__/comment_2_3e201039fa0e611554171ee30e69a414._comment create mode 100644 doc/forum/Wishlist__58___logging_to_file_when_running_as_a_daemon___40__for_the_assistant__41__/comment_3_d1074724c44f3296cb438b2d526d8728._comment create mode 100644 doc/forum/Wishlist__58___mark_remotes_offline.mdwn create mode 100644 doc/forum/Wishlist__58___mark_remotes_offline/comment_1_9e3901f0123abb66034cce95cc5a941a._comment create mode 100644 doc/forum/Wishlist__58___mark_remotes_offline/comment_2_d10e3d90cf421ae425e64ab266ea811b._comment create mode 100644 doc/forum/Wishlist__58___options_for_syncing_meta-data_and_data.mdwn create mode 100644 doc/forum/Wishlist__58___rename_files__47__dirs_w__47___special_characters_if_filesystem_is_FAT.mdwn create mode 100644 doc/forum/Wishlist__58___rename_files__47__dirs_w__47___special_characters_if_filesystem_is_FAT/comment_1_5d33bcbd862537f53edd91dcff2b8977._comment create mode 100644 doc/forum/Workarounds_for_git-annex.mdwn create mode 100644 doc/forum/Workflow_for_adding_files.mdwn create mode 100644 doc/forum/Workflow_for_adding_files/comment_1_a60dae97db827bc641d6256d1f382b5f._comment create mode 100644 doc/forum/Workflow_for_adding_files/comment_2_28dd15ac50f79fb07bacf8b8326c7edc._comment create mode 100644 doc/forum/Workflow_for_using_git-annex_only_on_external_drives.mdwn create mode 100644 doc/forum/Workflow_for_using_git-annex_only_on_external_drives/comment_1_c3c495efb7cdd242b51cc7fa7719d95f._comment create mode 100644 doc/forum/Workflow_for_using_git-annex_only_on_external_drives/comment_2_f29471761e95b25e35e4cb09ad89737a._comment create mode 100644 doc/forum/Writing_a_book_about_git-annex__58___I_need_a_sparring_partner.mdwn create mode 100644 doc/forum/Writing_a_book_about_git-annex__58___I_need_a_sparring_partner/comment_1_ee783a968a5948e2f50bd2d090a2238b._comment create mode 100644 doc/forum/Writing_a_book_about_git-annex__58___I_need_a_sparring_partner/comment_2_259b67a887dd6aa327b752f455c24bff._comment create mode 100644 doc/forum/Writing_a_book_about_git-annex__58___I_need_a_sparring_partner/comment_3_a072a5c8f0798094d9ab0b7dc6c34f98._comment create mode 100644 doc/forum/WrongRequestBodyStreamSize_exporting_large_file_to_S3.mdwn create mode 100644 doc/forum/WrongRequestBodyStreamSize_exporting_large_file_to_S3/comment_1_8b066ad9628073a3ae045087b4ea79b5._comment create mode 100644 doc/forum/WrongRequestBodyStreamSize_exporting_large_file_to_S3/comment_2_c9eff9a83ea5ee71cbe87022be9d0875._comment create mode 100644 doc/forum/Wrong_symlink_target_on_usb_drive.mdwn create mode 100644 doc/forum/Wrong_symlink_target_on_usb_drive/comment_1_9a50df886c0c23ee6f5586bd9f6b61c3._comment create mode 100644 doc/forum/Wrong_symlink_target_on_usb_drive/comment_2_75df13154d3ea662119e9d701a0d9c97._comment create mode 100644 doc/forum/Wrong_symlink_target_on_usb_drive/comment_3_7f2fb4e7f0c0db9f9d9cbb637f02c9ff._comment create mode 100644 doc/forum/Wrong_symlink_target_on_usb_drive/comment_4_f6ee6bfd5d82f0925f0e174b4c75e592._comment create mode 100644 doc/forum/Wrong_symlink_target_on_usb_drive/comment_5_e5a152cef3c48ef05cb183907377f128._comment create mode 100644 doc/forum/Wrong_symlink_target_on_usb_drive/comment_6_be59fcc5633b352eefe993871df1ec4a._comment create mode 100644 doc/forum/Wrong_symlink_target_on_usb_drive/comment_7_64e1cdf144a17319831a58b04b22b7ea._comment create mode 100644 doc/forum/XBMC__44___NFS___38___git-annex_.mdwn create mode 100644 doc/forum/XBMC__44___NFS___38___git-annex_/comment_1_86480f31d410e903766f82e6ecf83e1c._comment create mode 100644 doc/forum/XBMC__44___NFS___38___git-annex_/comment_2_d8ed4dd51d3050db691a8abdec24cd42._comment create mode 100644 doc/forum/XBMC__44___NFS___38___git-annex_/comment_3_42b80ee51ce25775bf4532f53a8ecfe3._comment create mode 100644 doc/forum/XBMC__44___NFS___38___git-annex_/comment_4_01767f3f864954cf8080274e206da9d4._comment create mode 100644 doc/forum/XMPP_authentication_failure.mdwn create mode 100644 doc/forum/XMPP_authentication_failure/comment_1_19c7c3aa79d209d613d2e061e3129690._comment create mode 100644 doc/forum/XMPP_authentication_failure/comment_2_870059fed451e8377e5d382464ecc34b._comment create mode 100644 doc/forum/XMPP_authentication_failure/comment_3_1a7ff955e9173f13d10b75f203792384._comment create mode 100644 doc/forum/XMPP_authentication_failure/comment_4_d59031ebc0dd3abc1f4c96878328362c._comment create mode 100644 doc/forum/XMPP_authentication_failure/comment_5_c37ef477bef7efdb79dd05dce90dfde6._comment create mode 100644 doc/forum/XMPP_authentication_failure/comment_6_48cabea4c2caf5b3bd854df3aaa17d3d._comment create mode 100644 doc/forum/XMPP_authentication_failure/comment_7_14cd9b67806db93c3af055d88c9a910a._comment create mode 100644 doc/forum/XMPP_authentication_failure/comment_8_151d3fd7d3cceb30fd20a8f3bd54036c._comment create mode 100644 doc/forum/XMPP_authentication_failure/comment_9_fbb9eba65fbb72201f08511945fbcf8c._comment create mode 100644 doc/forum/XMPP_email_setup_says_wrong_password_but_it__39__s_correct._Can_I_provide_some_kind_of_debug_data__63__.mdwn create mode 100644 doc/forum/XMPP_email_setup_says_wrong_password_but_it__39__s_correct._Can_I_provide_some_kind_of_debug_data__63__/comment_1_1ba0735141fc6a21ac15913f4cacefae._comment create mode 100644 doc/forum/XMPP_email_setup_says_wrong_password_but_it__39__s_correct._Can_I_provide_some_kind_of_debug_data__63__/comment_2_16994dc86b87592fc62799e2d206d172._comment create mode 100644 doc/forum/XMPP_email_setup_says_wrong_password_but_it__39__s_correct._Can_I_provide_some_kind_of_debug_data__63__/comment_3_6afd424edc4095b8f71b136de2a9e64d._comment create mode 100644 doc/forum/XMPP_email_setup_says_wrong_password_but_it__39__s_correct._Can_I_provide_some_kind_of_debug_data__63__/comment_4_1381b6a927410642c6a93aa8354be791._comment create mode 100644 doc/forum/XMPP_email_setup_says_wrong_password_but_it__39__s_correct._Can_I_provide_some_kind_of_debug_data__63__/comment_5_c5b33c7a8aa8e6d0f9349510dac2366d._comment create mode 100644 doc/forum/XMPP_email_setup_says_wrong_password_but_it__39__s_correct._Can_I_provide_some_kind_of_debug_data__63__/comment_6_9913d2983ba2744ed24911f74988e4c7._comment create mode 100644 doc/forum/XMPP_email_setup_says_wrong_password_but_it__39__s_correct._Can_I_provide_some_kind_of_debug_data__63__/comment_7_ad6f385a2b95803eb9d81dfe76359551._comment create mode 100644 doc/forum/XMPP_problem_behind_router.mdwn create mode 100644 doc/forum/XMPP_problem_behind_router/comment_1_25a7f8dc5cf14cda4d76b2f8c6ca77d5._comment create mode 100644 doc/forum/XMPP_problem_behind_router/comment_2_3186ebe32c30764b9fd53625dd3e4eda._comment create mode 100644 doc/forum/XMPP_problem_behind_router/comment_3_7fa8fe8cb92993c935ba2dbfb2aef728._comment create mode 100644 doc/forum/XMPP_problem_behind_router/comment_4_6497ca72904dfdefe4e02f8a55127a8e._comment create mode 100644 doc/forum/_Does_git_annex_find___40____38___friends__41___batch_queries_to_the_location_log__63__.mdwn create mode 100644 doc/forum/_Does_git_annex_find___40____38___friends__41___batch_queries_to_the_location_log__63__/comment_1_01cbfc513c790faef3a3ede5315d3589._comment create mode 100644 doc/forum/_Does_git_annex_find___40____38___friends__41___batch_queries_to_the_location_log__63__/comment_2_fe28dfb360caa12d5d5bc186def3eb45._comment create mode 100644 doc/forum/_Does_git_annex_find___40____38___friends__41___batch_queries_to_the_location_log__63__/comment_3_9bb30ab62febe4ef63bed49f831a473a._comment create mode 100644 doc/forum/_Does_git_annex_find___40____38___friends__41___batch_queries_to_the_location_log__63__/comment_4_7832f0347a41b8204538c01b72487803._comment create mode 100644 doc/forum/__171__Locking__187___files_until_synced.mdwn create mode 100644 doc/forum/__171__Locking__187___files_until_synced/comment_1_8bf59f47fee0a8d5741fe209b5899863._comment create mode 100644 doc/forum/__171__Locking__187___files_until_synced/comment_2_0c683547a6178e4303f0b1ed1f5605a5._comment create mode 100644 doc/forum/__34__Lost__34___data__63___Maybe_a_bug__63__.mdwn create mode 100644 doc/forum/__34__Lost__34___data__63___Maybe_a_bug__63__/comment_1_52e4453432184524d84d88f6382cac9d._comment create mode 100644 doc/forum/__34__Lost__34___data__63___Maybe_a_bug__63__/comment_2_4d80b96e788d233706fa8f3e363d2f76._comment create mode 100644 doc/forum/__34__Pairing__34___more_than_two_computers.mdwn create mode 100644 doc/forum/__34__Pairing__34___more_than_two_computers/comment_1_80f7a4bb3c66b11e566043407b611bbf._comment create mode 100644 doc/forum/__34__Preseeding__34___a_special_remote.mdwn create mode 100644 doc/forum/__34__Preseeding__34___a_special_remote/comment_1_b0c46d0eba900d0f6169a2c698d7a222._comment create mode 100644 doc/forum/__34__Preseeding__34___a_special_remote/comment_2_5e63f5e6f45c11cc86b293ce8acad77f._comment create mode 100644 doc/forum/__34__Scanning_for_files_to_transfer__34__.mdwn create mode 100644 doc/forum/__34__Scanning_for_files_to_transfer__34__/comment_1_4fa6d0d5264707886e1e9b5184090386._comment create mode 100644 doc/forum/__34__best__34___portable_filesystem_for_external_drive__63__.mdwn create mode 100644 doc/forum/__34__best__34___portable_filesystem_for_external_drive__63__/comment_1_31e5e55e9f8f391309b16c6591bb0bb0._comment create mode 100644 doc/forum/__34__best__34___portable_filesystem_for_external_drive__63__/comment_2_abb716dc8b39e1b20d8725d83a7cc662._comment create mode 100644 doc/forum/__34__du__34___equivalent_on_an_annex__63__.mdwn create mode 100644 doc/forum/__34__du__34___equivalent_on_an_annex__63__/comment_10_a80eccce0bdb33748ab1ccba9b88a65f._comment create mode 100644 doc/forum/__34__du__34___equivalent_on_an_annex__63__/comment_11_e3f82edf70d28f00d30cfd98f189cd86._comment create mode 100644 doc/forum/__34__du__34___equivalent_on_an_annex__63__/comment_12_041ae920e2e6fd83967dc98646452fa7._comment create mode 100644 doc/forum/__34__du__34___equivalent_on_an_annex__63__/comment_1_a41bd02361aa961e5285aeaf1ea062be._comment create mode 100644 doc/forum/__34__du__34___equivalent_on_an_annex__63__/comment_2_28ba62a546f5cc8f416491423d743d8a._comment create mode 100644 doc/forum/__34__du__34___equivalent_on_an_annex__63__/comment_3_8d97f40c1d14b7230f3656a00a99cf80._comment create mode 100644 doc/forum/__34__du__34___equivalent_on_an_annex__63__/comment_4_baa8fbbdd5c449a0dc2bb622cb4a47ce._comment create mode 100644 doc/forum/__34__du__34___equivalent_on_an_annex__63__/comment_5_2ee6cbbfe54a2e7b6e8eb539c18e663d._comment create mode 100644 doc/forum/__34__du__34___equivalent_on_an_annex__63__/comment_6_48f6a2761a34b7f991325f1d24e2c5ff._comment create mode 100644 doc/forum/__34__du__34___equivalent_on_an_annex__63__/comment_7_d632baff41b8582f1a79bc5018c68545._comment create mode 100644 doc/forum/__34__du__34___equivalent_on_an_annex__63__/comment_8_6a51c22d9893fa5b1503f5a14b1eb8ce._comment create mode 100644 doc/forum/__34__du__34___equivalent_on_an_annex__63__/comment_9_a2bda4c74ef09a58709c0c5f6ee1b726._comment create mode 100644 doc/forum/__34__git_add__34___vs___34__git_annex_add__34___in_v6.mdwn create mode 100644 doc/forum/__34__git_add__34___vs___34__git_annex_add__34___in_v6/comment_1_285032a01ca754c539ce0634823db23c._comment create mode 100644 doc/forum/__34__git_add__34___vs___34__git_annex_add__34___in_v6/comment_2_93eec60060bc7bca8dd1633b670f9a53._comment create mode 100644 doc/forum/__34__git_annex_assistant_--stop__34___doesn__39__t_work_in_OSX_10.11.4.mdwn create mode 100644 doc/forum/__34__git_annex_assistant_--stop__34___doesn__39__t_work_in_OSX_10.11.4/comment_1_34bd938e8cd0cba6ec48020932858485._comment create mode 100644 doc/forum/__34__git_annex_assistant_--stop__34___doesn__39__t_work_in_OSX_10.11.4/comment_2_3ec07e7f0e713e6fa925abb99c646bc7._comment create mode 100644 doc/forum/__34__git_annex_assistant_--stop__34___doesn__39__t_work_in_OSX_10.11.4/comment_3_3dce000eb6db22e07ed2f53c4f62a1e0._comment create mode 100644 doc/forum/__34__git_annex_assistant_--stop__34___doesn__39__t_work_in_OSX_10.11.4/comment_4_5bed42e467859d2310f3da35e55acd38._comment create mode 100644 doc/forum/__34__git_annex_assistant_--stop__34___doesn__39__t_work_in_OSX_10.11.4/comment_5_5cb379490b0e85c24bff48db8201c7d4._comment create mode 100644 doc/forum/__34__git_annex_assistant_--stop__34___doesn__39__t_work_in_OSX_10.11.4/comment_6_46eb0f4dcbccea5140a26dca36c6f1d1._comment create mode 100644 doc/forum/__34__git_annex_copy_--to___60__REMOTE__62___.__34___doesn__39__t_send_it_to_working_directory.mdwn create mode 100644 doc/forum/__34__git_annex_copy_--to___60__REMOTE__62___.__34___doesn__39__t_send_it_to_working_directory/comment_1_0c0a5999a92bf5880f2113177dc67cc2._comment create mode 100644 doc/forum/__34__git_annex_copy_--to___60__REMOTE__62___.__34___doesn__39__t_send_it_to_working_directory/comment_2_c18083d9054f66f0bd51d63452af07eb._comment create mode 100644 doc/forum/__34__git_annex_drop__34___freezes_while___34__locking_origin...__34__.mdwn create mode 100644 doc/forum/__34__git_annex_drop__34___freezes_while___34__locking_origin...__34__/comment_1_09fbe4362fea8f2a53a1f955b0519019._comment create mode 100644 doc/forum/__34__git_annex_get__34___on_windows_fails_with_rsync_error.mdwn create mode 100644 doc/forum/__34__git_annex_get__34___on_windows_fails_with_rsync_error/comment_1_a1a881d7b0f0c32b1bfdd3bc5ee4dd18._comment create mode 100644 doc/forum/__34__git_annex_get__34___on_windows_fails_with_rsync_error/comment_3_50d0b68fcf0e239037a5d7950595b1d6._comment create mode 100644 doc/forum/__34__git_annex_get__34___on_windows_fails_with_rsync_error/comment_3_9bc58c6c2333655870c5e42138f9749e._comment create mode 100644 doc/forum/__34__git_annex_get__34___on_windows_fails_with_rsync_error/comment_4_958e887dd83b8b636df2d81ade0dbbf1._comment create mode 100644 doc/forum/__34__git_annex_get__34___on_windows_fails_with_rsync_error/comment_5_24782f9b1012a2935466ac358acea97b._comment create mode 100644 doc/forum/__34__git_annex_lock__34___very_slow_for_big_repo.mdwn create mode 100644 doc/forum/__34__git_annex_lock__34___very_slow_for_big_repo/comment_1_044f1c5e5f7a939315c28087495a8ba8._comment create mode 100644 doc/forum/__34__git_annex_lock__34___very_slow_for_big_repo/comment_2_e854b93415d5ab80eda8e3be3b145ec2._comment create mode 100644 doc/forum/__34__git_annex_lock__34___very_slow_for_big_repo/comment_3_95c110500bc54013bc1969c1a9c8f842._comment create mode 100644 doc/forum/__34__git_annex_lock__34___very_slow_for_big_repo/comment_4_a4fd212cb066cd53d0d66eb09f3b39a8._comment create mode 100644 doc/forum/__34__git_annex_sync_--content__34___with_special_remote_of_type___34__directory__34__.mdwn create mode 100644 doc/forum/__34__git_annex_sync_--content__34___with_special_remote_of_type___34__directory__34__/comment_1_c51363e109bcc5cd1df40c5d0ec993b3._comment create mode 100644 doc/forum/__34__git_annex_sync_--content__34___with_special_remote_of_type___34__directory__34__/comment_2_be52a6d21df4732c9f83463bb5e6f612._comment create mode 100644 doc/forum/__34__git_annex_sync__34___synced_after_8_hours.mdwn create mode 100644 doc/forum/__34__git_annex_sync__34___synced_after_8_hours/comment_1_e815ac48a17cc4296473d61e712d95e0._comment create mode 100644 doc/forum/__34__git_annex_sync__34___synced_after_8_hours/comment_2_d13a0af48b8831c81276a0b2c8e25303._comment create mode 100644 doc/forum/__34__git_annex_sync__34___synced_after_8_hours/comment_3_c50b62e5a84b861117a4405c2a2f5cfb._comment create mode 100644 doc/forum/__34__git_annex_sync__34___synced_after_8_hours/comment_4_0051e83196945b97e2f3ed14a58daaea._comment create mode 100644 doc/forum/__34__git_annex_sync__34___synced_after_8_hours/comment_5_26de32ea240621e23717c55866ad9764._comment create mode 100644 doc/forum/__34__git_annex_sync__34___synced_after_8_hours/comment_6_0714eca58513f1059fc246ee152078e7._comment create mode 100644 doc/forum/__34__git_annex_unused__34___doesn__39__t_find_unused_files_after_git_history_was_rewritten.mdwn create mode 100644 doc/forum/__34__git_annex_unused__34___doesn__39__t_find_unused_files_after_git_history_was_rewritten/comment_1_8f2ced0b9039968f485943e1525dcf6e._comment create mode 100644 doc/forum/__34__next_time_Im_online_I_would_like_to_have_file_x_y_z__34__.mdwn create mode 100644 doc/forum/__34__next_time_Im_online_I_would_like_to_have_file_x_y_z__34__/comment_1_bfeb1446dee4d2f52ef25fabfb8cc8f6._comment create mode 100644 doc/forum/__34__next_time_Im_online_I_would_like_to_have_file_x_y_z__34__/comment_2_e60f2bbc1c058993472fd920edbc75fc._comment create mode 100644 doc/forum/__34__permission_denied__34___in_fsck_on_shared_repo.mdwn create mode 100644 doc/forum/__34__permission_denied__34___in_fsck_on_shared_repo/comment_1_3a5202ef2116ebb5559b6f4d920755fc._comment create mode 100644 doc/forum/__34__permission_denied__34___in_fsck_on_shared_repo/comment_2_86663eeb75b0477f53c45f26c8e4b051._comment create mode 100644 doc/forum/__34__permission_denied__34___in_fsck_on_shared_repo/comment_3_c336b2b07cd006d378e5be9639ff17ec._comment create mode 100644 doc/forum/__34__permission_denied__34___in_fsck_on_shared_repo/comment_4_1339cd27ca2955f30b01ecf4da7d6fe8._comment create mode 100644 doc/forum/__34__recovering__34___from_git-annex_usage.mdwn create mode 100644 doc/forum/__34__recovering__34___from_git-annex_usage/comment_1_4a2a68ec0d0075f0d2fd7e8c9fac5e75._comment create mode 100644 doc/forum/__34__unable_to_resolve_reference_refs__47__heads__47__git-annex__34__.mdwn create mode 100644 doc/forum/__34__unable_to_resolve_reference_refs__47__heads__47__git-annex__34__/comment_1_e50188896df347f1d92e20a52053aa14._comment create mode 100644 doc/forum/__34__unable_to_resolve_reference_refs__47__heads__47__git-annex__34__/comment_2_d67793f7c969f64943d1fd54a1208c2b._comment create mode 100644 doc/forum/__34__unable_to_resolve_reference_refs__47__heads__47__git-annex__34__/comment_3_3523884833b5fd458a35f898797bf897._comment create mode 100644 doc/forum/__34__unable_to_resolve_reference_refs__47__heads__47__git-annex__34__/comment_4_02c32c2521ba1a1eaa19eaca7281f2a6._comment create mode 100644 doc/forum/__39__put__39___functionality_as_opposed_to___39__get__39__.mdwn create mode 100644 doc/forum/__39__put__39___functionality_as_opposed_to___39__get__39__/comment_1_b2b7de0bf4494721b02280857474fd6c._comment create mode 100644 doc/forum/__39__wget_--mirror__39___like_behaviour.mdwn create mode 100644 doc/forum/__39__wget_--mirror__39___like_behaviour/comment_1_9c874a74f25fa06b8e515482b4706032._comment create mode 100644 doc/forum/__91__ERROR____93___unknown_archive_format_for_.mat_.tif_and_.json_files.mdwn create mode 100644 doc/forum/__91__ERROR____93___unknown_archive_format_for_.mat_.tif_and_.json_files/comment_1_debe9a878896ead4957db288203cae14._comment create mode 100644 doc/forum/__91__Installation__93___base-3.0.3.2_requires_syb___61____61__0.1.0.2.mdwn create mode 100644 doc/forum/__91__Installation__93___base-3.0.3.2_requires_syb___61____61__0.1.0.2/comment_1_fae6e88115d175239fc55cef4c33fb2c._comment create mode 100644 doc/forum/__91__Installation__93___base-3.0.3.2_requires_syb___61____61__0.1.0.2/comment_2_4c7a75638e8717132ccde949018d6008._comment create mode 100644 doc/forum/__91__NEED_HELP__93___manual_ssh_remote_setup_with_shared_key.mdwn create mode 100644 doc/forum/__91__NEED_HELP__93___manual_ssh_remote_setup_with_shared_key/comment_1_811cab17410ba6e07ae7af3249cd98df._comment create mode 100644 doc/forum/__91__Question__93___Mixing_.thin_and_default_repos__63__.mdwn create mode 100644 doc/forum/__91__Question__93___Mixing_.thin_and_default_repos__63__/comment_1_41f7bb65b85c3ab54f692e04d26a2891._comment create mode 100644 doc/forum/__91__announce__93___metadata_extration_utility.mdwn create mode 100644 doc/forum/__96__git_annex_assistant__96___command_replace_all_files_with_pointer_file..mdwn create mode 100644 doc/forum/__96__git_annex_copy__96____44___estimate_how_much_data_to_copy.mdwn create mode 100644 doc/forum/__96__git_annex_copy__96____44___estimate_how_much_data_to_copy/comment_1_785e4fe097ef2a2d51d84146fc91b2ca._comment create mode 100644 doc/forum/__96__git_annex_import__96___from_directory_loses_contents__63__.mdwn create mode 100644 doc/forum/__96__git_annex_import__96___from_directory_loses_contents__63__/comment_1_776b5b8099125aad3bc8839d9cc1abeb._comment create mode 100644 doc/forum/__96__git_annex_import__96___from_directory_loses_contents__63__/comment_2_c36d32db2b1dcd3cd36c68f2bb726f6f._comment create mode 100644 doc/forum/__96__git_annex_sync__96___hangs.mdwn create mode 100644 doc/forum/__96__git_annex_sync__96___hangs/comment_1_ffd16cb94b39b93dfb0a2932b70938fc._comment create mode 100644 doc/forum/__96__git_annex_sync__96___hangs/comment_2_fad59a54d92ed7cb230f0f365fddb0f4._comment create mode 100644 doc/forum/__96__git_annex_sync__96___uses_too_much_space__63__/comment_1_29cd5e9acd78d8ac6b58fe535fee9650._comment create mode 100644 doc/forum/__96__git_annex_sync__96___uses_too_much_space__63__/comment_2_7a24236bc511cbfa869aaeb431a003d2._comment create mode 100644 doc/forum/__96__sync_--content__96___error_if_it_can__39__t_get_wanted__63__.mdwn create mode 100644 doc/forum/__96__sync_--content__96___error_if_it_can__39__t_get_wanted__63__/comment_1_41d3a4774dd5ada5036247eb6f562392._comment create mode 100644 doc/forum/__96__sync_--content__96___error_if_it_can__39__t_get_wanted__63__/comment_2_a971d9d85eb7f86d4ea18a71bd0db25d._comment create mode 100644 doc/forum/_illegal_control_characters_in_pairing_message__59___ignoring.mdwn create mode 100644 doc/forum/_illegal_control_characters_in_pairing_message__59___ignoring/comment_1_99975a677f832c410050ba721be6d904._comment create mode 100644 doc/forum/_illegal_control_characters_in_pairing_message__59___ignoring/comment_2_f4dd76879e2b2bd0da557ee6a539533c._comment create mode 100644 doc/forum/_illegal_control_characters_in_pairing_message__59___ignoring/comment_3_d437dc44114f59d5717c177831ae0d53._comment create mode 100644 doc/forum/_illegal_control_characters_in_pairing_message__59___ignoring/comment_4_dd29ac2b5615ff6f79458a36bce44306._comment create mode 100644 doc/forum/_illegal_control_characters_in_pairing_message__59___ignoring/comment_5_e07b69bb36cd8aa2c4fd689744f12df1._comment create mode 100644 doc/forum/_illegal_control_characters_in_pairing_message__59___ignoring/comment_6_f61a390f304e1f6d1e8c4a90cdfbd9b9._comment create mode 100644 doc/forum/_illegal_control_characters_in_pairing_message__59___ignoring/comment_7_625df33e70f2f959c574d918a706648d._comment create mode 100644 doc/forum/_preferred_content__58___lastpresent.mdwn create mode 100644 doc/forum/_preferred_content__58___lastpresent/comment_1_7610cd866b256d36646b642eb5f8cae5._comment create mode 100644 doc/forum/_preferred_content__58___lastpresent/comment_2_d25666a173b78213d583f029fd166d06._comment create mode 100644 doc/forum/add_only_binary_files__63__.mdwn create mode 100644 doc/forum/add_only_binary_files__63__/comment_1_7ce3be5bafd62ce5ed78bcd9323039cc._comment create mode 100644 doc/forum/adding_files_without_hashing_them.mdwn create mode 100644 doc/forum/adding_files_without_hashing_them/comment_1_c3113d7aff6b64a325a32b8b281df605._comment create mode 100644 doc/forum/adding_remote_bup_repo_using_ssh.mdwn create mode 100644 doc/forum/adding_remote_bup_repo_using_ssh/comment_1_d1ab38bccc415a94fa3906f7f5e823f3._comment create mode 100644 doc/forum/adding_remote_bup_repo_using_ssh/comment_2_6698ecb746e6edb25130c8dbceb36fc0._comment create mode 100644 doc/forum/adjustedbranchrefresh_ignored__63__.mdwn create mode 100644 doc/forum/adjustedbranchrefresh_ignored__63__/comment_1_999bd4a511c7fa39f5455df895c435f3._comment create mode 100644 doc/forum/advantages_of_SHA__42___over_WORM.mdwn create mode 100644 doc/forum/advantages_of_SHA__42___over_WORM/comment_1_96c354cac4b5ce5cf6664943bc84db1d._comment create mode 100644 doc/forum/agent_keep_deleting_local_file.mdwn create mode 100644 doc/forum/alternativeto.net___34__Like__34__.mdwn create mode 100644 doc/forum/ancient_linux_build_for_arm__63__.mdwn create mode 100644 doc/forum/ancient_linux_build_for_arm__63__/comment_1_c4ebfb2136bb4b3e21a52aa23717b22a._comment create mode 100644 doc/forum/ancient_linux_build_for_arm__63__/comment_1_f5a7d7e4ac5d9885230d08684416cff4._comment create mode 100644 doc/forum/android_-_assistant_-_local_pairing_.mdwn create mode 100644 doc/forum/android_binary-only_download.mdwn create mode 100644 doc/forum/android_binary-only_download/comment_1_aab206e0bf0bb5ff47c7cc9795f12f92._comment create mode 100644 doc/forum/android_installation.mdwn create mode 100644 doc/forum/android_installation/comment_1_8908256ecd48d7b5207799aa02102d87._comment create mode 100644 doc/forum/android_installation/comment_2_3c2a1e7542993528250ad72079894364._comment create mode 100644 doc/forum/annex.largefile_include_from_file.mdwn create mode 100644 doc/forum/annex.largefile_include_from_file/comment_1_9016a64a654151ab9a478686382193b4._comment create mode 100644 doc/forum/annex.largefile_include_from_file/comment_2_09258e59eab492afc37efeac325c2de1._comment create mode 100644 doc/forum/annex.largefile_include_from_file/comment_3_f857505bde5f03d9c17e8df0512c0e99._comment create mode 100644 doc/forum/annex.largefile_include_from_file/comment_4_f9c2acc07dad646cd04a51ca85f45502._comment create mode 100644 doc/forum/annex.largefile_not_working.mdwn create mode 100644 doc/forum/annex.largefile_not_working/comment_1_b2ecb8b60603929bae91c3007817585f._comment create mode 100644 doc/forum/annex.largefile_not_working/comment_2_18bc73688897728d0bcae6df1225e6e3._comment create mode 100644 doc/forum/annex.largefile_not_working/comment_3_81085c1a526ac804edba689043e58944._comment create mode 100644 doc/forum/annex.largefiles__58___two_quesitons.mdwn create mode 100644 doc/forum/annex.largefiles__58___two_quesitons/comment_1_75fc6cd2315e9ad6897b94bcc527ddc1._comment create mode 100644 doc/forum/annex.largefiles__58___two_quesitons/comment_2_f34cf28c3f8354e6fc055d4dba6ed555._comment create mode 100644 doc/forum/annex_merge_creates___34__synced__47____42____34___branches.mdwn create mode 100644 doc/forum/annex_merge_creates___34__synced__47____42____34___branches/comment_1_4667fadb05c594b0a212bf455ee65298._comment create mode 100644 doc/forum/annex_merge_creates___34__synced__47____42____34___branches/comment_2_cb6971a766a28bd8c094d0b986272c65._comment create mode 100644 doc/forum/annex_merge_creates___34__synced__47____42____34___branches/comment_3_1a0384edd20cc379e53fe7d7f650f7e2._comment create mode 100644 doc/forum/annex_merge_creates___34__synced__47____42____34___branches/comment_4_79219e920a6beb4bd3265571f59f51cb._comment create mode 100644 doc/forum/annex_merge_creates___34__synced__47____42____34___branches/comment_5_39009651c3f65e2ecd225e17d157c8d8._comment create mode 100644 doc/forum/annexed_file_key_for_web_remote_with_SHA256E_backend.mdwn create mode 100644 doc/forum/annexed_file_key_for_web_remote_with_SHA256E_backend/comment_1_d1605a6e3b4d6863f4089218994ce564._comment create mode 100644 doc/forum/annexed_file_key_for_web_remote_with_SHA256E_backend/comment_2_d249ff27fa3d9ac3ca32485cdef49930._comment create mode 100644 doc/forum/archaeology_of_deleted_files.mdwn create mode 100644 doc/forum/archaeology_of_deleted_files/comment_1_48f27df03ec18d2c27cf6b70dcf71dc5._comment create mode 100644 doc/forum/archaeology_of_deleted_files/comment_2_c698cd10c8038bac45bd1049506a27c3._comment create mode 100644 doc/forum/archival_and_multiple_users.mdwn create mode 100644 doc/forum/archival_and_multiple_users/comment_1_fc4ee256f03a7c189d687caf4a34e21e._comment create mode 100644 doc/forum/archival_and_multiple_users/comment_2_a96d57d4bb567ac9b0b9167d5b1be011._comment create mode 100644 doc/forum/archival_and_multiple_users/comment_3_bd44634b04732ffb91154c61ef9cf828._comment create mode 100644 doc/forum/archival_and_multiple_users/comment_4_b89a56a5f1cd641f87925c7a5f74bcec._comment create mode 100644 doc/forum/archival_and_multiple_users/comment_5_81293bf5dc8ad4552712c2083fd589c9._comment create mode 100644 doc/forum/armhf_binary.mdwn create mode 100644 doc/forum/armhf_binary/comment_1_9ca7ff6cb1f5dfc1e5ce8527e7e0a45f._comment create mode 100644 doc/forum/armhf_binary/comment_2_743ecf263d1ec1bc4f24e32c0a178f2b._comment create mode 100644 doc/forum/assistant__44___direct_mode__44___large_files__44___command_line_-_how_do_these_play_together__63__.mdwn create mode 100644 doc/forum/assistant__44___direct_mode__44___large_files__44___command_line_-_how_do_these_play_together__63__/comment_1_d90d1d599ce557af03c6f0f2ea188212._comment create mode 100644 doc/forum/assistant__44___direct_mode__44___large_files__44___command_line_-_how_do_these_play_together__63__/comment_2_58b1af497cab132acb28cb5f9283ec2a._comment create mode 100644 doc/forum/assistant__44___direct_mode__44___large_files__44___command_line_-_how_do_these_play_together__63__/comment_3_37d4fd8f69e8066b5aa19454b714e443._comment create mode 100644 doc/forum/assistant__44___direct_mode__44___large_files__44___command_line_-_how_do_these_play_together__63__/comment_4_a974e2105774d4f82ad286ff0792ba84._comment create mode 100644 doc/forum/assistant_and_archive_folder.mdwn create mode 100644 doc/forum/assistant_and_archive_folder/comment_1_ab8808372b886fd1a9f55588d1cef602._comment create mode 100644 doc/forum/assistant_created_encrypted__backup_remote__58___Howto_restore__63__.mdwn create mode 100644 doc/forum/assistant_created_encrypted__backup_remote__58___Howto_restore__63__/comment_1_70200f871b9df49261f32752a6bb0e67._comment create mode 100644 doc/forum/assistant_created_encrypted__backup_remote__58___Howto_restore__63__/comment_2_173da510b45f0320ae8aa2df9f14ae7b._comment create mode 100644 doc/forum/assistant_created_encrypted__backup_remote__58___Howto_restore__63__/comment_3_1ecea12a4be5ad09013cddb62df6ab20._comment create mode 100644 doc/forum/assistant_created_encrypted__backup_remote__58___Howto_restore__63__/comment_4_af4bc222d1479482bd83952353c97f05._comment create mode 100644 doc/forum/assistant_created_encrypted__backup_remote__58___Howto_restore__63__/comment_5_c1d247fa128c0a0fc899284f5f95002c._comment create mode 100644 doc/forum/assistant_created_encrypted__backup_remote__58___Howto_restore__63__/comment_6_cf877a3502802492cd2bc3012cb2d779._comment create mode 100644 doc/forum/assistant_overzealously_moving_stuff_to_other_repos.mdwn create mode 100644 doc/forum/assistant_overzealously_moving_stuff_to_other_repos/comment_1_6bd240edf1868615024ff11c24c3d52c._comment create mode 100644 doc/forum/assistant_overzealously_moving_stuff_to_other_repos/comment_2_37c5e9a7669b5b94fbadb8792a765316._comment create mode 100644 doc/forum/assistant_overzealously_moving_stuff_to_other_repos/comment_3_87aa4c5942929be81ddc1e2795d56f0e._comment create mode 100644 doc/forum/assistant_periodical_unused_moves.mdwn create mode 100644 doc/forum/assistant_periodical_unused_moves/comment_1_98e30e1f3ca63790c4a8ce11d29634ae._comment create mode 100644 doc/forum/assistant_to_have_synced_folders.mdwn create mode 100644 doc/forum/assistant_to_have_synced_folders/comment_10_3bf1a44e76855e4fbdd270f97a54bcc5._comment create mode 100644 doc/forum/assistant_to_have_synced_folders/comment_11_b5f9f527597acd8f44f529f85ac305fd._comment create mode 100644 doc/forum/assistant_to_have_synced_folders/comment_12_f38a88b82328ee2d2b411f3df5c3d043._comment create mode 100644 doc/forum/assistant_to_have_synced_folders/comment_13_9b8631b1fb4c9992203efc2d29cfae8d._comment create mode 100644 doc/forum/assistant_to_have_synced_folders/comment_1_e2e49f5278b921f8817ad6ac89a6aaf8._comment create mode 100644 doc/forum/assistant_to_have_synced_folders/comment_2_690a144201e7df5972fd48af8c1d46f7._comment create mode 100644 doc/forum/assistant_to_have_synced_folders/comment_3_49b00584ef4388e130cce63f4f33572f._comment create mode 100644 doc/forum/assistant_to_have_synced_folders/comment_4_53ceb18128de33311d65b39f34b3d9b7._comment create mode 100644 doc/forum/assistant_to_have_synced_folders/comment_5_6db901470af7dc7e1da90839fc08c121._comment create mode 100644 doc/forum/assistant_to_have_synced_folders/comment_6_0ec093a51b3dab465907074beb423848._comment create mode 100644 doc/forum/assistant_to_have_synced_folders/comment_7_83fdf8c0027c860f37716f975838497a._comment create mode 100644 doc/forum/assistant_to_have_synced_folders/comment_8_52237edb2f6cbf9c96f7285ebf6abe6c._comment create mode 100644 doc/forum/assistant_to_have_synced_folders/comment_9_a7a5a4c97663211e2fb4337117ec0cb0._comment create mode 100644 doc/forum/assistant_without_watch__63__.mdwn create mode 100644 doc/forum/assistant_without_watch__63__/comment_1_be1f7c038426e53209a85ae1119269d5._comment create mode 100644 doc/forum/assitant__58___special_remote_server___40__needs_ssh_tunnel__41__.mdwn create mode 100644 doc/forum/assitant__58___special_remote_server___40__needs_ssh_tunnel__41__/comment_1_817a3ed424e4fb76fcd33295f2953250._comment create mode 100644 doc/forum/auto-fetching_annexed_files_on_open__40____41__.mdwn create mode 100644 doc/forum/autobuilders_for_git-annex_to_aid_development.mdwn create mode 100644 doc/forum/autobuilders_for_git-annex_to_aid_development/comment_1_7e88f815e8d9652ef18ea6d54b118962._comment create mode 100644 doc/forum/autobuilders_for_git-annex_to_aid_development/comment_2_fef17a10226af5671495c2929653c337._comment create mode 100644 doc/forum/avoid_rehashing_when_converting_existing_backups_into_new_remotes.mdwn create mode 100644 doc/forum/avoid_rehashing_when_converting_existing_backups_into_new_remotes/comment_1_7d0b479244fefd933193d921adcd897c._comment create mode 100644 doc/forum/avoid_rehashing_when_converting_existing_backups_into_new_remotes/comment_2_d42222ef94f4d409ac40e523f8211ffc._comment create mode 100644 doc/forum/avoid_rehashing_when_converting_existing_backups_into_new_remotes/comment_3_dc93ae2a58de5620c440531f43f1237d._comment create mode 100644 doc/forum/avoid_rehashing_when_converting_existing_backups_into_new_remotes/comment_4_e6bb8a33608908d02eeb921d039f22b9._comment create mode 100644 doc/forum/avoiding_copies_across_mutiple_file_systems.mdwn create mode 100644 doc/forum/avoiding_copies_across_mutiple_file_systems/comment_1_2ff3e4d2af575b27b14a0a936ad8c52f._comment create mode 100644 doc/forum/avoiding_copies_across_mutiple_file_systems/comment_2_96e72de1dc7cefdaa3beedc837639f57._comment create mode 100644 doc/forum/avoiding_copies_across_mutiple_file_systems/comment_3_43db664a00fb9956ad392b5dc23565ca._comment create mode 100644 doc/forum/avoiding_copies_across_mutiple_file_systems/comment_4_6584f98910d91746203405d57d17b8b0._comment create mode 100644 doc/forum/backblaze_s3.mdwn create mode 100644 doc/forum/backblaze_s3/comment_1_854390b9a781da82ecb85ad85eecad04._comment create mode 100644 doc/forum/backblaze_s3/comment_2_5f1407460b6a56a8e267f8eecf4427aa._comment create mode 100644 doc/forum/backblaze_s3/comment_3_55362a91c4592775994999a843e648dc._comment create mode 100644 doc/forum/backblaze_s3/comment_4_bd008868a576bf09c6fa188dc8a5907c._comment create mode 100644 doc/forum/backblaze_s3/comment_5_474ca16386680fd359474f05bfbd0375._comment create mode 100644 doc/forum/backblaze_s3/comment_6_c84400e7dc58ed7e5db8c7883587e8f8._comment create mode 100644 doc/forum/bainstorming__58___git_annex_push___38___pull.mdwn create mode 100644 doc/forum/bainstorming__58___git_annex_push___38___pull/comment_1_3a0bf74b51586354b7a91f8b43472376._comment create mode 100644 doc/forum/bainstorming__58___git_annex_push___38___pull/comment_2_b02ca09914e788393c01196686f95831._comment create mode 100644 doc/forum/balance_git_annex_remotes.mdwn create mode 100644 doc/forum/bash_completion.mdwn create mode 100644 doc/forum/bash_completion/comment_1_5c42c0c8e7fc3224bf5406880f9fd0c4._comment create mode 100644 doc/forum/bash_completion/comment_2_6cbe3c825db99bf9188a0de8bb937d5b._comment create mode 100644 doc/forum/bash_completion/comment_3_948c40f1e46ca220d61365aebcd4f6d7._comment create mode 100644 doc/forum/bash_completion/comment_4_dbae348b230b780cda91ed8576b8f9fa._comment create mode 100644 doc/forum/bash_completion/comment_5_d45570fd750ae8d69dedc3edeef0cc10._comment create mode 100644 doc/forum/bash_completion/comment_6_2dbfa336ad8957ff0cafd8301ca1150f._comment create mode 100644 doc/forum/bash_completion/comment_7_2fd198746dc7351fe957e7a8150fcb89._comment create mode 100644 doc/forum/bash_completion/comment_8_7802f4bd08dddd24ac9d19ee7847735f._comment create mode 100644 doc/forum/basic_usage_questions.mdwn create mode 100644 doc/forum/basic_usage_questions/comment_1_c2a5fedc24f8c301d9042999a0371d9f._comment create mode 100644 doc/forum/basic_usage_questions/comment_2_67d047a107b20874cb71ba311681e181._comment create mode 100644 doc/forum/basic_usage_questions/comment_3_94b4efa49efbee741c051227b3204562._comment create mode 100644 doc/forum/batch_check_on_remote_when_using_copy.mdwn create mode 100644 doc/forum/benefit_of_splitting_a_repository.mdwn create mode 100644 doc/forum/benefit_of_splitting_a_repository/comment_1_93a86cb03b66e7ab5dd7146e7b86c9e8._comment create mode 100644 doc/forum/benefit_of_splitting_a_repository/comment_2_4e2fed247298d620fee7be883a1e86a6._comment create mode 100644 doc/forum/best_practices_for_importing_photos__63__.mdwn create mode 100644 doc/forum/best_practices_for_importing_photos__63__/comment_1_37f0ae4b552ec2a4a144ddcdc17c8453._comment create mode 100644 doc/forum/best_practices_for_importing_photos__63__/comment_2_7f96f0fe0fc073321bd7c5bbd9048425._comment create mode 100644 doc/forum/best_way_to_move_a_git_annex_repo_trought_file_system.mdwn create mode 100644 doc/forum/best_way_to_move_a_git_annex_repo_trought_file_system/comment_1_50b0f3b42c5c7185c51451af80749718._comment create mode 100644 doc/forum/best_way_to_move_a_git_annex_repo_trought_file_system/comment_2_e3e30ca123cd840288655c25b688cd66._comment create mode 100644 doc/forum/best_way_to_move_a_git_annex_repo_trought_file_system/comment_3_00418ada32a4d93dfd3334686e391a23._comment create mode 100644 doc/forum/big_overhead.mdwn create mode 100644 doc/forum/big_overhead/comment_10_d5f4e353e7f711d8c38cdcc222339bca._comment create mode 100644 doc/forum/big_overhead/comment_11_cbf25217e4149f2cfad4e2bf94f2b4ca._comment create mode 100644 doc/forum/big_overhead/comment_12_475d5af95adcfcd3a51e10f270205eb7._comment create mode 100644 doc/forum/big_overhead/comment_13_1c8cc992f04fc63179094c494bd25025._comment create mode 100644 doc/forum/big_overhead/comment_14_cbfb3d557915258e72c65a4e84df77a9._comment create mode 100644 doc/forum/big_overhead/comment_15_b973529bae549bcbaaae792f0403989b._comment create mode 100644 doc/forum/big_overhead/comment_1_0c184520c30a89bd2604ab7c0eb7ac45._comment create mode 100644 doc/forum/big_overhead/comment_2_13a017c6c84511894ded2d89d86eb541._comment create mode 100644 doc/forum/big_overhead/comment_3_b4761cacc02396b5bdf34bcf3457cb91._comment create mode 100644 doc/forum/big_overhead/comment_4_633f8538f368220eaca82b8bbfe9b49d._comment create mode 100644 doc/forum/big_overhead/comment_5_599092b8d4f1fc8f378796328ef42931._comment create mode 100644 doc/forum/big_overhead/comment_6_adb4b4e7eb4dac7760f3425bae6cbbc2._comment create mode 100644 doc/forum/big_overhead/comment_7_a762eb55addf81c1c5350c7968598d0f._comment create mode 100644 doc/forum/big_overhead/comment_8_4a66f57c6c0bdc6123618cb69a719be5._comment create mode 100644 doc/forum/big_overhead/comment_9_5fa681ea0d6bd0dcac7142d40df9d54f._comment create mode 100644 doc/forum/browse_files_on_server.mdwn create mode 100644 doc/forum/browse_files_on_server/comment_1_5023c6f9f4a8a7724ff057076f64ec1d._comment create mode 100644 doc/forum/browse_files_on_server/comment_2_67096b34041fed07bbf1d0cb243e1efc._comment create mode 100644 doc/forum/browse_files_on_server/comment_3_148f1aa0d46dcf51b855b6fb18b6a549._comment create mode 100644 doc/forum/btsync_equivalent__63__.mdwn create mode 100644 doc/forum/btsync_equivalent__63__/comment_1_6bfdc6f595a8aa8979a7c2a10925812f._comment create mode 100644 doc/forum/bug-fix_release.mdwn create mode 100644 doc/forum/bug-fix_release/comment_1_c3c23f4c0a8bdea8619479656af63af3._comment create mode 100644 doc/forum/build_from_source_on_Linux_fails___40__out_of_memory__41__.mdwn create mode 100644 doc/forum/build_from_source_on_Linux_fails___40__out_of_memory__41__/comment_1_cd004b531ae384e134e16600b64473e0._comment create mode 100644 doc/forum/build_questions__58___Flag_HttpClientRestricted.mdwn create mode 100644 doc/forum/build_questions__58___Flag_HttpClientRestricted/comment_1_67ab203f26e7b446fe96e01ec3706540._comment create mode 100644 doc/forum/building_from_source__58___dependency_versions.mdwn create mode 100644 doc/forum/building_from_source__58___dependency_versions/comment_1_442b37aa559512eb85695f0a9e3b8197._comment create mode 100644 doc/forum/building_the_standalone_distribution_from_source.mdwn create mode 100644 doc/forum/building_the_standalone_distribution_from_source/comment_10_ae23bbd2da15e8ae115b4030994502cc._comment create mode 100644 doc/forum/building_the_standalone_distribution_from_source/comment_11_5c580c8fce388b9808c2afc778da853b._comment create mode 100644 doc/forum/building_the_standalone_distribution_from_source/comment_12_9b0a7c108855d9db63092dd5f93bc5e5._comment create mode 100644 doc/forum/building_the_standalone_distribution_from_source/comment_13_27f987a16d931a02f5a4ab3f80bf327a._comment create mode 100644 doc/forum/building_the_standalone_distribution_from_source/comment_14_44606ec8db82f75f37aabcd7df5c24bb._comment create mode 100644 doc/forum/building_the_standalone_distribution_from_source/comment_1_204eda1dc4b935ee357a6675ee14317b._comment create mode 100644 doc/forum/building_the_standalone_distribution_from_source/comment_2_ff968f9f9d6644b9e8607c8e76f45c1e._comment create mode 100644 doc/forum/building_the_standalone_distribution_from_source/comment_3_e94f70e19b77c9ad6b6349fa65dcc60f._comment create mode 100644 doc/forum/building_the_standalone_distribution_from_source/comment_4_0b7824acaf031d8ba69700674c82f472._comment create mode 100644 doc/forum/building_the_standalone_distribution_from_source/comment_5_bfec6091cc312a9d4c87163b845454f6._comment create mode 100644 doc/forum/building_the_standalone_distribution_from_source/comment_6_044da90b6cc18534de74ee5d38d6becb._comment create mode 100644 doc/forum/building_the_standalone_distribution_from_source/comment_7_5187f5f40bc47b5b079cfdd3eb5f1fc3._comment create mode 100644 doc/forum/building_the_standalone_distribution_from_source/comment_8_eb0c565043164c17b2a6d2c6361b6e35._comment create mode 100644 doc/forum/building_the_standalone_distribution_from_source/comment_9_edb3a79772f81dd3ffd00b81e79f67e5._comment create mode 100644 doc/forum/bup_backups_to_amazon_cloud_drive.mdwn create mode 100644 doc/forum/bup_backups_to_amazon_cloud_drive/comment_1_e8f6fdc70cedd5482da6a185c6c6b9b9._comment create mode 100644 doc/forum/cabal_install_fails_on_uuid.mdwn create mode 100644 doc/forum/cabal_install_fails_on_uuid/comment_1_2a3963e21bc7ff526124b902cb0b6ad2._comment create mode 100644 doc/forum/cabal_install_fails_on_uuid/comment_2_1609525998e2b36c04d67f4d988139c0._comment create mode 100644 doc/forum/can_I_only_add_my_own_files__63__.mdwn create mode 100644 doc/forum/can_I_only_add_my_own_files__63__/comment_1_767d647af9d0345f337338d6319071fa._comment create mode 100644 doc/forum/can_I_only_add_my_own_files__63__/comment_2_0c3306ffb38b97b54e1e0436d12c1876._comment create mode 100644 doc/forum/can__39__t_sync_content.mdwn create mode 100644 doc/forum/can__39__t_sync_content/comment_1_0d6c6f5967c91e7dda55fbf716dd88a0._comment create mode 100644 doc/forum/can__39__t_sync_content/comment_2_e9c476eeac7427950573c07313a8a175._comment create mode 100644 doc/forum/can_git-annex_replace_ddm__63__.mdwn create mode 100644 doc/forum/can_git-annex_replace_ddm__63__/comment_1_aa05008dfe800474ff76678a400099e1._comment create mode 100644 doc/forum/can_git-annex_replace_ddm__63__/comment_2_008554306dd082d7f543baf283510e92._comment create mode 100644 doc/forum/can_git-annex_replace_ddm__63__/comment_3_4c69097fe2ee81359655e59a03a9bb8d._comment create mode 100644 doc/forum/canceling_wrong_repository_merge.mdwn create mode 100644 doc/forum/canceling_wrong_repository_merge/comment_1_7230f2be014afcb40514ef521d53c170._comment create mode 100644 doc/forum/canceling_wrong_repository_merge/comment_2_87aabff41a1c6aec773b8f52ead51105._comment create mode 100644 doc/forum/canceling_wrong_repository_merge/comment_3_d6e45d7e4f4bdf0a08ab91a08e0c1be6._comment create mode 100644 doc/forum/cannot_fetch_from___40__gpg-encrypted__41___rsync_remote_on_MacOSX.mdwn create mode 100644 doc/forum/cannot_fetch_from___40__gpg-encrypted__41___rsync_remote_on_MacOSX/comment_1_21f0101447623f5a0cf9e72c3ff463bb._comment create mode 100644 doc/forum/cannot_fetch_from___40__gpg-encrypted__41___rsync_remote_on_MacOSX/comment_2_6234ca64bd03a0e15efbe8f5c204338a._comment create mode 100644 doc/forum/cannot_fetch_from___40__gpg-encrypted__41___rsync_remote_on_MacOSX/comment_3_5ac2b520a907e232984eb513ce088054._comment create mode 100644 doc/forum/cannot_fetch_from___40__gpg-encrypted__41___rsync_remote_on_MacOSX/comment_4_183dd1c29f66539193e7c0b73f329430._comment create mode 100644 doc/forum/cannot_fetch_from___40__gpg-encrypted__41___rsync_remote_on_MacOSX/comment_5_c920d04ffe332caed9d223fa0ac42746._comment create mode 100644 doc/forum/cannot_fetch_from___40__gpg-encrypted__41___rsync_remote_on_MacOSX/comment_6_7a3cf0853a8ec7b996e19b5e80145d21._comment create mode 100644 doc/forum/cannot_sync___39__unused__39___files.mdwn create mode 100644 doc/forum/cannot_sync___39__unused__39___files/comment_1_d7c88a5cdf8ce8206795ff7ab215d372._comment create mode 100644 doc/forum/central_non-bare_and_git_push.mdwn create mode 100644 doc/forum/central_non-bare_and_git_push/comment_1_76d0c73c8985e860eb86333c63be6340._comment create mode 100644 doc/forum/checkout_view_to_directory_outside_of_annex.mdwn create mode 100644 doc/forum/checkout_view_to_directory_outside_of_annex/comment_1_a31a501bdc28eabc60588502f7219e50._comment create mode 100644 doc/forum/checkout_view_to_directory_outside_of_annex/comment_2_b4abbb048ebcd3c4b59d20e103948fd8._comment create mode 100644 doc/forum/checkout_view_to_directory_outside_of_annex/comment_3_2139407a3a556023a2458148a4a2c009._comment create mode 100644 doc/forum/clear_box.com_repository.mdwn create mode 100644 doc/forum/clear_box.com_repository/comment_1_2e839d8f974269c80a9fca183712350f._comment create mode 100644 doc/forum/clear_box.com_repository/comment_2_8f9c7248a148a24ae2aba39c4a79a6d1._comment create mode 100644 doc/forum/clear_box.com_repository/comment_3_f64ad21e5abfbf4e1f925b3d651bdba3._comment create mode 100644 doc/forum/clear_box.com_repository/comment_4_f8c06ac9b23b51cf18d362c260fc47a9._comment create mode 100644 doc/forum/clear_box.com_repository/comment_5_61d401b29322802cb25896503f3e6514._comment create mode 100644 doc/forum/client_repositories_setup_problem.mdwn create mode 100644 doc/forum/client_repositories_setup_problem/comment_1_be53f90b66de690b39f487d394866a66._comment create mode 100644 doc/forum/client_repositories_setup_problem/comment_2_f9660534c3f3346f322de57c2da0eb27._comment create mode 100644 doc/forum/cloud_services_to_support.mdwn create mode 100644 doc/forum/cloudcmd.mdwn create mode 100644 doc/forum/commit_current_workdir_state_in_direct_mode.mdwn create mode 100644 doc/forum/commit_current_workdir_state_in_direct_mode/comment_1_748481ff00374f570284bd4571584874._comment create mode 100644 doc/forum/compiling_on_MacOS.mdwn create mode 100644 doc/forum/compiling_on_MacOS/comment_1_143ae6d4f2704d4ab74e110a2d7a3c82._comment create mode 100644 doc/forum/comprehension_question__58___repository_vs._working_copy_in_direct_mode.mdwn create mode 100644 doc/forum/comprehension_question__58___repository_vs._working_copy_in_direct_mode/comment_1_a6b4db0cefa439f72b97089d48dfacbd._comment create mode 100644 doc/forum/conda-forge_build_problem.mdwn create mode 100644 doc/forum/conda-forge_build_problem/comment_1_22e01f5f110593796b539fc7630ccb3c._comment create mode 100644 doc/forum/config_to_make_git_annex_sync_only_sync_metadata__63__.mdwn create mode 100644 doc/forum/config_to_make_git_annex_sync_only_sync_metadata__63__/comment_1_ce9d638b8a07375a79a9ee04b02d6e95._comment create mode 100644 doc/forum/config_to_make_git_annex_sync_only_sync_metadata__63__/comment_2_11b9261bc5c32d3e36357afc021ac4e1._comment create mode 100644 doc/forum/config_to_make_git_annex_sync_only_sync_metadata__63__/comment_3_07e6f767e38d9812b176ee3fdb00adf0._comment create mode 100644 doc/forum/conflict_with_git-crypt.mdwn create mode 100644 doc/forum/conflict_with_git-crypt/comment_1_b81a3cd99ff04e21ef520a497c0bd46a._comment create mode 100644 doc/forum/conflict_with_git-crypt/comment_2_cda648fcc5f213af06fe98428910f561._comment create mode 100644 doc/forum/conflict_with_git-crypt/comment_3_6e7ea4ed29e6b526c27979988d09d883._comment create mode 100644 doc/forum/confused_about_external_drives.mdwn create mode 100644 doc/forum/confused_about_external_drives/comment_1_8340e5ff17a4846b41789e4966fed70c._comment create mode 100644 doc/forum/confused_about_external_drives/comment_2_ad10bd0ec14c16bcad089b3ebe64580e._comment create mode 100644 doc/forum/confusion_with_remotes__44___map.mdwn create mode 100644 doc/forum/confusion_with_remotes__44___map/comment_1_a38ded23b7f288292a843abcb1a56f38._comment create mode 100644 doc/forum/confusion_with_remotes__44___map/comment_2_cd1c98b1276444e859a22c3dbd6f2a79._comment create mode 100644 doc/forum/confusion_with_remotes__44___map/comment_3_18531754089c991b6caefc57a5c17fe9._comment create mode 100644 doc/forum/confusion_with_remotes__44___map/comment_4_3b89b6d1518267fcbc050c9de038b9ca._comment create mode 100644 doc/forum/confusion_with_remotes__44___map/comment_5_27801584325d259fa490f67273f2ff71._comment create mode 100644 doc/forum/confusion_with_remotes__44___map/comment_6_496b0d9b86869bbac3a1356d53a3dda4._comment create mode 100644 doc/forum/confusion_with_remotes__44___map/comment_7_9a456f61f956a3d5e81e723d5a90794c._comment create mode 100644 doc/forum/controlling_how___34__git_annex_sync__34___resolves_conflicts.mdwn create mode 100644 doc/forum/controlling_how___34__git_annex_sync__34___resolves_conflicts/comment_1_48be720ff150112f30273960f677056c._comment create mode 100644 doc/forum/controlling_how___34__git_annex_sync__34___resolves_conflicts/comment_2_c091e5a668b15aca7b2faa955beab403._comment create mode 100644 doc/forum/controlling_how___34__git_annex_sync__34___resolves_conflicts/comment_2_d8dddf7b565273390ce4ba1c22dabf46._comment create mode 100644 doc/forum/controlling_how___34__git_annex_sync__34___resolves_conflicts/comment_4_c019c5b4d1c2a7941aed8791b6749f5b._comment create mode 100644 doc/forum/converting_a_v5_repo_to_an_always_unlocked_v6_repo.mdwn create mode 100644 doc/forum/converting_a_v5_repo_to_an_always_unlocked_v6_repo/comment_1_e08eb54547bfd4dbfcc79a5a4a529647._comment create mode 100644 doc/forum/converting_a_v5_repo_to_an_always_unlocked_v6_repo/comment_2_85946916ac9c2a19c0d65e2b1a3e5832._comment create mode 100644 doc/forum/copy_--auto_copies_already_synced_files.mdwn create mode 100644 doc/forum/copy_--auto_copies_already_synced_files/comment_1_cc5e2e7630a33b73d1eb92eebe254cea._comment create mode 100644 doc/forum/copy_--auto_copies_already_synced_files/comment_2_3cfd11d8199a4d5e442d207a1edb38e0._comment create mode 100644 doc/forum/copy_and_move__63__.mdwn create mode 100644 doc/forum/copy_and_move__63__/comment_1_a24b1ab4608fcf8129c9890a5ae9e943._comment create mode 100644 doc/forum/copy_symlinks.mdwn create mode 100644 doc/forum/copy_symlinks/comment_1_950de173a042a7671a43adbab02e0669._comment create mode 100644 doc/forum/copy_symlinks/comment_2_198f3e9db08ebcdb7ec36b76cc1d9473._comment create mode 100644 doc/forum/copying_annex_between_remotes_manually__63__.mdwn create mode 100644 doc/forum/copying_annex_between_remotes_manually__63__/comment_1_c13a0cded3a5fee06106f101f122eb33._comment create mode 100644 doc/forum/copying_annex_between_remotes_manually__63__/comment_2_1237297cfb596d59a48c8359d43a3928._comment create mode 100644 doc/forum/copying_annex_between_remotes_manually__63__/comment_3_875474a913d23823e3866cca27cfa3ac._comment create mode 100644 doc/forum/correct_way_to_add_two_preexisting_datasets.mdwn create mode 100644 doc/forum/correct_way_to_add_two_preexisting_datasets/comment_1_c5c3ff25c9f5e34db222b5f4ae58b093._comment create mode 100644 doc/forum/correct_way_to_add_two_preexisting_datasets/comment_2_ee3ecc86990ac5a8d0c4fdfb482a7594._comment create mode 100644 doc/forum/correct_way_to_add_two_preexisting_datasets/comment_3_e29bf8b848da04c761dc601ac979ac14._comment create mode 100644 doc/forum/could_not_read_from_remote_repository.mdwn create mode 100644 doc/forum/could_not_read_from_remote_repository/comment_1_27d4d1556a80c06505ed3d8a9422d082._comment create mode 100644 doc/forum/could_not_read_from_remote_repository/comment_2_cf7d5e231675921c3d98faab3613c92f._comment create mode 100644 doc/forum/custom_URLs___40__use_case__58___dnanexus__41__.mdwn create mode 100644 doc/forum/custom_URLs___40__use_case__58___dnanexus__41__/comment_1_55c2a5c932ccc5a2a49a54239cfba139._comment create mode 100644 doc/forum/custom_URLs___40__use_case__58___dnanexus__41__/comment_2_db80224d61ca549557af558e9a5f099a._comment create mode 100644 doc/forum/custom_URLs___40__use_case__58___dnanexus__41__/comment_3_8b69aa113bc35a042c90beddf8b0f3a9._comment create mode 100644 doc/forum/custom_URLs___40__use_case__58___dnanexus__41__/comment_4_94e2fbb04c553b2c8c7992541e634017._comment create mode 100644 doc/forum/custom_URLs___40__use_case__58___dnanexus__41__/comment_5_33a833e1037df7ce0fa55876e4154250._comment create mode 100644 doc/forum/dangling_blobs.mdwn create mode 100644 doc/forum/dangling_blobs/comment_1_120681851a595909e19afcc0334383ec._comment create mode 100644 doc/forum/dbus_and_magicmime_build_flags.mdwn create mode 100644 doc/forum/dbus_and_magicmime_build_flags/comment_1_9d2ae829a085582c69dcf994c26f5a0c._comment create mode 100644 doc/forum/dbus_and_magicmime_build_flags/comment_2_5421641e133cdadd0be5587b882ed3e5._comment create mode 100644 doc/forum/default_repo_version_is_still_5__63__.mdwn create mode 100644 doc/forum/default_repo_version_is_still_5__63__/comment_1_5f63f10cf79ef8ca33214ceaefd1271e._comment create mode 100644 doc/forum/deploy.mdwn create mode 100644 doc/forum/deploy/comment_1_bd9855cc19f0f49620258564845f1f77._comment create mode 100644 doc/forum/dev_machine_-__62___NAS_-__62___cloud.mdwn create mode 100644 doc/forum/dev_machine_-__62___NAS_-__62___cloud/comment_1_f77818a766f2b41d13ced2bcf4447de0._comment create mode 100644 doc/forum/differenc_in_webapp_icons__63__.mdwn create mode 100644 doc/forum/differenc_in_webapp_icons__63__/comment_1_c38e2692b13a1b76777bf88312a03966._comment create mode 100644 doc/forum/difference_between_full_backup_and_number_of_copies__63__.mdwn create mode 100644 doc/forum/difference_between_full_backup_and_number_of_copies__63__/comment_1_df1850059a7a3006db7cb5c588dac3d7._comment create mode 100644 doc/forum/difference_between_uninit_and_unlock.mdwn create mode 100644 doc/forum/difference_between_uninit_and_unlock/comment_1_6b89cffc10650c087dbbfbdd3e099b5f._comment create mode 100644 doc/forum/distributed_borg.mdwn create mode 100644 doc/forum/distributed_borg/comment_1_133d5adb83e9df38c513e17d128486d1._comment create mode 100644 doc/forum/distributed_borg/comment_2_1dcf100a28991c664681d78ed4c12e39._comment create mode 100644 doc/forum/distributed_borg/comment_3_f56ac8a714facc8aafb60d3da815021b._comment create mode 100644 doc/forum/distributed_borg/comment_4_cf173923509ec826a1962f9a934b5a64._comment create mode 100644 doc/forum/do_not_use_git-annex_inside_your_Dropbox.mdwn create mode 100644 doc/forum/do_not_use_git-annex_inside_your_Dropbox/comment_1_5a1dc9da6e6861829e321446ec7991ee._comment create mode 100644 doc/forum/does_git-annex_parallelize_different_remotes__63__.mdwn create mode 100644 doc/forum/does_git-annex_parallelize_different_remotes__63__/comment_1_764f43b51a075a8c94b433eda0cff946._comment create mode 100644 doc/forum/does_git-annex_parallelize_different_remotes__63__/comment_2_dff46561e15ba5f386dc9cecb9c88e20._comment create mode 100644 doc/forum/does_git-annex_parallelize_different_remotes__63__/comment_3_47269e2c40c5ce27ca197ddfd5ac85c3._comment create mode 100644 doc/forum/does_git-annex_parallelize_different_remotes__63__/comment_4_b9444184ab653718fca9df5c2068ad3c._comment create mode 100644 doc/forum/does_git-annex_parallelize_different_remotes__63__/comment_5_5098db1fad3290cba49ea1c1163cc168._comment create mode 100644 doc/forum/does_git-annex_parallelize_different_remotes__63__/comment_6_ac6b01d2ff9dfe6060be5956d5adb632._comment create mode 100644 doc/forum/does_git-annex_parallelize_different_remotes__63__/comment_7_101543247268097f7535660efe0d39d8._comment create mode 100644 doc/forum/done_bugs_are_missing.mdwn create mode 100644 doc/forum/done_bugs_are_missing/comment_1_400c15824ec84bd67583102a023edcf8._comment create mode 100644 doc/forum/done_bugs_are_missing/comment_2_1fdcfb4ed807e424fe73f134c4ad9526._comment create mode 100644 doc/forum/done_bugs_are_missing/comment_3_6eb74e1bcf6b062b61b25e59b0b1ddc6._comment create mode 100644 doc/forum/dot_git_slash_annex_slash_tmp.mdwn create mode 100644 doc/forum/dot_git_slash_annex_slash_tmp/comment_10_14b74438bb1e3e02cff7926d774ba09a._comment create mode 100644 doc/forum/dot_git_slash_annex_slash_tmp/comment_11_b1f717342c1c8ea42a451caa2d936622._comment create mode 100644 doc/forum/dot_git_slash_annex_slash_tmp/comment_12_e2c6ad99333018c8c46e736da416b8ef._comment create mode 100644 doc/forum/dot_git_slash_annex_slash_tmp/comment_13_35ae9d6bcb8d9762a92e3564b686ed72._comment create mode 100644 doc/forum/dot_git_slash_annex_slash_tmp/comment_14_92b1e8956513dbf52da31cec3f58e2c5._comment create mode 100644 doc/forum/dot_git_slash_annex_slash_tmp/comment_15_839e29d41de9dcc8f01dfdc585a51d12._comment create mode 100644 doc/forum/dot_git_slash_annex_slash_tmp/comment_1_1a35ef8cb89e0cd392f6e9fcee1fb92c._comment create mode 100644 doc/forum/dot_git_slash_annex_slash_tmp/comment_2_f4cc36c493d7c20fbaf949edd38e1252._comment create mode 100644 doc/forum/dot_git_slash_annex_slash_tmp/comment_3_69268f8aa29e807a56248f1fac86aa41._comment create mode 100644 doc/forum/dot_git_slash_annex_slash_tmp/comment_4_0ffb0c803c232a1587f956f16113aeb7._comment create mode 100644 doc/forum/dot_git_slash_annex_slash_tmp/comment_5_c303e28825241733d69fca74f2015fc6._comment create mode 100644 doc/forum/dot_git_slash_annex_slash_tmp/comment_6_3f0b376e37bd092b8d46c46bb1940e35._comment create mode 100644 doc/forum/dot_git_slash_annex_slash_tmp/comment_7_615641b3dd176d4b3a5bbfb521098e38._comment create mode 100644 doc/forum/dot_git_slash_annex_slash_tmp/comment_8_4600fa9234a787004ea0e0dbb36184b9._comment create mode 100644 doc/forum/dot_git_slash_annex_slash_tmp/comment_9_4f5cd0d0d4db0479c1ad86ffdc5ae434._comment create mode 100644 doc/forum/download_from_multiple_remotes_in_parallel.mdwn create mode 100644 doc/forum/download_from_multiple_remotes_in_parallel/comment_1_81e2612ddaffefec81455e9ff706c4c9._comment create mode 100644 doc/forum/downloading_from_moodle.mdwn create mode 100644 doc/forum/downloading_from_moodle/comment_1_3f677130d268de4288e87cfa86ea055c._comment create mode 100644 doc/forum/downloading_from_moodle/comment_2_dcef60ec144f123dadd165fb602ab950._comment create mode 100644 doc/forum/downloading_from_moodle/comment_3_d3efb767bf9b20f96242dcf64817bd4b._comment create mode 100644 doc/forum/downloading_mp4_by_default_with_importfeed.mdwn create mode 100644 doc/forum/downloading_mp4_by_default_with_importfeed/comment_1_c9e5a3700764faa33d2c68de6a8236dc._comment create mode 100644 doc/forum/downloading_mp4_by_default_with_importfeed/comment_2_ade70b45f49eb3eaf127ba7b2bd37900._comment create mode 100644 doc/forum/drop__47__whereis_not_showing_gcrypted_special_ssh_remote.mdwn create mode 100644 doc/forum/drop__47__whereis_not_showing_gcrypted_special_ssh_remote/comment_1_968bc2be595008790e9b93d82342714c._comment create mode 100644 doc/forum/drop__47__whereis_not_showing_gcrypted_special_ssh_remote/comment_2_2c14d88e55ea7d4edc90ce0091025f32._comment create mode 100644 doc/forum/drop_old_versions_of_a_file.mdwn create mode 100644 doc/forum/drop_old_versions_of_a_file/comment_1_799a413248fb8f98efbf226b1bc4300d._comment create mode 100644 doc/forum/dropped_files_keep_coming_back.mdwn create mode 100644 doc/forum/dropped_files_keep_coming_back/comment_1_84655c21f59b3904c950ddccccde53d8._comment create mode 100644 doc/forum/dropped_files_keep_coming_back/comment_2_223550574fa69effabe57c4bf257e54b._comment create mode 100644 doc/forum/dropped_files_keep_coming_back/comment_3_1a2ee19bfb3d56a2e2641dbcd89d8be2._comment create mode 100644 doc/forum/dropped_files_keep_coming_back/comment_4_02a6e3591acfa410ed7c7917dc573663._comment create mode 100644 doc/forum/duplicated_content___40__user_error__41__._How_to_fix__63__.mdwn create mode 100644 doc/forum/duplicated_content___40__user_error__41__._How_to_fix__63__/comment_1_bb6d749b758b17178227929bf7327fe1._comment create mode 100644 doc/forum/duplicated_content___40__user_error__41__._How_to_fix__63__/comment_2_d834df30633f7d5569797ee818cf38c3._comment create mode 100644 doc/forum/duplicated_content___40__user_error__41__._How_to_fix__63__/comment_3_1e02eff33c9fa7bea03aa6d58b910175._comment create mode 100644 doc/forum/duplicates_with_suffixes_differing_only_in_case.mdwn create mode 100644 doc/forum/duplicates_with_suffixes_differing_only_in_case/comment_1_0c1bb4347902054ec97ef86eb903f060._comment create mode 100644 doc/forum/duplicates_with_suffixes_differing_only_in_case/comment_2_62bb4be1b31bd64a046763f68a2953ce._comment create mode 100644 doc/forum/duplicates_with_suffixes_differing_only_in_case/comment_3_99a2e752c75e5ad2ea36254627be8d18._comment create mode 100644 doc/forum/empty_directory_handling.mdwn create mode 100644 doc/forum/empty_directory_handling/comment_1_34ac97b9337b6230ed8a4748203fe543._comment create mode 100644 doc/forum/empty_directory_handling/comment_2_73a39e28d5a09ac342cb4195d263d91e._comment create mode 100644 doc/forum/enabling_git-annex-diffdriver_for_gitk.mdwn create mode 100644 doc/forum/endless_password_prompt_loop.mdwn create mode 100644 doc/forum/endless_password_prompt_loop/comment_1_cceba12ed25cd671c7cee5a28631163e._comment create mode 100644 doc/forum/endless_password_prompt_loop/comment_2_f0cb86b45eb289f35197c43f83660a8f._comment create mode 100644 doc/forum/endless_password_prompt_loop/comment_3_eb1dce6d9af6e19cf77df63da1a68425._comment create mode 100644 doc/forum/error__58___bogus_format_in_GIT__95__CONFIG__95__PARAMETERS.mdwn create mode 100644 doc/forum/error__58___bogus_format_in_GIT__95__CONFIG__95__PARAMETERS/comment_1_aa740c16099f24fd8a067ef23435d0d4._comment create mode 100644 doc/forum/error__58___bogus_format_in_GIT__95__CONFIG__95__PARAMETERS/comment_2_5bcd8554e33a716208ca205d7c0467df._comment create mode 100644 doc/forum/error__58___bogus_format_in_GIT__95__CONFIG__95__PARAMETERS/comment_3_c3bca82915cc8bd35d3f41fc95436a18._comment create mode 100644 doc/forum/error__58___refs__47__heads__47__git-annex_does_not_point_to_a_valid_object__33__.mdwn create mode 100644 doc/forum/error__58___refs__47__heads__47__git-annex_does_not_point_to_a_valid_object__33__/comment_1_d370b044da3bfebf9e4c90ce1e243587._comment create mode 100644 doc/forum/error_in_installation_of_base-4.5.0.0.mdwn create mode 100644 doc/forum/error_in_installation_of_base-4.5.0.0/comment_1_0b2f79c014e0dd9badd52b8b6aa47e0c._comment create mode 100644 doc/forum/error_in_installation_of_base-4.5.0.0/comment_2_3badd64e48fbb174cd7de1ac9589bedf._comment create mode 100644 doc/forum/error_in_installation_of_base-4.5.0.0/comment_3_d8190061ac1c683a7b699cf42e9db694._comment create mode 100644 doc/forum/error_in_installation_of_base-4.5.0.0/comment_4_49a4fcd2dc4f97d4055b5051feea5e3b._comment create mode 100644 doc/forum/error_setting_up_centralized_server_on_OSX_-_failed_to_get_annex.uuid_configuration_of_repository_origin.mdwn create mode 100644 doc/forum/error_setting_up_centralized_server_on_OSX_-_failed_to_get_annex.uuid_configuration_of_repository_origin/comment_1_943ff286824bd59a164b161553d65698._comment create mode 100644 doc/forum/example_of_massively_disconnected_operation.mdwn create mode 100644 doc/forum/exclude_files_from_annex.mdwn create mode 100644 doc/forum/exclude_files_from_annex/comment_1_82e7de5e631bae3b347815586274a936._comment create mode 100644 doc/forum/exclude_files_from_annex/comment_2_03d4599fdceb3dff184eed82824674bc._comment create mode 100644 doc/forum/expire_files__44___move_to_other_hosts.mdwn create mode 100644 doc/forum/expire_files__44___move_to_other_hosts/comment_1_ddcc2a00be1ae96a352d75a443458bcf._comment create mode 100644 doc/forum/expire_files__44___move_to_other_hosts/comment_2_7a4c3858c5eae409d04de3f9da43b57e._comment create mode 100644 doc/forum/export_single_file.mdwn create mode 100644 doc/forum/export_single_file/comment_1_36d97e3c3f07411f3d367da546759ea5._comment create mode 100644 doc/forum/export_single_file/comment_2_ec3d3fb7beb3312571ffa471c39aaf95._comment create mode 100644 doc/forum/export_single_file/comment_3_0761201bf68e1086d263776eb953c1e1._comment create mode 100644 doc/forum/export_tracking_not_enabled_when_branch_is_set.mdwn create mode 100644 doc/forum/export_tracking_not_enabled_when_branch_is_set/comment_1_c007c52d0a038c26e4f8fc50a2d23a18._comment create mode 100644 doc/forum/export_tracking_not_enabled_when_branch_is_set/comment_2_12c90792bd8c0c37bc53806843583733._comment create mode 100644 doc/forum/exporting_annexed_files.mdwn create mode 100644 doc/forum/exporting_annexed_files/comment_1_e08e4c79588e17fb2f1cdf53d9fab7ea._comment create mode 100644 doc/forum/exporting_annexed_files/comment_2_15dc3024417b5b2ff3544a08beacab34._comment create mode 100644 doc/forum/exporting_annexed_files/comment_3_86f0e0f767a84a0f583e121d36cb7d48._comment create mode 100644 doc/forum/exporttree__61__yes_always_untrusted__63__.mdwn create mode 100644 doc/forum/exporttree__61__yes_always_untrusted__63__/comment_1_fb579729238a36d5c3369ed07dd772ae._comment create mode 100644 doc/forum/external_special_remote_protocol_and_threads.mdwn create mode 100644 doc/forum/external_special_remote_protocol_and_threads/comment_1_f29c2b0f0f5e349e36eb47176e33498f._comment create mode 100644 doc/forum/external_special_remote_protocol_and_threads/comment_2_df97223aad2c8c95ce109944d64a59fe._comment create mode 100644 doc/forum/fail_to_git_annex_add_some_files__58___getFileStatus__58___does_not_exist__40__v_3.20111231__41__.mdwn create mode 100644 doc/forum/fail_to_git_annex_add_some_files__58___getFileStatus__58___does_not_exist__40__v_3.20111231__41__/comment_1_990197bf01351dc1ccbe1940d5084adb._comment create mode 100644 doc/forum/fail_to_git_annex_add_some_files__58___getFileStatus__58___does_not_exist__40__v_3.20111231__41__/comment_2_3bb1d21b7f0d0bd6d59190ae9d246d46._comment create mode 100644 doc/forum/fail_to_git_annex_add_some_files__58___getFileStatus__58___does_not_exist__40__v_3.20111231__41__/comment_3_692f268218690437138ae0540c879425._comment create mode 100644 doc/forum/failed_to_push_anonymously.mdwn create mode 100644 doc/forum/failed_to_push_anonymously/comment_1_bdf93b0e9fb109b7a4052a99110f6079._comment create mode 100644 doc/forum/failing_to_add_an_usb_drive_made_me_lose_all_symlinks.mdwn create mode 100644 doc/forum/failing_to_add_an_usb_drive_made_me_lose_all_symlinks/comment_1_3167052f67706797b00423a50f2ae7f1._comment create mode 100644 doc/forum/failing_to_add_an_usb_drive_made_me_lose_all_symlinks/comment_2_0082ac7a148db69293a4e37fa6d6c891._comment create mode 100644 doc/forum/failing_to_add_an_usb_drive_made_me_lose_all_symlinks/comment_2_6411aa3e6f5c1515845f3223bbcdabf1._comment create mode 100644 doc/forum/faking_location_information.mdwn create mode 100644 doc/forum/fatal_-_corrupt_loose_object.mdwn create mode 100644 doc/forum/fatal_-_corrupt_loose_object/comment_1_7b0da4185861fd5ff2a7345410678f82._comment create mode 100644 doc/forum/fatal__58___Not_a_valid_object_name_repository.mdwn create mode 100644 doc/forum/fatal__58___Not_a_valid_object_name_repository/comment_1_48f1ee21d24a99723ff455c0c9c96629._comment create mode 100644 doc/forum/fatal__58___Not_a_valid_object_name_repository/comment_2_eef07cc389400c38b666da4e1adc255e._comment create mode 100644 doc/forum/fatal__58___Not_a_valid_object_name_repository/comment_3_2760c9b8b755e1ed5e01b98ea3b99177._comment create mode 100644 doc/forum/fatal__58___Not_a_valid_object_name_repository/comment_4_344561606daab9bc1a05ec3b857b2d62._comment create mode 100644 doc/forum/fatal__58___Out_of_memory__63___mmap_failed__58___No_such_file_or_directory.mdwn create mode 100644 doc/forum/fatal__58___Out_of_memory__63___mmap_failed__58___No_such_file_or_directory/comment_1_d98a155fa01d10ecff9058d79290156d._comment create mode 100644 doc/forum/fatal__58___Out_of_memory__63___mmap_failed__58___No_such_file_or_directory/comment_2_3b9ea7a1254ac5b50a5ab59cd331ec3f._comment create mode 100644 doc/forum/fatal__58___Out_of_memory__63___mmap_failed__58___No_such_file_or_directory/comment_3_5ee300034819c5825c676cd7e3af659f._comment create mode 100644 doc/forum/fatal__58___Out_of_memory__63___mmap_failed__58___No_such_file_or_directory/comment_4_cf7f5c91d3c15f72d2a714b7362c1197._comment create mode 100644 doc/forum/fatal__58___export-tree_object_is_unavailable.mdwn create mode 100644 doc/forum/fatal__58___export-tree_object_is_unavailable/comment_1_e101855120be3639fce9f3725737b189._comment create mode 100644 doc/forum/files_being_dropped_undesirably.mdwn create mode 100644 doc/forum/files_being_dropped_undesirably/comment_1_d03f8ed7d3f3da58612bf238c1790fb4._comment create mode 100644 doc/forum/files_being_dropped_undesirably/comment_2_7d885abebfec789348639494b1bb1829._comment create mode 100644 doc/forum/files_being_dropped_undesirably/comment_3_7c70b58f89408304055eefb1b166ef2e._comment create mode 100644 doc/forum/files_got_replaced_by_broken_symblinks__44___how_to_get_them_back__63__.mdwn create mode 100644 doc/forum/files_got_replaced_by_broken_symblinks__44___how_to_get_them_back__63__/comment_1_4d07f87b433228fdaebce2805fc64492._comment create mode 100644 doc/forum/files_got_replaced_by_broken_symblinks__44___how_to_get_them_back__63__/comment_2_97d24db6027270b9f2d759e98d5f428f._comment create mode 100644 doc/forum/files_got_replaced_by_broken_symblinks__44___how_to_get_them_back__63__/comment_3_e61107dd83efecc3266217acad9c943b._comment create mode 100644 doc/forum/files_got_replaced_by_broken_symblinks__44___how_to_get_them_back__63__/comment_4_362370f02ea77addf9efaed9cb4b433a._comment create mode 100644 doc/forum/files_got_replaced_by_broken_symblinks__44___how_to_get_them_back__63__/comment_5_4333c2f189cea3430104ece6769143bc._comment create mode 100644 doc/forum/files_got_replaced_by_broken_symblinks__44___how_to_get_them_back__63__/comment_6_8c4c2e8dc4706ca824cbbc9b2ed62be4._comment create mode 100644 doc/forum/files_got_replaced_by_broken_symblinks__44___how_to_get_them_back__63__/comment_7_24b09f1263f6bc6b219085c17ced915c._comment create mode 100644 doc/forum/files_only_visible_in_.git_annex.mdwn create mode 100644 doc/forum/files_only_visible_in_.git_annex/comment_1_a967dc488d4fb0fd6079b0a1b087679f._comment create mode 100644 doc/forum/files_only_visible_in_.git_annex/comment_2_e024e26b943f49a5e63c8fd1cd90a420._comment create mode 100644 doc/forum/files_only_visible_in_.git_annex/comment_3_2c3d5991056d5915225b2707ad7d25dd._comment create mode 100644 doc/forum/files_vanishing.mdwn create mode 100644 doc/forum/files_vanishing/comment_1_eb69e88aee0005fca74dd540293e57ca._comment create mode 100644 doc/forum/finding_out_why_git_annex_import_failed.mdwn create mode 100644 doc/forum/finding_out_why_git_annex_import_failed/comment_1_276bbd2dab64e4bbc297e0e53e02215d._comment create mode 100644 doc/forum/first-time_setup_git-annex.mdwn create mode 100644 doc/forum/first-time_setup_git-annex/comment_1_a58d83ee3a7c2251d9a775847223f8ca._comment create mode 100644 doc/forum/flickrannex_--_not_sure_I_get_it.mdwn create mode 100644 doc/forum/flickrannex_--_not_sure_I_get_it/comment_1_57ea9f26760f970a70f09934d31a79b5._comment create mode 100644 doc/forum/flickrannex_--_not_sure_I_get_it/comment_2_ba93563b4ce1f6497a9f1d5e6eb0d1bb._comment create mode 100644 doc/forum/flickrannex_--_not_sure_I_get_it/comment_3_74f143965f48c89a3583acf1b6a7635a._comment create mode 100644 doc/forum/flickrannex_--_not_sure_I_get_it/comment_4_493bb86dedfa91ccc0c9be4045953ee4._comment create mode 100644 doc/forum/flickrannex_--_not_sure_I_get_it/comment_5_2c410aa478b21c0e6eb0e4d54bc8c362._comment create mode 100644 doc/forum/folder_size_question.mdwn create mode 100644 doc/forum/folder_size_question/comment_1_782cbf836335d86ff29853c34f00fec3._comment create mode 100644 doc/forum/folder_size_question/comment_2_391aa62e4d8c496a58be4707522d8edb._comment create mode 100644 doc/forum/folder_size_question/comment_3_1e850dbe36fafe0505b60dd2ce0bd5d7._comment create mode 100644 doc/forum/folder_size_question/comment_4_907f3b1cfe745abf94a6a8ba0dbd4396._comment create mode 100644 doc/forum/forumbug.mdwn create mode 100644 doc/forum/freebsd_git-annex_seems_to_be_in_an_upgrade_loop.mdwn create mode 100644 doc/forum/freebsd_git-annex_seems_to_be_in_an_upgrade_loop/comment_1_ce8e7f58c3b81ec334436726be70bde5._comment create mode 100644 doc/forum/freebsd_git-annex_seems_to_be_in_an_upgrade_loop/comment_2_43cdcdfff3aaa4482e6182d3dd77b61a._comment create mode 100644 doc/forum/fsck_gives_false_positives.mdwn create mode 100644 doc/forum/fsck_gives_false_positives/comment_1_b91070218b9d5fb687eeee1f244237ad._comment create mode 100644 doc/forum/fsck_gives_false_positives/comment_2_f51c53f3f6e6ee1ad463992657db5828._comment create mode 100644 doc/forum/fsck_gives_false_positives/comment_3_692d6d4cd2f75a497e7d314041a768d2._comment create mode 100644 doc/forum/fsck_gives_false_positives/comment_4_7ceb395bf8a2e6a041ccd8de63b1b6eb._comment create mode 100644 doc/forum/fsck_gives_false_positives/comment_5_86484a504c3bbcecd5876982b9c95688._comment create mode 100644 doc/forum/fsck_gives_false_positives/comment_6_1d4fbbd212fa92967abda346323031f4._comment create mode 100644 doc/forum/ga-ncdu.mdwn create mode 100644 doc/forum/ga-ncdu/comment_1_cde3f7bbd099b303bacdaa5e1588b71e._comment create mode 100644 doc/forum/ga-ncdu/comment_2_8d369dc264ccaf80490c1cb37a330239._comment create mode 100644 doc/forum/ga-ncdu/comment_3_c5ce3b663de76b50754de70b3fb23bf0._comment create mode 100644 doc/forum/ga_dev_newbie_Q__58___pointers_to_start_playing_with_metadata_cache_plz.mdwn create mode 100644 doc/forum/ga_dev_newbie_Q__58___pointers_to_start_playing_with_metadata_cache_plz/comment_1_0547fcabefe0b8e99a43977ffec3e28c._comment create mode 100644 doc/forum/ga_dev_newbie_Q__58___pointers_to_start_playing_with_metadata_cache_plz/comment_2_606281f102d8c3168cbc55142a996e05._comment create mode 100644 doc/forum/ga_dev_newbie_Q__58___pointers_to_start_playing_with_metadata_cache_plz/comment_3_ca138f01184631135d07835d79a95112._comment create mode 100644 doc/forum/ga_dev_newbie_Q__58___pointers_to_start_playing_with_metadata_cache_plz/comment_4_750e5eaac44e53030be18858c03cbe6c._comment create mode 100644 doc/forum/gadu_-_git-annex_disk_usage.mdwn create mode 100644 doc/forum/gadu_-_git-annex_disk_usage/comment_10_f632a62c4dbbf01b29f146893d7725f9._comment create mode 100644 doc/forum/gadu_-_git-annex_disk_usage/comment_11_73461da2d55d040cb43e0db286975821._comment create mode 100644 doc/forum/gadu_-_git-annex_disk_usage/comment_12_6c4fb123091bde435c18ac3dfd5a9b77._comment create mode 100644 doc/forum/gadu_-_git-annex_disk_usage/comment_13_8e0e86ae716ff018025808f417e1f7f6._comment create mode 100644 doc/forum/gadu_-_git-annex_disk_usage/comment_14_d8f69914b88feb3f3ed4f72c26dd74e5._comment create mode 100644 doc/forum/gadu_-_git-annex_disk_usage/comment_1_067d0ffe8900751bd2d2743254ac4d77._comment create mode 100644 doc/forum/gadu_-_git-annex_disk_usage/comment_2_ec8b57426e4d82c3392eb7dd683f2ddc._comment create mode 100644 doc/forum/gadu_-_git-annex_disk_usage/comment_3_38296fef5a2dc5794c2dc09df676b8c1._comment create mode 100644 doc/forum/gadu_-_git-annex_disk_usage/comment_4_1bcc94f9982c6cfd0888f3dba0f9221e._comment create mode 100644 doc/forum/gadu_-_git-annex_disk_usage/comment_5_4365cd3031456fac1b563ee72984638e._comment create mode 100644 doc/forum/gadu_-_git-annex_disk_usage/comment_6_2b03d7b857497cb811e992f85700cdcc._comment create mode 100644 doc/forum/gadu_-_git-annex_disk_usage/comment_7_03a4dfaf3bd73d41c6f3c3fab0a6a922._comment create mode 100644 doc/forum/gadu_-_git-annex_disk_usage/comment_8_fc6ddb4dc075ee42368863c1b026dbf7._comment create mode 100644 doc/forum/gadu_-_git-annex_disk_usage/comment_9_f03254e518cbdda73e4b88e72476275d._comment create mode 100644 doc/forum/gcrypt_os_x_app_vs_brew.mdwn create mode 100644 doc/forum/gcrypt_os_x_app_vs_brew/comment_1_cce5e2c16720cc8e32a4a479f50ce6b3._comment create mode 100644 doc/forum/gcrypt_os_x_app_vs_brew/comment_2_8df8ba1ccea0f68110593ed90a9cad6d._comment create mode 100644 doc/forum/gcrypt_os_x_app_vs_brew/comment_3_be4de1663a37f49a4e42d6b21c0178fe._comment create mode 100644 doc/forum/get_and_copy_with_bare_repositories.mdwn create mode 100644 doc/forum/get_and_copy_with_bare_repositories/comment_1_a6e4628c0770e3f5e81348a6f29dd845._comment create mode 100644 doc/forum/get_and_copy_with_bare_repositories/comment_2_652fa1bae5c2bb63dcffcbda97a567c4._comment create mode 100644 doc/forum/get_content_of_a_file_from_a_file.mdwn create mode 100644 doc/forum/get_content_of_a_file_from_a_file/comment_1_174fe84e87b31419295af3397db19671._comment create mode 100644 doc/forum/get_content_of_a_file_from_a_file/comment_2_9cc8905f867fedbf2b10c9ad84294543._comment create mode 100644 doc/forum/get_fails.mdwn create mode 100644 doc/forum/get_fails/comment_1_9c81adaedf2b526f735ed39cb9d24709._comment create mode 100644 doc/forum/get_fails/comment_2_4ef8a59e82e38861fd36befde1ff9542._comment create mode 100644 doc/forum/get_fails/comment_3_b4359d19a002a2903a895beae3888b4e._comment create mode 100644 doc/forum/get_fails/comment_4_6227b1df801927cdf7a2edcc86bbdfee._comment create mode 100644 doc/forum/get_fails/comment_5_472d50770325a87cc0daae3e6067558c._comment create mode 100644 doc/forum/get_fails/comment_6_35174be903f055adf06af2fcdef807e3._comment create mode 100644 doc/forum/getting_git_annex_to_do_a_force_copy_to_a_remote.mdwn create mode 100644 doc/forum/getting_git_annex_to_do_a_force_copy_to_a_remote/comment_1_3deb2c31cad37a49896f00d600253ee3._comment create mode 100644 doc/forum/getting_git_annex_to_do_a_force_copy_to_a_remote/comment_2_627f54d158d3ca4b72e45b4da70ff5cd._comment create mode 100644 doc/forum/getting_git_annex_to_do_a_force_copy_to_a_remote/comment_3_3f49dab11aae5df0c4eb5e4b8d741379._comment create mode 100644 doc/forum/ghost_semitrusted_repositories.mdwn create mode 100644 doc/forum/ghost_semitrusted_repositories/comment_1_99bea1a964da9c5603b8cfbdc19bcde8._comment create mode 100644 doc/forum/ghost_semitrusted_repositories/comment_2_fe5fe5539d06c6b1ef69f3ed805f1ab4._comment create mode 100644 doc/forum/ghost_semitrusted_repositories/comment_3_588325ef52c80cfc67d1dd80a9d5bd13._comment create mode 100644 doc/forum/git-annes_assistant_+_MAC_OSX_questions.mdwn create mode 100644 doc/forum/git-annes_assistant_+_MAC_OSX_questions/comment_1_e661f31acd08a6459842f7f95e5c062b._comment create mode 100644 doc/forum/git-annes_assistant_+_MAC_OSX_questions/comment_2_e71a9d1fcf1f945fec0b7834b6038e91._comment create mode 100644 doc/forum/git-annes_assistant_+_MAC_OSX_questions/comment_3_372d9da8295d093b8b316f0a48b60ee1._comment create mode 100644 doc/forum/git-annes_assistant_+_MAC_OSX_questions/comment_4_573537a49e082515bfb1be84c91b5d1b._comment create mode 100644 doc/forum/git-annex-addunused_with_original_path+filename.mdwn create mode 100644 doc/forum/git-annex-addunused_with_original_path+filename/comment_1_b24b20d6351d0373f9517438c33f05c1._comment create mode 100644 doc/forum/git-annex-addunused_with_original_path+filename/comment_2_cddedfd83ee154f44b83f2414eb103d0._comment create mode 100644 doc/forum/git-annex-import_questions.mdwn create mode 100644 doc/forum/git-annex-import_questions/comment_1_e353e5ae20ba379c42fb39825c57147e._comment create mode 100644 doc/forum/git-annex-repair_not_able_to_see_external_remotes.mdwn create mode 100644 doc/forum/git-annex-repair_not_able_to_see_external_remotes/comment_1_b30811d84190110b9d084e42bd4a6282._comment create mode 100644 doc/forum/git-annex-sync_and_git-annex-config.mdwn create mode 100644 doc/forum/git-annex-sync_and_git-annex-config/comment_1_1372a7d54e7ef017cc4fa34358c122e0._comment create mode 100644 doc/forum/git-annex-sync_and_git-annex-config/comment_2_dd5cd6f18b3d0d9cf6ad97181fcbf4b1._comment create mode 100644 doc/forum/git-annex-sync_and_git-annex-config/comment_3_46b1ab0fcc3b9e5a974d1bf1c4d912e6._comment create mode 100644 doc/forum/git-annex-sync_and_git-annex-config/comment_4_e4e1d59b43fc954189306de242c37dcc._comment create mode 100644 doc/forum/git-annex-sync_with_bitbucket.mdwn create mode 100644 doc/forum/git-annex-sync_with_bitbucket/comment_1_b95e03d119c83ac061c470801b157d55._comment create mode 100644 doc/forum/git-annex-sync_with_bitbucket/comment_2_31f7eae218447a17f316a8d13dd97ca0._comment create mode 100644 doc/forum/git-annex-sync_with_bitbucket/comment_3_eddbd42891a1877148a8920f19fb780e._comment create mode 100644 doc/forum/git-annex-sync_without_syncing_master.mdwn create mode 100644 doc/forum/git-annex-sync_without_syncing_master/comment_1_8ed0014e53a7ab49d76c072de074adda._comment create mode 100644 doc/forum/git-annex-sync_without_syncing_master/comment_2_585648a04a02760a1f16394c00728d79._comment create mode 100644 doc/forum/git-annex-sync_without_syncing_master/comment_3_233c20435643d2701c94a2cf30ca6483._comment create mode 100644 doc/forum/git-annex-sync_without_syncing_master/comment_4_a8f681ec33f2fef16b9b8eb6633f8fe4._comment create mode 100644 doc/forum/git-annex-sync_without_syncing_master/comment_5_a125638afe0cf57fe97e6051da943406._comment create mode 100644 doc/forum/git-annex-watch_clarification.mdwn create mode 100644 doc/forum/git-annex-watch_clarification/comment_1_66de424e6d09b67cb75f6ddfef1424b2._comment create mode 100644 doc/forum/git-annex-watch_clarification/comment_2_aa709c1ee602ae3211f36cba68c155c4._comment create mode 100644 doc/forum/git-annex-watch_clarification/comment_3_db050d4b4d08100c6be204cd64ebfbf3._comment create mode 100644 doc/forum/git-annex-watch_clarification/comment_4_7255d87f5802a8d12204e4afc797070d._comment create mode 100644 doc/forum/git-annex-watch_clarification/comment_5_4a1b1176bf2499db67ffea2cce3115df._comment create mode 100644 doc/forum/git-annex-watch_clarification/comment_6_69a3377204ea4b102d9c15fb160e71b2._comment create mode 100644 doc/forum/git-annex_6.20170520_doesn__39__t_build_with_QuickCheck_2.10.mdwn create mode 100644 doc/forum/git-annex_6.20170520_doesn__39__t_build_with_QuickCheck_2.10/comment_1_0e25ab25c0fa3d41336e6b7551ef9e47._comment create mode 100644 doc/forum/git-annex_SSH_server_+_cloud_remote.mdwn create mode 100644 doc/forum/git-annex__58___getUserEntryForID__58___does_not_exist___40__no_such_user__41___.mdwn create mode 100644 doc/forum/git-annex__58___getUserEntryForID__58___does_not_exist___40__no_such_user__41___/comment_1_94d92b7e64ad31db8837dcf3d131cf23._comment create mode 100644 doc/forum/git-annex__58___getUserEntryForID__58___does_not_exist___40__no_such_user__41___/comment_2_c9474c4e925948d0cabdfe7f988e1ebe._comment create mode 100644 doc/forum/git-annex__58___getUserEntryForID__58___does_not_exist___40__no_such_user__41___/comment_3_3a9e1cb8f36a44fd1917b5fc191776a3._comment create mode 100644 doc/forum/git-annex__58___map__58___1_failed.mdwn create mode 100644 doc/forum/git-annex__58___map__58___1_failed/comment_1_35ff3256e823ab8cfc53276a2123ad5f._comment create mode 100644 doc/forum/git-annex__58___map__58___1_failed/comment_2_b0826073ebbd2847f4ab0d9bdba2dce5._comment create mode 100644 doc/forum/git-annex__58___openFile__58___resource_busy___40__file_is_locked__41__.mdwn create mode 100644 doc/forum/git-annex__58___openFile__58___resource_busy___40__file_is_locked__41__/comment_1_0a5894ed2c5e0b8155e69ff85741a51a._comment create mode 100644 doc/forum/git-annex__58___openFile__58___resource_busy___40__file_is_locked__41__/comment_2_85dc89b0f0ad813321b034f3fd3a83a9._comment create mode 100644 doc/forum/git-annex__58___openFile__58___resource_busy___40__file_is_locked__41__/comment_3_4462c0640e11e20a8655743ecc78eaaa._comment create mode 100644 doc/forum/git-annex__58___unknown_response_from_git_cat-file.mdwn create mode 100644 doc/forum/git-annex__58___unknown_response_from_git_cat-file/comment_1_96ad30294a6f18c0f73be1136de47632._comment create mode 100644 doc/forum/git-annex___38___ikiwiki_experiment.mdwn create mode 100644 doc/forum/git-annex___38___ikiwiki_experiment/comment_1_9f74449ec91577dbf6095f4beafac293._comment create mode 100644 doc/forum/git-annex___38___ikiwiki_experiment/comment_2_e034585c8b51cc30b35c1f7ae68205bf._comment create mode 100644 doc/forum/git-annex___38___ikiwiki_experiment/comment_3_fbbd47c3dbe8de24b0df664e4afd5cb8._comment create mode 100644 doc/forum/git-annex___38___ikiwiki_experiment/comment_4_55da5c3c41c13b08590ce1ff8117cef6._comment create mode 100644 doc/forum/git-annex___38___ikiwiki_experiment/comment_5_f67823351164ddfe7d595685c3679652._comment create mode 100644 doc/forum/git-annex___38___ikiwiki_experiment/comment_6_d5cc91164772849d027fed5f962d9000._comment create mode 100644 doc/forum/git-annex___38___ikiwiki_experiment/comment_7_cb4ec7ed3c39d0649133191a85ea6ab3._comment create mode 100644 doc/forum/git-annex___38___ikiwiki_experiment/comment_8_86565e5e1508ff1862f88975446650a2._comment create mode 100644 doc/forum/git-annex_across_two_filesystems.mdwn create mode 100644 doc/forum/git-annex_across_two_filesystems/comment_1_53167648b8b70b41d19ca662a5f3687e._comment create mode 100644 doc/forum/git-annex_across_two_filesystems/comment_2_39adeebc1af9c437f1fc2e00c07509bf._comment create mode 100644 doc/forum/git-annex_across_two_filesystems/comment_3_f4e3f28db005301adeef7ccd2c9998fb._comment create mode 100644 doc/forum/git-annex_across_two_filesystems/comment_4_53fa7ac6f80e3281768a7bfd3d438b34._comment create mode 100644 doc/forum/git-annex_across_two_filesystems/comment_5_2e1be54c01970ef3456e8af4aaf00cbf._comment create mode 100644 doc/forum/git-annex_across_two_filesystems/comment_6_aa6b153478f79c78e778865a99f01373._comment create mode 100644 doc/forum/git-annex_across_two_filesystems/comment_7_b87281c6a8b068cec60d2d5b7d015a23._comment create mode 100644 doc/forum/git-annex_add_out_of_memory_error.mdwn create mode 100644 doc/forum/git-annex_add_out_of_memory_error/comment_10_d90d392db9a4962f9f8eb0ee95bf2914._comment create mode 100644 doc/forum/git-annex_add_out_of_memory_error/comment_11_459f810fd06aab3ddeeba8207d774dc0._comment create mode 100644 doc/forum/git-annex_add_out_of_memory_error/comment_12_d7d3785b65b0608424b25056c9e3a139._comment create mode 100644 doc/forum/git-annex_add_out_of_memory_error/comment_1_a2331032781c2fa3cdf22c0dc6b5b869._comment create mode 100644 doc/forum/git-annex_add_out_of_memory_error/comment_2_de9d956d95cb41e2372eabbf672e0f67._comment create mode 100644 doc/forum/git-annex_add_out_of_memory_error/comment_3_91af8300d640c34ff2466c89ec7a234c._comment create mode 100644 doc/forum/git-annex_add_out_of_memory_error/comment_4_ef913a45e3d865d088cf11460cd88020._comment create mode 100644 doc/forum/git-annex_add_out_of_memory_error/comment_5_64008199df70f77ab64882339aa079f9._comment create mode 100644 doc/forum/git-annex_add_out_of_memory_error/comment_5_6a8580087688b4bbfc3241292df5422e._comment create mode 100644 doc/forum/git-annex_add_out_of_memory_error/comment_8_76a65b4edf4f6e3896f1593a197f24eb._comment create mode 100644 doc/forum/git-annex_add_out_of_memory_error/comment_8_ffbb059664541c92dcbf97c150d9b951._comment create mode 100644 doc/forum/git-annex_add_out_of_memory_error/comment_9_7ef671c0036c77ee5707a6e00dd4dd6a._comment create mode 100644 doc/forum/git-annex_and_bup_-_the_other_way_around___63____63____63__.mdwn create mode 100644 doc/forum/git-annex_and_bup_-_the_other_way_around___63____63____63__/comment_1_0bb5e21b4cbaaaa61fbdb2e0066f0ebf._comment create mode 100644 doc/forum/git-annex_and_bup_-_the_other_way_around___63____63____63__/comment_2_ab6420f7bc18e8143201c603c09a0d7e._comment create mode 100644 doc/forum/git-annex_and_tagfs.mdwn create mode 100644 doc/forum/git-annex_and_tagfs/comment_1_887c74cb61d30198322ef74ebc80f950._comment create mode 100644 doc/forum/git-annex_and_tagfs/comment_2_8769d6e57061023c0828af3e38faafba._comment create mode 100644 doc/forum/git-annex_and_tagfs/comment_3_d96948c444f9f485a329420b7c9e3b16._comment create mode 100644 doc/forum/git-annex_assistant_atempts_to_repair__44___but_never_finishes.mdwn create mode 100644 doc/forum/git-annex_assistant_atempts_to_repair__44___but_never_finishes/comment_1_a12892b2881969ddd6faa92d860e1bc8._comment create mode 100644 doc/forum/git-annex_assistant_with_2_dedicated_servers.mdwn create mode 100644 doc/forum/git-annex_assistant_with_2_dedicated_servers/comment_10_533ade2215c879cd46782fd66a97b167._comment create mode 100644 doc/forum/git-annex_assistant_with_2_dedicated_servers/comment_11_c9ae51d7b772cf7a91d90925f74d2b60._comment create mode 100644 doc/forum/git-annex_assistant_with_2_dedicated_servers/comment_12_41fbee0ec9bc890e309bcd48a58c3851._comment create mode 100644 doc/forum/git-annex_assistant_with_2_dedicated_servers/comment_13_571cffc0beb8ba5fc936db6971cd3d62._comment create mode 100644 doc/forum/git-annex_assistant_with_2_dedicated_servers/comment_14_0fb62af673a4bc8183e8fef048ceedd4._comment create mode 100644 doc/forum/git-annex_assistant_with_2_dedicated_servers/comment_1_53a79af2d8e3abe50b983bf91972b8f2._comment create mode 100644 doc/forum/git-annex_assistant_with_2_dedicated_servers/comment_2_c0ba3e8b7fbf8a5ed718001cec8df676._comment create mode 100644 doc/forum/git-annex_assistant_with_2_dedicated_servers/comment_3_60c39bc8ef74e80e72381d514b6dd223._comment create mode 100644 doc/forum/git-annex_assistant_with_2_dedicated_servers/comment_4_6241120b4325c905661ef72881f4d7af._comment create mode 100644 doc/forum/git-annex_assistant_with_2_dedicated_servers/comment_5_cab00b8fa195340f4d3fdaf5af975b57._comment create mode 100644 doc/forum/git-annex_assistant_with_2_dedicated_servers/comment_6_e24df9a1c68724a912b8ac6533d9bd25._comment create mode 100644 doc/forum/git-annex_assistant_with_2_dedicated_servers/comment_7_ace3dc7c60c710a04b0a587206b341c4._comment create mode 100644 doc/forum/git-annex_assistant_with_2_dedicated_servers/comment_8_9a96bc970a17ed62b0ceb7aa3f0a6f8b._comment create mode 100644 doc/forum/git-annex_assistant_with_2_dedicated_servers/comment_9_ea88e0696f6e25e6904248a323f6cc36._comment create mode 100644 doc/forum/git-annex_build_for_Nokia_N9___40__Meego_Harmattan__41___and_Sailfish_OS.mdwn create mode 100644 doc/forum/git-annex_build_for_Nokia_N9___40__Meego_Harmattan__41___and_Sailfish_OS/comment_1_301a51c48c3d54f9d37feace26a772f8._comment create mode 100644 doc/forum/git-annex_causing_zombie_git_processes_to_build_up.mdwn create mode 100644 doc/forum/git-annex_causing_zombie_git_processes_to_build_up/comment_10_3bc5af3b28094fc042c207e307fe0c18._comment create mode 100644 doc/forum/git-annex_causing_zombie_git_processes_to_build_up/comment_12_89b9fe9c689515a8f874dee96864ff33._comment create mode 100644 doc/forum/git-annex_causing_zombie_git_processes_to_build_up/comment_12_b48f8d801305d9bde08060f06634b88e._comment create mode 100644 doc/forum/git-annex_causing_zombie_git_processes_to_build_up/comment_13_41e0fada90d795b9be12929ed66231e1._comment create mode 100644 doc/forum/git-annex_causing_zombie_git_processes_to_build_up/comment_14_4bd86a227f117dbf5d1b12fbcf873e62._comment create mode 100644 doc/forum/git-annex_causing_zombie_git_processes_to_build_up/comment_1_a63df20ab1888e4dc5e7f002b4a68b5f._comment create mode 100644 doc/forum/git-annex_causing_zombie_git_processes_to_build_up/comment_2_3908d1552421edb054dc1a56c449ad23._comment create mode 100644 doc/forum/git-annex_causing_zombie_git_processes_to_build_up/comment_3_5adf7777f9495e28432a0d60a15493ee._comment create mode 100644 doc/forum/git-annex_causing_zombie_git_processes_to_build_up/comment_4_b8a7f87aa1e9101fbb3e1d4e29febff5._comment create mode 100644 doc/forum/git-annex_causing_zombie_git_processes_to_build_up/comment_5_122c584af1b1b6894cfccd4e16d2d76a._comment create mode 100644 doc/forum/git-annex_causing_zombie_git_processes_to_build_up/comment_6_4668f6cc692c49a456418f783655602b._comment create mode 100644 doc/forum/git-annex_causing_zombie_git_processes_to_build_up/comment_7_8e9feaea0e807cefee95166508c9c7de._comment create mode 100644 doc/forum/git-annex_causing_zombie_git_processes_to_build_up/comment_8_02c5903bf4de4b94e6db84bc43b3b3d8._comment create mode 100644 doc/forum/git-annex_causing_zombie_git_processes_to_build_up/comment_9_b6780a99d7a175d2ff3e33e198c28a9d._comment create mode 100644 doc/forum/git-annex_clients_with_only_a_gitLab_repo_and_GDrive_special_remote_in_common.mdwn create mode 100644 doc/forum/git-annex_clients_with_only_a_gitLab_repo_and_GDrive_special_remote_in_common/comment_1_10fa70e1e5e08e12ab7c1570881b38f8._comment create mode 100644 doc/forum/git-annex_clients_with_only_a_gitLab_repo_and_GDrive_special_remote_in_common/comment_2_ff0dab8dc544f7aa8e4ebfbec8f2a081._comment create mode 100644 doc/forum/git-annex_communication_channels.mdwn create mode 100644 doc/forum/git-annex_communication_channels/comment_1_198325d2e9337c90f026396de89eec0e._comment create mode 100644 doc/forum/git-annex_communication_channels/comment_2_c7aeefa6ef9a2e75d8667b479ade1b7f._comment create mode 100644 doc/forum/git-annex_communication_channels/comment_3_1ff08a3e0e63fa0e560cbc9602245caa._comment create mode 100644 doc/forum/git-annex_communication_channels/comment_4_1ba6ddf54843c17c7d19a9996f2ab712._comment create mode 100644 doc/forum/git-annex_communication_channels/comment_5_404b723a681eb93fee015cea8024b6bc._comment create mode 100644 doc/forum/git-annex_communication_channels/comment_6_0d87d0e26461494b1d7f8a701a924729._comment create mode 100644 doc/forum/git-annex_communication_channels/comment_7_2c87c7a0648fe87c2bf6b4391f1cc468._comment create mode 100644 doc/forum/git-annex_confused_by_a_case-preserving_filesystem__63__.mdwn create mode 100644 doc/forum/git-annex_does_not_protect_files_on_NTFS-Fuse.mdwn create mode 100644 doc/forum/git-annex_does_not_protect_files_on_NTFS-Fuse/comment_1_4aef65f680e4801eb110fefa1f947f02._comment create mode 100644 doc/forum/git-annex_does_not_respect_preferred_content_settings.mdwn create mode 100644 doc/forum/git-annex_does_not_respect_preferred_content_settings/comment_1_ea347ea6ebdfe5ccfb0ed8786638f279._comment create mode 100644 doc/forum/git-annex_does_not_respect_preferred_content_settings/comment_2_5fac7c41c9841cea4234afa0a98b1636._comment create mode 100644 doc/forum/git-annex_does_not_respect_preferred_content_settings/comment_3_e2ea1843bbc9580ca7b4ec494f53b552._comment create mode 100644 doc/forum/git-annex_does_not_respect_preferred_content_settings/comment_4_59ede467a902f27b81f14e4706a7503a._comment create mode 100644 doc/forum/git-annex_doesn__39__t_build_with_feed-1.0.0.0.mdwn create mode 100644 doc/forum/git-annex_doesn__39__t_build_with_feed-1.0.0.0/comment_1_0be4545b1d93232a721c5ae65030334c._comment create mode 100644 doc/forum/git-annex_fails_on_Windows.mdwn create mode 100644 doc/forum/git-annex_fails_on_Windows/comment_1_451a2cdfa6f26e2bd319ebf4ce09da68._comment create mode 100644 doc/forum/git-annex_fails_on_Windows/comment_2_57b4fd347f74b3536ab0f0a5d7709af8._comment create mode 100644 doc/forum/git-annex_for_multiple_repositories___40__ssh_server__41__.mdwn create mode 100644 doc/forum/git-annex_for_multiple_repositories___40__ssh_server__41__/comment_1_cb691410d2a9ef4393af5362000a768c._comment create mode 100644 doc/forum/git-annex_help_import_outdated__63__.mdwn create mode 100644 doc/forum/git-annex_help_import_outdated__63__/comment_1_ada30e2fead4b5b8f5e53388f941eb07._comment create mode 100644 doc/forum/git-annex_help_import_outdated__63__/comment_2_ca898237f42af1205acab509e4d67d38._comment create mode 100644 doc/forum/git-annex_in_sane_language_for_mere_humans_of_us__63__.mdwn create mode 100644 doc/forum/git-annex_in_sane_language_for_mere_humans_of_us__63__/comment_1_29eda7ec1519f339d5b3601559fe0bb0._comment create mode 100644 doc/forum/git-annex_in_sane_language_for_mere_humans_of_us__63__/comment_2_a2b2183ee86377cdfef7c3acbe9552fb._comment create mode 100644 doc/forum/git-annex_in_sane_language_for_mere_humans_of_us__63__/comment_3_5605d42a68b3140cb660eb710ce5031e._comment create mode 100644 doc/forum/git-annex_in_sane_language_for_mere_humans_of_us__63__/comment_4_f56508164c71b2080150bc354e5de4b7._comment create mode 100644 doc/forum/git-annex_in_sane_language_for_mere_humans_of_us__63__/comment_5_c8cdb0faa342fe1f9407ad4c97e6bc3c._comment create mode 100644 doc/forum/git-annex_in_sane_language_for_mere_humans_of_us__63__/comment_6_25ce5eddeb1b65aacd5d86e09c3719b8._comment create mode 100644 doc/forum/git-annex_memory_usage.mdwn create mode 100644 doc/forum/git-annex_memory_usage/comment_1_50753a133c200cdf6d855c65e6d4422b._comment create mode 100644 doc/forum/git-annex_move_does_not_appear_to_respect_numcopies.mdwn create mode 100644 doc/forum/git-annex_move_does_not_appear_to_respect_numcopies/comment_1_5dba0ff04c86c7b2697a0750fd1e4b5d._comment create mode 100644 doc/forum/git-annex_move_does_not_appear_to_respect_numcopies/comment_2_114cc3c9236ba930117cc14a0dddc3dd._comment create mode 100644 doc/forum/git-annex_on_OSX.mdwn create mode 100644 doc/forum/git-annex_on_Samba_share.mdwn create mode 100644 doc/forum/git-annex_on_Samba_share/comment_1_3e9cfdf2c088e48c967ad08f79966742._comment create mode 100644 doc/forum/git-annex_on_Samba_share/comment_2_9d3df393b7b727653598453d94dd33db._comment create mode 100644 doc/forum/git-annex_on_Ubuntu_13.04_and_13.10_not_working.mdwn create mode 100644 doc/forum/git-annex_on_Ubuntu_13.04_and_13.10_not_working/comment_1_209956f3812450a43986d4ca5e647da6._comment create mode 100644 doc/forum/git-annex_on_Ubuntu_13.04_and_13.10_not_working/comment_3_12a58b8efe545e09b64760c87849839b._comment create mode 100644 doc/forum/git-annex_on_Ubuntu_13.04_and_13.10_not_working/comment_3_e0f7328603256f25c3be3706ecc9c76c._comment create mode 100644 doc/forum/git-annex_on_Ubuntu_13.04_and_13.10_not_working/comment_4_6bb8e4522241556fb82784d9b834cbfe._comment create mode 100644 doc/forum/git-annex_on_Ubuntu_13.04_and_13.10_not_working/comment_5_89a5296b461d400b51006074a13a4560._comment create mode 100644 doc/forum/git-annex_on_Ubuntu_13.04_and_13.10_not_working/comment_6_62daef4b4392c951b914a01b3effac11._comment create mode 100644 doc/forum/git-annex_on_archlinuxarm__44___armv6.mdwn create mode 100644 doc/forum/git-annex_on_archlinuxarm__44___armv6/comment_1_88fa644df8614c2db0d092b3eb1d3156._comment create mode 100644 doc/forum/git-annex_on_archlinuxarm__44___armv6/comment_2_b25ca7520ff7e339ec887a379d5100ee._comment create mode 100644 doc/forum/git-annex_on_archlinuxarm__44___armv6/comment_3_eda0e90c1285396b1ab20ecc04ea6e29._comment create mode 100644 doc/forum/git-annex_on_openSUSE.mdwn create mode 100644 doc/forum/git-annex_on_openSUSE/comment_1_97313a8a7fc7f558b5956989442a0f0b._comment create mode 100644 doc/forum/git-annex_on_openSUSE/comment_2_bbe6925ca465d13b050639c18abcd890._comment create mode 100644 doc/forum/git-annex_on_osx_10.9.1_just_crashes__47__closes__47__doesn__39__t_run_on_launch.mdwn create mode 100644 doc/forum/git-annex_on_osx_10.9.1_just_crashes__47__closes__47__doesn__39__t_run_on_launch/comment_1_a47174f8438bfaa42fb8067bca77bf4c._comment create mode 100644 doc/forum/git-annex_on_osx_10.9.1_just_crashes__47__closes__47__doesn__39__t_run_on_launch/comment_2_567bb460cec7cd2135386acf4e7dceb4._comment create mode 100644 doc/forum/git-annex_parallel_invocation_and_the_git-annex_branch.mdwn create mode 100644 doc/forum/git-annex_parallel_invocation_and_the_git-annex_branch/comment_1_3ece379be6645e75eff0d0acdc0a832f._comment create mode 100644 doc/forum/git-annex_parallel_invocation_and_the_git-annex_branch/comment_2_5aa79212878820270d9148275829727b._comment create mode 100644 doc/forum/git-annex_parallel_invocation_and_the_git-annex_branch/comment_2_8a46c0146f81d6d6147d8cfdc1277595._comment create mode 100644 doc/forum/git-annex_parallel_invocation_and_the_git-annex_branch/comment_4_aec9399cdf7b11011c9b577a6800b490._comment create mode 100644 doc/forum/git-annex_parallel_invocation_and_the_git-annex_branch/comment_5_aa4091341c7a067b46b57dea9dd02c22._comment create mode 100644 doc/forum/git-annex_parallel_invocation_and_the_git-annex_branch/comment_6_7d6d0da2243967b9660d8222c546112d._comment create mode 100644 doc/forum/git-annex_parallel_invocation_and_the_git-annex_branch/comment_7_ae5fb82005702e9b5ed14fa37f80a91a._comment create mode 100644 doc/forum/git-annex_parallel_invocation_and_the_git-annex_branch/comment_8_b0bc7c10d97a03497354aef2b011e1f1._comment create mode 100644 doc/forum/git-annex_parallel_invocation_and_the_git-annex_branch/comment_9_deb88db3c97645b1aa180813401fa436._comment create mode 100644 doc/forum/git-annex_pre-commit_eats_all_my_4GB_of_ram.mdwn create mode 100644 doc/forum/git-annex_pre-commit_eats_all_my_4GB_of_ram/comment_1_ff16c7932b60b85c744bafc48bb040e4._comment create mode 100644 doc/forum/git-annex_pre-commit_eats_all_my_4GB_of_ram/comment_2_5599cddf579d18f70cab6e48d04ae99d._comment create mode 100644 doc/forum/git-annex_pre-commit_eats_all_my_4GB_of_ram/comment_3_412941e9385f63153b23695641e71deb._comment create mode 100644 doc/forum/git-annex_pre-commit_eats_all_my_4GB_of_ram/comment_4_112ad140d9006c530db2121bec24de30._comment create mode 100644 doc/forum/git-annex_pre-commit_eats_all_my_4GB_of_ram/comment_5_9178023b95683a649355f291165a1467._comment create mode 100644 doc/forum/git-annex_pre-commit_eats_all_my_4GB_of_ram/comment_6_9251203421c1c3c3aed7828c4b97ecb8._comment create mode 100644 doc/forum/git-annex_s3_failure.mdwn create mode 100644 doc/forum/git-annex_s3_failure/comment_1_099023ae32a6a3417cc9c8bdcce9a89d._comment create mode 100644 doc/forum/git-annex_s3_failure/comment_2_c869b85bb2bea4a7a99e107f4a3cfb0f._comment create mode 100644 doc/forum/git-annex_s3_failure/comment_3_b9e52fe4d14104398d57a6bcc7f2deaf._comment create mode 100644 doc/forum/git-annex_sync_content_available_from_which_version__63__.mdwn create mode 100644 doc/forum/git-annex_sync_content_available_from_which_version__63__/comment_1_104e1b7e7643844f221f85dcbe9c9c4b._comment create mode 100644 doc/forum/git-annex_sync_fails_in_repo1_but_not_in_repo2.mdwn create mode 100644 doc/forum/git-annex_sync_fails_in_repo1_but_not_in_repo2/comment_1_5cca2fbce3db1c691f43e43f9343f9bd._comment create mode 100644 doc/forum/git-annex_sync_fails_in_repo1_but_not_in_repo2/comment_2_1dfeb722edd54c68b4220d00c0a175e5._comment create mode 100644 doc/forum/git-annex_sync_here.mdwn create mode 100644 doc/forum/git-annex_sync_here/comment_1_3ebef27614bd72b38404c1940007e68c._comment create mode 100644 doc/forum/git-annex_sync_here/comment_2_1b0543443759202ec6a85a26088ddb43._comment create mode 100644 doc/forum/git-annex_teams___47___groups.mdwn create mode 100644 doc/forum/git-annex_teams___47___groups/comment_1_0450673ab74f184a47ac7bab568d26dc._comment create mode 100644 doc/forum/git-annex_tor_remote_not_working.mdwn create mode 100644 doc/forum/git-annex_tor_remote_not_working/comment_1_15cce70b24769832ccf9782d1215d605._comment create mode 100644 doc/forum/git-annex_tor_remote_not_working/comment_2_e17a7f8a98f4614f46f05228f604a562._comment create mode 100644 doc/forum/git-annex_tor_remote_not_working/comment_3_8ca1bc7358ad96ffb711d7ab1e4fd22a._comment create mode 100644 doc/forum/git-annex_unused_not_dropping_deleted_files.mdwn create mode 100644 doc/forum/git-annex_unused_not_dropping_deleted_files/comment_1_2152cfb09675e46e7492e198dd3ea094._comment create mode 100644 doc/forum/git-annex_unused_not_dropping_deleted_files/comment_2_97e666dbac9de2a5e688921cba8a42e9._comment create mode 100644 doc/forum/git-annex_unused_not_dropping_deleted_files/comment_3_d7b0e9515bface28f3650b8aa20ec2f4._comment create mode 100644 doc/forum/git-annex_unused_not_dropping_deleted_files/comment_4_5816f6cab42e27e724e735368f693b09._comment create mode 100644 doc/forum/git-annex_unused_not_dropping_deleted_files/comment_5_8e97f39225515f0bf8b168dfd6a0efab._comment create mode 100644 doc/forum/git-annex_unused_not_dropping_deleted_files/comment_6_bef37f8ec9c337387b79ffd6d56fe425._comment create mode 100644 doc/forum/git-annex_unused_not_dropping_deleted_files/comment_7_bff3bcf9f1b7c458afa98cdb18883153._comment create mode 100644 doc/forum/git-annex_unused_not_dropping_deleted_files/comment_8_7259b8e9616009472ad3a10426f3d8ea._comment create mode 100644 doc/forum/git-annex_unused_on_directory_special_remote__63__.mdwn create mode 100644 doc/forum/git-annex_unused_on_directory_special_remote__63__/comment_1_5fb31042ed7c5c52969451b6fc0f4ddc._comment create mode 100644 doc/forum/git-annex_vicfg_preferred_content_settings_are_not_being_saved.mdwn create mode 100644 doc/forum/git-annex_vicfg_preferred_content_settings_are_not_being_saved/comment_1_81111f59caea9f70cb9d597381e42c96._comment create mode 100644 doc/forum/git-annex_vicfg_preferred_content_settings_are_not_being_saved/comment_2_8ca9156d21d9f3db0d83d6aa9b69caa0._comment create mode 100644 doc/forum/git-annex_vicfg_preferred_content_settings_are_not_being_saved/comment_3_9da6ca0250ab0dcfc9a012df75e2e711._comment create mode 100644 doc/forum/git-annex_vicfg_preferred_content_settings_are_not_being_saved/comment_4_55c52c45f3aaddfb63a1f53efe2ee582._comment create mode 100644 doc/forum/git-annex_webapp_launch_behavior_is_confusing.mdwn create mode 100644 doc/forum/git-assistant_clarification.mdwn create mode 100644 doc/forum/git-assistant_clarification/comment_1_8f553e59da12f798b854a457b96b5778._comment create mode 100644 doc/forum/git-assistant_clarification/comment_2_06cf62b599edea6ad8396776f0081494._comment create mode 100644 doc/forum/git-assistant_clarification/comment_3_36f0bd6e7a824e6ef40a309850bb087b._comment create mode 100644 doc/forum/git-like_git-annex_diff.mdwn create mode 100644 doc/forum/git-remote-gcrypt.mdwn create mode 100644 doc/forum/git-remote-gcrypt/comment_1_175c8c35d9bbb470fcc17697eb8cc6b8._comment create mode 100644 doc/forum/git-remote-gcrypt/comment_2_fdcaf507e14c995636dd93a41e488df3._comment create mode 100644 doc/forum/git-remote-gcrypt/comment_3_f4e830f961dbe1c60ddd277b9d888133._comment create mode 100644 doc/forum/git-remote-gcrypt_and_rsyncd.mdwn create mode 100644 doc/forum/git-remote-gcrypt_and_rsyncd/comment_1_34dd343ed75918f5969f6a23dfae3317._comment create mode 100644 doc/forum/git-remote-gcrypt_and_rsyncd/comment_2_78b89867bd1af78a91826022651a57ad._comment create mode 100644 doc/forum/git-repair_doesn__39__t_build_with_GHC_8.0.2.mdwn create mode 100644 doc/forum/git-repair_doesn__39__t_build_with_GHC_8.0.2/comment_1_0a6ea834f6515b888e5c40fef08f4e2d._comment create mode 100644 doc/forum/git-repair_doesn__39__t_build_with_GHC_8.0.2/comment_2_bb490f71aed0cfe119beac66cecae99c._comment create mode 100644 doc/forum/git-status_typechange_in_direct_mode.mdwn create mode 100644 doc/forum/git-status_typechange_in_direct_mode/comment_1_12c8b67aadbfa2b073e12997a55d49a7._comment create mode 100644 doc/forum/git-status_typechange_in_direct_mode/comment_2_005d1b17f3c2ae192aa30c6e5163989e._comment create mode 100644 doc/forum/git-subtree_support__63__.mdwn create mode 100644 doc/forum/git-subtree_support__63__/comment_1_4f333cb71ed1ff259bbfd86704806aa6._comment create mode 100644 doc/forum/git-subtree_support__63__/comment_2_73d2a015b1ac79ec99e071a8b1e29034._comment create mode 100644 doc/forum/git-subtree_support__63__/comment_3_c533400e22c306c033fcd56e64761b0b._comment create mode 100644 doc/forum/git-subtree_support__63__/comment_4_75b0e072e668aa46ff0a8d62a6620306._comment create mode 100644 doc/forum/git-subtree_support__63__/comment_5_f5ec9649d9f1dc122e715de5533bc674._comment create mode 100644 doc/forum/git-subtree_support__63__/comment_6_85df530f7b6d76b74ac8017c6034f95e._comment create mode 100644 doc/forum/git__58____There_are_too_many_unreachable_loose_objecs_.mdwn create mode 100644 doc/forum/git__58____There_are_too_many_unreachable_loose_objecs_/comment_1_e3c37fc6e45de48a4d5c1eb36e8d44df._comment create mode 100644 doc/forum/git__58____There_are_too_many_unreachable_loose_objecs_/comment_2_c77b9790da099a94ee368de6a557d4b2._comment create mode 100644 doc/forum/git__58____There_are_too_many_unreachable_loose_objecs_/comment_3_f0c6869f31a31803adec0fdc0befa178._comment create mode 100644 doc/forum/git__58_____39__annex__39___is_not_a_git_command_error_after_installing.mdwn create mode 100644 doc/forum/git__58_____39__annex__39___is_not_a_git_command_error_after_installing/comment_1_8a2e3be32800b7b8a6fa78bbdcba7608._comment create mode 100644 doc/forum/git__58_____39__annex__39___is_not_a_git_command_error_after_installing/comment_2_451b3c89d1b98212d5c21efa4e535424._comment create mode 100644 doc/forum/git_annex_add_crash_and_subsequent_recovery.mdwn create mode 100644 doc/forum/git_annex_add_crash_and_subsequent_recovery/comment_1_062d0153a379c1ba1df8585b90220d3d._comment create mode 100644 doc/forum/git_annex_add_crash_and_subsequent_recovery/comment_2_6fc6be43c488c468a4811cd0a1360225._comment create mode 100644 doc/forum/git_annex_add_crash_and_subsequent_recovery/comment_3_45efaaf27d9b580c4c75cbcdc4f65b64._comment create mode 100644 doc/forum/git_annex_add_crash_and_subsequent_recovery/comment_4_c560eae40867512b0af2cbef161fc8ac._comment create mode 100644 doc/forum/git_annex_add_freezes_on_direct_repo.mdwn create mode 100644 doc/forum/git_annex_add_freezes_on_direct_repo/comment_1_290df6fdd3c9042308638f1e8b66b805._comment create mode 100644 doc/forum/git_annex_add_freezes_on_direct_repo/comment_2_3aa5d0ef823592baab79382851385979._comment create mode 100644 doc/forum/git_annex_add_freezes_on_direct_repo/comment_3_cba1ba0c8b0f2e0f4186e7695d9df569._comment create mode 100644 doc/forum/git_annex_alternative.mdwn create mode 100644 doc/forum/git_annex_assistant_-_Changing_repository_information.mdwn create mode 100644 doc/forum/git_annex_assistant_-_Changing_repository_information/comment_1_cde71a410200a7478180748fdcde0352._comment create mode 100644 doc/forum/git_annex_assistant__44___share_with_other_devices.mdwn create mode 100644 doc/forum/git_annex_assistant_repository_history__63__.mdwn create mode 100644 doc/forum/git_annex_assistant_repository_history__63__/comment_1_6f87f31e18cefedcc6bce95dbeb85a0b._comment create mode 100644 doc/forum/git_annex_copy_--fast_--to_blah_much_slower_than_--from_blah.mdwn create mode 100644 doc/forum/git_annex_copy_--fast_--to_blah_much_slower_than_--from_blah/comment_1_5b6e0b749b01a97a6b52a2c1cca6e35a._comment create mode 100644 doc/forum/git_annex_copy_--fast_--to_blah_much_slower_than_--from_blah/comment_2_8f2567f4c4f6db2078211a87689757d3._comment create mode 100644 doc/forum/git_annex_copy_--fast_--to_blah_much_slower_than_--from_blah/comment_3_ab98121076b88f351fc8cd9197e6bf64._comment create mode 100644 doc/forum/git_annex_copy_--fast_--to_blah_much_slower_than_--from_blah/comment_4_cb13328add1b7a812efd817ad3dd1a4f._comment create mode 100644 doc/forum/git_annex_copy_more_informative_about_why_some_files_are_not_copied.mdwn create mode 100644 doc/forum/git_annex_copy_more_informative_about_why_some_files_are_not_copied/comment_1_75445fc0e01ee99bae1c1f5a60e314bc._comment create mode 100644 doc/forum/git_annex_copy_to_google_drive_is_very_slow.mdwn create mode 100644 doc/forum/git_annex_copy_to_google_drive_is_very_slow/comment_1_f3085ef9ddff51ee4110cc1000d26da2._comment create mode 100644 doc/forum/git_annex_copy_to_google_drive_is_very_slow/comment_2_539dbce8852a9b6ae20ff0e55e74fc2a._comment create mode 100644 doc/forum/git_annex_drop_not_freeing_space_on_filesystem.mdwn create mode 100644 doc/forum/git_annex_drop_not_freeing_space_on_filesystem/comment_1_ce1b32c2765edb695e5d9dc8f0ac86e3._comment create mode 100644 doc/forum/git_annex_drop_not_freeing_space_on_filesystem/comment_3_248cb012c87605479fb17fa4aadc1185._comment create mode 100644 doc/forum/git_annex_drop_not_freeing_space_on_filesystem/comment_3_de4aa12c84a6025497f8c743a397ef63._comment create mode 100644 doc/forum/git_annex_drop_not_freeing_space_on_filesystem/comment_4_368b2c07dc7d98534a77c6153e8486ae._comment create mode 100644 doc/forum/git_annex_failing_to_get_non-English_filenames.__Rsync_problem__63__.mdwn create mode 100644 doc/forum/git_annex_failing_to_get_non-English_filenames.__Rsync_problem__63__/comment_1_292ee7c8b37cbd13f03eb67d0359b99e._comment create mode 100644 doc/forum/git_annex_failing_to_get_non-English_filenames.__Rsync_problem__63__/comment_2_f6341119fcfde5d8160c8f603b1a6fea._comment create mode 100644 doc/forum/git_annex_failing_to_get_non-English_filenames.__Rsync_problem__63__/comment_3_8ad3a1d1fe5995d61e5e137280bc76c3._comment create mode 100644 doc/forum/git_annex_failing_to_get_non-English_filenames.__Rsync_problem__63__/comment_4_86b61b0484f3f4ecff657e46333b3d4f._comment create mode 100644 doc/forum/git_annex_failing_to_get_non-English_filenames.__Rsync_problem__63__/comment_5_5ffac00d08d26acaba8c3513b24c4d65._comment create mode 100644 doc/forum/git_annex_file_content_replaced_with_symlink_content.mdwn create mode 100644 doc/forum/git_annex_file_content_replaced_with_symlink_content/comment_1_f6f4be7161d4c35c7de1d9751ddbd3c3._comment create mode 100644 doc/forum/git_annex_file_content_replaced_with_symlink_content/comment_2_da848024c40eb65e6214bd95b73e078e._comment create mode 100644 doc/forum/git_annex_file_content_replaced_with_symlink_content/comment_3_cc703ef5015527425572002295568923._comment create mode 100644 doc/forum/git_annex_get_--want-get_another__95__repo.mdwn create mode 100644 doc/forum/git_annex_get_--want-get_another__95__repo/comment_1_0be0b3981ddd0743ff26cf6d396e521d._comment create mode 100644 doc/forum/git_annex_get_--want-get_another__95__repo/comment_2_b1ead1085a87818625579bf1ef151b5d._comment create mode 100644 doc/forum/git_annex_get_--want-get_another__95__repo/comment_3_cf2018852c84b0bf1ac061def6f0ac5d._comment create mode 100644 doc/forum/git_annex_get_--want-get_another__95__repo/comment_4_22562e8f1f2f91b9f9a5939ec9006cb5._comment create mode 100644 doc/forum/git_annex_get___60__file__62___fails___40__Action_blocked_by_GIT__41__.mdwn create mode 100644 doc/forum/git_annex_get___60__file__62___fails___40__Action_blocked_by_GIT__41__/comment_1_476b96f4ffd57bfe6e66c5388a19e9a5._comment create mode 100644 doc/forum/git_annex_get___60__file__62___fails___40__Action_blocked_by_GIT__41__/comment_2_6da3b78489ea140b321d780ef669bcd3._comment create mode 100644 doc/forum/git_annex_get_creates_a_new_uuid.mdwn create mode 100644 doc/forum/git_annex_get_creates_a_new_uuid/comment_1_004c87183968c326058bd3159a5baa0b._comment create mode 100644 doc/forum/git_annex_hanging_in_smudge_on_2k_file_on_rpi.mdwn create mode 100644 doc/forum/git_annex_hanging_in_smudge_on_2k_file_on_rpi/comment_1_06b5d0c9c6037ffdafab6c01763061de._comment create mode 100644 doc/forum/git_annex_hanging_in_smudge_on_2k_file_on_rpi/comment_2_471a44594af15057dd4781e759013627._comment create mode 100644 doc/forum/git_annex_hanging_in_smudge_on_2k_file_on_rpi/comment_3_66f89cded0da36e96099d29542f2455b._comment create mode 100644 doc/forum/git_annex_info__58___local_annex_keys__63__.mdwn create mode 100644 doc/forum/git_annex_init_timeout.mdwn create mode 100644 doc/forum/git_annex_init_timeout/comment_1_e456f5367af5a5a3a31fc982952079e3._comment create mode 100644 doc/forum/git_annex_init_timeout/comment_2_bf15b686b07c5e6e95796affa497a541._comment create mode 100644 doc/forum/git_annex_init_timeout/comment_3_1e733fad01e6b420c7fd9f7832e9b3f7._comment create mode 100644 doc/forum/git_annex_lock__47__unlock__47__fix_on_non-committed_files.mdwn create mode 100644 doc/forum/git_annex_ls___47___metadata_in_git_annex_whereis.mdwn create mode 100644 doc/forum/git_annex_ls___47___metadata_in_git_annex_whereis/comment_1_7fba10b85f4d9289c7782eccef46949e._comment create mode 100644 doc/forum/git_annex_ls___47___metadata_in_git_annex_whereis/comment_2_7dcec124ea7d0291ed40d80e2ffd5c7e._comment create mode 100644 doc/forum/git_annex_ls___47___metadata_in_git_annex_whereis/comment_3_24c54ed70220974b98700bf717d1e770._comment create mode 100644 doc/forum/git_annex_on_osx_only_creating_symlinks__63____63__.mdwn create mode 100644 doc/forum/git_annex_on_osx_only_creating_symlinks__63____63__/comment_1_6889c4452e636474b4e70798b404fed2._comment create mode 100644 doc/forum/git_annex_on_osx_only_creating_symlinks__63____63__/comment_2_978fc11c463a457382fddd668cd1d0dd._comment create mode 100644 doc/forum/git_annex_on_osx_only_creating_symlinks__63____63__/comment_3_4420bd3afaecd7536b02fc08cee82dbe._comment create mode 100644 doc/forum/git_annex_on_osx_only_creating_symlinks__63____63__/comment_4_99286f17a87049c303f2aa34c0a90286._comment create mode 100644 doc/forum/git_annex_on_osx_only_creating_symlinks__63____63__/comment_5_39bad7441dcea4da4b389700301233de._comment create mode 100644 doc/forum/git_annex_repair_--force_fails_without_explanation.mdwn create mode 100644 doc/forum/git_annex_repair_--force_fails_without_explanation/comment_1_716cbfe900552a453965ac4abd44e7a4._comment create mode 100644 doc/forum/git_annex_repair_--force_fails_without_explanation/comment_2_f8ff4c8663d8b7bb30f7b7763be33501._comment create mode 100644 doc/forum/git_annex_repair_--force_fails_without_explanation/comment_3_682cb114d133713f80bdda97a4435a5e._comment create mode 100644 doc/forum/git_annex_repair_--force_fails_without_explanation/comment_4_cbc49405ab99e8722216739732ce394d._comment create mode 100644 doc/forum/git_annex_repairs_since_thursday.mdwn create mode 100644 doc/forum/git_annex_repairs_since_thursday/comment_1_38b4563db47ce9bdc52eab5506de20f8._comment create mode 100644 doc/forum/git_annex_repairs_since_thursday/comment_2_b072ad2864e1caa7459d17d3426c8eee._comment create mode 100644 doc/forum/git_annex_sync__58___only_git-annex.mdwn create mode 100644 doc/forum/git_annex_sync__58___only_git-annex/comment_1_2be68ed36a1e6bfc896d5aea9463d3c7._comment create mode 100644 doc/forum/git_annex_sync__58___only_git-annex/comment_2_50e137e4d278dfd0103a41aff0cfa3a9._comment create mode 100644 doc/forum/git_annex_sync__58___only_git-annex/comment_3_7753f8276478e0e05c10dba2b84bbc49._comment create mode 100644 doc/forum/git_annex_sync__58___only_git-annex/comment_5_52010f21a15d76d68986aa1fba29aaf1._comment create mode 100644 doc/forum/git_annex_sync__58___only_git-annex/comment_6_df94154fbbc4edbf7ff658f61bde48b5._comment create mode 100644 doc/forum/git_annex_sync_destroys_data_on_shallow_clones.mdwn create mode 100644 doc/forum/git_annex_sync_destroys_data_on_shallow_clones/comment_1_431fef51e00f19cdf206a5ab97570be5._comment create mode 100644 doc/forum/git_annex_sync_dies___40__sometimes__41__.mdwn create mode 100644 doc/forum/git_annex_sync_dies___40__sometimes__41__/comment_1_48bbac0545bf13bbf04da723e418d037._comment create mode 100644 doc/forum/git_annex_sync_remove_all_recently_added_files.mdwn create mode 100644 doc/forum/git_annex_sync_remove_all_recently_added_files/comment_1_6c059f7b2eb9d213bc0865739832b5d2._comment create mode 100644 doc/forum/git_annex_sync_remove_all_recently_added_files/comment_2_27a56e101f7c3fcba90b4c69fa39f4c4._comment create mode 100644 doc/forum/git_annex_sync_update_remote.mdwn create mode 100644 doc/forum/git_annex_sync_update_remote/comment_1_d6410587c442bd6323991f7839c1b5b2._comment create mode 100644 doc/forum/git_annex_sync_update_remote/comment_2_704cf62eb4add2459e509cc5fdbfeb68._comment create mode 100644 doc/forum/git_annex_sync_update_remote/comment_3_9b6ecb7342aab7f0320ed7567ee5fa0b._comment create mode 100644 doc/forum/git_annex_sync_update_remote/comment_4_221e01e024595f444e629db510eb60be._comment create mode 100644 doc/forum/git_annex_test_on_windows.mdwn create mode 100644 doc/forum/git_annex_test_on_windows/comment_1_258ac5cfa2f5d24e737d94dc48f06899._comment create mode 100644 doc/forum/git_annex_uninit_creates_broken_symlinks.mdwn create mode 100644 doc/forum/git_annex_uninit_creates_broken_symlinks/comment_1_b7fb7fac51f59b23aafbc8dcce0aef07._comment create mode 100644 doc/forum/git_annex_vicfg___40__preferred_content__41___examples.mdwn create mode 100644 doc/forum/git_annex_vicfg___40__preferred_content__41___examples/comment_1_1e59c9476b206613285e4f39b2c9efa8._comment create mode 100644 doc/forum/git_annex_vicfg___40__preferred_content__41___examples/comment_2_9d0cfb1d221e3ac6ed15db9cefab60fa._comment create mode 100644 doc/forum/git_annex_vicfg___40__preferred_content__41___examples/comment_3_78bc3e56502e425f4f77bc35ed2199b8._comment create mode 100644 doc/forum/git_annex_view__58___viewindex.lock__44___file_exists___40__it_doesn__39__t__41__.mdwn create mode 100644 doc/forum/git_annex_view__58___viewindex.lock__44___file_exists___40__it_doesn__39__t__41__/comment_1_08e3d99b682e640b72d0094d593f9d53._comment create mode 100644 doc/forum/git_annex_view_tags_failing.mdwn create mode 100644 doc/forum/git_annex_wants_to_repair_every_time_it__39__s_running.mdwn create mode 100644 doc/forum/git_annex_wants_to_repair_every_time_it__39__s_running/comment_1_c182b03bae6e691eb68465fedf5c77d5._comment create mode 100644 doc/forum/git_annex_wants_to_repair_every_time_it__39__s_running/comment_2_6b3427b2d3e1c5f4c0582be1020c89f8._comment create mode 100644 doc/forum/git_annex_whereis_--json_output_with_two_variables_with_same_name.mdwn create mode 100644 doc/forum/git_annex_whereis_--json_output_with_two_variables_with_same_name/comment_1_3bfde59729b904aa1ef815427dd35ae6._comment create mode 100644 doc/forum/git_annex_whereis_--json_output_with_two_variables_with_same_name/comment_2_d08a955a11953cc783f09bfba180dbd6._comment create mode 100644 doc/forum/git_annex_windows_and_rsync.mdwn create mode 100644 doc/forum/git_annex_windows_and_rsync/comment_1_33249bf910446fcf98ffb2e7e35017bf._comment create mode 100644 doc/forum/git_annex_with_local_apache_webdav_server.mdwn create mode 100644 doc/forum/git_annex_with_local_apache_webdav_server/comment_1_a3b89f90f9ac70e0a9b0711ede1cb810._comment create mode 100644 doc/forum/git_annex_with_local_apache_webdav_server/comment_2_d8e9237cf6e7f7558f836ba1352f5517._comment create mode 100644 doc/forum/git_clone_over_ssh_hangs.mdwn create mode 100644 doc/forum/git_clone_over_ssh_hangs/comment_1_07ffe356ef5c441118cc9329060812f2._comment create mode 100644 doc/forum/git_lfs_special_remote_implementation.mdwn create mode 100644 doc/forum/git_lfs_special_remote_implementation/comment_1_a61494b02c831e84903f28d9900850ac._comment create mode 100644 doc/forum/git_pull_remote_git-annex.mdwn create mode 100644 doc/forum/git_pull_remote_git-annex/comment_1_9c245db3518d8b889ecdf5115ad9e053._comment create mode 100644 doc/forum/git_pull_remote_git-annex/comment_2_0f7f4a311b0ec1d89613e80847e69b42._comment create mode 100644 doc/forum/git_pull_remote_git-annex/comment_3_1aa89725b5196e40a16edeeb5ccfa371._comment create mode 100644 doc/forum/git_pull_remote_git-annex/comment_4_646f2077edcabc000a7d9cb75a93cf55._comment create mode 100644 doc/forum/git_pull_remote_git-annex/comment_5_4f2a05ef6551806dd0ec65372f183ca4._comment create mode 100644 doc/forum/git_pull_remote_git-annex/comment_6_3925d1aa56bce9380f712e238d63080f._comment create mode 100644 doc/forum/git_pull_remote_git-annex/comment_7_24c45ee981b18bc78325c768242e635d._comment create mode 100644 doc/forum/git_pull_remote_git-annex/comment_8_7e76ee9b6520cbffaf484c9299a63ad3._comment create mode 100644 doc/forum/git_status_is_slow_twice__44___then_fast.mdwn create mode 100644 doc/forum/git_status_is_slow_twice__44___then_fast/comment_1_a32e4d4255a1afcfd05c374d0fffccab._comment create mode 100644 doc/forum/git_status_is_slow_twice__44___then_fast/comment_2_1aba5ad6deb4634fca187ecc69a6adf9._comment create mode 100644 doc/forum/git_status_typechange_in_v5_direct_false.mdwn create mode 100644 doc/forum/git_status_typechange_in_v5_direct_false/comment_1_eb4e2b1fd7615e2b6936b5df01d68d1f._comment create mode 100644 doc/forum/git_status_typechange_in_v5_direct_false/comment_2_19df04820aa80549cfabac0141c372c0._comment create mode 100644 doc/forum/git_status_typechange_in_v5_direct_false/comment_3_20e04806a59e05a453431cb90086ccac._comment create mode 100644 doc/forum/git_tag_missing_for_3.20111011.mdwn create mode 100644 doc/forum/git_tag_missing_for_3.20111011/comment_1_7a53bf273f3078ab3351369ef2b5f2a6._comment create mode 100644 doc/forum/git_unannex_speed.mdwn create mode 100644 doc/forum/git_unannex_speed/comment_1_10cf326248f4e89e1f75bf97d7574763._comment create mode 100644 doc/forum/git_unlock_failed.mdwn create mode 100644 doc/forum/git_unlock_failed/comment_1_483dbd405b41b7bce343d7c08be8d92f._comment create mode 100644 doc/forum/git_unlock_failed/comment_2_76903b206b8cf6dced44a2da29f57201._comment create mode 100644 doc/forum/git_unlock_failed/comment_3_3331c627e0a48f8d2698b2bda1e0748f._comment create mode 100644 doc/forum/git_unlock_failed/comment_4_a24ddc8effd6983d6ed1d3a5e1c62b45._comment create mode 100644 doc/forum/git_unlock_failed/comment_5_e88de8c0fdd998236ba18a60d9308df8._comment create mode 100644 doc/forum/git_update-index_message_after_git-annex_get.mdwn create mode 100644 doc/forum/git_update-index_message_after_git-annex_get/comment_1_606b627b91a6e9864653ed86252b4bd7._comment create mode 100644 doc/forum/glacier_-_range_retrievals_and_daily_free_retrieval_allowance.mdwn create mode 100644 doc/forum/got_confused_by_fsck.mdwn create mode 100644 doc/forum/got_confused_by_fsck/comment_1_ab35fea4d46ee93e62ab67e5af3dfcbf._comment create mode 100644 doc/forum/got_confused_by_fsck/comment_2_19c730cb1337dc8794721cf5679c930b._comment create mode 100644 doc/forum/handling_MP3_metadata_changes.mdwn create mode 100644 doc/forum/handling_MP3_metadata_changes/comment_1_aa4955fd64ea5aa836f1a591e185c4a2._comment create mode 100644 doc/forum/hashing_objects_directories.mdwn create mode 100644 doc/forum/hashing_objects_directories/comment_1_c55c56076be4f54251b0b7f79f28a607._comment create mode 100644 doc/forum/hashing_objects_directories/comment_2_504c96959c779176f991f4125ea22009._comment create mode 100644 doc/forum/hashing_objects_directories/comment_3_9134bde0a13aac0b6a4e5ebabd7f22e8._comment create mode 100644 doc/forum/hashing_objects_directories/comment_4_0de9170e429cbfea66f5afa8980d45ac._comment create mode 100644 doc/forum/hashing_objects_directories/comment_5_ef6cfd49d24c180c2d0a062e5bd3a0be._comment create mode 100644 doc/forum/help__44___a_bunch_of_files_disappeared.mdwn create mode 100644 doc/forum/help__44___a_bunch_of_files_disappeared/comment_1_56cffd43ad7056a34c23b139f95ea58e._comment create mode 100644 doc/forum/help__44___a_bunch_of_files_disappeared/comment_2_7675ff78cf1b5f58618c5c57da8591b5._comment create mode 100644 doc/forum/help__44___a_bunch_of_files_disappeared/comment_3_4b700ccba2b40fdc1d172a3dcbc441e5._comment create mode 100644 doc/forum/help_running_git-annex_on_top_of_existing_repo.mdwn create mode 100644 doc/forum/help_running_git-annex_on_top_of_existing_repo/comment_1_4cb38d71c943657c5ba0896cd70d2e64._comment create mode 100644 doc/forum/help_running_git-annex_on_top_of_existing_repo/comment_2_b5e94c10ebbed9125c7e2332f75709ca._comment create mode 100644 doc/forum/help_running_git-annex_on_top_of_existing_repo/comment_3_2b3b93bbc60fbc24d436231954d6822a._comment create mode 100644 doc/forum/help_running_git-annex_on_top_of_existing_repo/comment_4_2dfda33ffa39b92b16c8bd9005e1cefe._comment create mode 100644 doc/forum/help_running_git-annex_on_top_of_existing_repo/comment_5_96b1eb1e8e9f315c646f4686870f9b52._comment create mode 100644 doc/forum/help_running_git-annex_on_top_of_existing_repo/comment_6_e85c3fa1d17f1d6ec625b9c4f9b698c3._comment create mode 100644 doc/forum/help_running_git-annex_on_top_of_existing_repo/comment_7_15d918ededb5b8375b0ca13d0b3523ff._comment create mode 100644 doc/forum/help_running_git-annex_on_top_of_existing_repo/comment_8_dcc3f2c6d55006776610e8d770b61d12._comment create mode 100644 doc/forum/help_with_building_git-annex_on_conda-forge.mdwn create mode 100644 doc/forum/help_with_building_git-annex_on_conda-forge/comment_1_369460f5de3219b80a7b2da5bda9aced._comment create mode 100644 doc/forum/help_with_building_git-annex_on_conda-forge/comment_2_e72eaf736e2a534fa5970183a2f671af._comment create mode 100644 doc/forum/how_do_automated_upgrades_work__63__.mdwn create mode 100644 doc/forum/how_do_automated_upgrades_work__63__/comment_1_cfd00ac3a3eaa3c2a1d430f6544c32f0._comment create mode 100644 doc/forum/how_do_automated_upgrades_work__63__/comment_2_5ef98e46c514e9b794ee719e4cc8fda4._comment create mode 100644 doc/forum/how_do_i_manually_sync_my_external_drive__63__.mdwn create mode 100644 doc/forum/how_do_i_manually_sync_my_external_drive__63__/comment_1_4fd8722cafd55b0503c802289206645a._comment create mode 100644 doc/forum/how_long_are_git_annex_commands_supposed_to_take__63__.mdwn create mode 100644 doc/forum/how_long_are_git_annex_commands_supposed_to_take__63__/comment_1_26d959bb3cfdc690b1eab41c9b0b5dc4._comment create mode 100644 doc/forum/how_to___34__move__34___URL_between_remotes__63__.mdwn create mode 100644 doc/forum/how_to___34__move__34___URL_between_remotes__63__/comment_1_d4fb3eff1b61c60224fec112df9f1136._comment create mode 100644 doc/forum/how_to___34__move__34___URL_between_remotes__63__/comment_2_c122906fd03bd723aa027fe32fd4fab6._comment create mode 100644 doc/forum/how_to___34__move__34___URL_between_remotes__63__/comment_3_adebe3ba65ba9fc0a4a7f4b664afc069._comment create mode 100644 doc/forum/how_to___34__move__34___URL_between_remotes__63__/comment_4_46ad0779ff71cfbadd663fe413d32ffb._comment create mode 100644 doc/forum/how_to___34__move__34___URL_between_remotes__63__/comment_5_712f40f27b27dfaf58c416ca7dc19045._comment create mode 100644 doc/forum/how_to___34__move__34___URL_between_remotes__63__/comment_6_260c238435f8f5e53511de7e574dd53f._comment create mode 100644 doc/forum/how_to___34__move__34___URL_between_remotes__63__/comment_7_742fde3d8f7aa0caa39dadc961c1b3d3._comment create mode 100644 doc/forum/how_to_commit_removed_files_as_repo-droped_entries.mdwn create mode 100644 doc/forum/how_to_commit_removed_files_as_repo-droped_entries/comment_1_a9a4baebfb647898a76ee3d5ab6febfd._comment create mode 100644 doc/forum/how_to_commit_removed_files_as_repo-droped_entries/comment_2_68392de15bae234de1332b8bc80cc2ff._comment create mode 100644 doc/forum/how_to_decrypt_file_from_encrypted_special_remote__63__.mdwn create mode 100644 doc/forum/how_to_decrypt_file_from_encrypted_special_remote__63__/comment_1_d4dc451892e7a6e230bf32adb7f3f9fa._comment create mode 100644 doc/forum/how_to_decrypt_file_from_encrypted_special_remote__63__/comment_2_79340bf3c0691073a9808c5ac2da0a3d._comment create mode 100644 doc/forum/how_to_decrypt_file_from_encrypted_special_remote__63__/comment_3_6302fb6e5bb7cbddf2cfe74d98d32897._comment create mode 100644 doc/forum/how_to_decrypt_file_from_encrypted_special_remote__63__/comment_4_e3d95bc09c9fb21e8e9bbacc642aa60f._comment create mode 100644 doc/forum/how_to_decrypt_file_from_encrypted_special_remote__63__/comment_5_f2f0a1c2fb0c6323707b11e2b06aa2db._comment create mode 100644 doc/forum/how_to_decrypt_file_from_encrypted_special_remote__63__/comment_6_66fe80e634a8f13cce18fe68974ec67a._comment create mode 100644 doc/forum/how_to_disaster_recovery.mdwn create mode 100644 doc/forum/how_to_disaster_recovery/comment_10_be3cf3736166855012e10c2d251043e9._comment create mode 100644 doc/forum/how_to_disaster_recovery/comment_11_7fa36912ae21a66d3174fec35356d7ba._comment create mode 100644 doc/forum/how_to_disaster_recovery/comment_12_f2e570dc60a6f16e8f696d94e253775f._comment create mode 100644 doc/forum/how_to_disaster_recovery/comment_1_c8db90fd7af13b9605e152ea884b5241._comment create mode 100644 doc/forum/how_to_disaster_recovery/comment_2_31cce673114eb9733e0f1c732c8f08e6._comment create mode 100644 doc/forum/how_to_disaster_recovery/comment_3_52ad88121efa92d2c64bb2816884d66b._comment create mode 100644 doc/forum/how_to_disaster_recovery/comment_4_444579d0dac2ca14e6b1cbadcca5fcf3._comment create mode 100644 doc/forum/how_to_disaster_recovery/comment_5_9b9403a80c5b0a1a441dfb94feece37d._comment create mode 100644 doc/forum/how_to_disaster_recovery/comment_6_e8ec7b1fbbb81d61d06a7def61b06354._comment create mode 100644 doc/forum/how_to_disaster_recovery/comment_7_7e08eb18e965f47782a39d0426b75b93._comment create mode 100644 doc/forum/how_to_disaster_recovery/comment_8_78720819bea58f30146451dd953f10a5._comment create mode 100644 doc/forum/how_to_disaster_recovery/comment_9_b16c74c0add6d15b75163859a752d207._comment create mode 100644 doc/forum/how_to_edit_the_git-annex_branch__63__.mdwn create mode 100644 doc/forum/how_to_edit_the_git-annex_branch__63__/comment_1_fa1936401d1abe1a28dc88968528e186._comment create mode 100644 doc/forum/how_to_force_read-only_in_enableremote__63__.mdwn create mode 100644 doc/forum/how_to_force_read-only_in_enableremote__63__/comment_1_a1206c8517f467d9a584ba89ef0e101a._comment create mode 100644 doc/forum/how_to_prevent_accidentally_running___96__git_add__96____63__.mdwn create mode 100644 doc/forum/how_to_prevent_accidentally_running___96__git_add__96____63__/comment_1_440dcd19ea2512f968858b780c2a2913._comment create mode 100644 doc/forum/how_to_prevent_accidentally_running___96__git_add__96____63__/comment_2_e9b70386774996a3d0446faaa3219120._comment create mode 100644 doc/forum/how_to_prevent_accidentally_running___96__git_add__96____63__/comment_3_3dbd76accad2df2fff14b55452c828ef._comment create mode 100644 doc/forum/how_to_prevent_accidentally_running___96__git_add__96____63__/comment_4_bfb4758fdb2a4afafd9c4d45de5c5c6b._comment create mode 100644 doc/forum/how_to_remove_files_and_symlinks_but_keep_historical_file_contents.mdwn create mode 100644 doc/forum/how_to_remove_files_and_symlinks_but_keep_historical_file_contents/comment_1_cba76311e146dabb8ffc789bf4c8b714._comment create mode 100644 doc/forum/how_to_remove_files_and_symlinks_but_keep_historical_file_contents/comment_2_8d99c50fc1347367ccc0714e8d1af385._comment create mode 100644 doc/forum/how_to_remove_files_and_symlinks_but_keep_historical_file_contents/comment_3_a7a9c55c2ad448179dff5d5b69976c7d._comment create mode 100644 doc/forum/how_to_set_up_syncing_for_multiple_computer_and_a_centralized_backup_unit.mdwn create mode 100644 doc/forum/how_to_set_up_syncing_for_multiple_computer_and_a_centralized_backup_unit/comment_1_a0551431a57ccab2463f2a6d43553337._comment create mode 100644 doc/forum/how_to_set_up_syncing_for_multiple_computer_and_a_centralized_backup_unit/comment_2_e96e8cf6e08e3a21bfcefbc202e78fe2._comment create mode 100644 doc/forum/how_to_set_up_syncing_for_multiple_computer_and_a_centralized_backup_unit/comment_3_2ad4c1a4bfe00c22444ab878c84a8830._comment create mode 100644 doc/forum/how_to_set_up_syncing_for_multiple_computer_and_a_centralized_backup_unit/comment_4_44639388349a9ea5eabda9ebf79817b3._comment create mode 100644 doc/forum/how_to_set_up_syncing_for_multiple_computer_and_a_centralized_backup_unit/comment_5_339123ab87b69b11d6e999ad6eaf6df5._comment create mode 100644 doc/forum/how_to_speed_up_metadata_view_genration.mdwn create mode 100644 doc/forum/how_to_speed_up_metadata_view_genration/comment_1_56044eef4cee8940a9bd5f66d2b1cd8f._comment create mode 100644 doc/forum/howto_to_link_to_existing_direct_mode_git-annexes.mdwn create mode 100644 doc/forum/howto_to_link_to_existing_direct_mode_git-annexes/comment_1_7bd0edaf2352293678f0942aaa885d13._comment create mode 100644 doc/forum/howto_update_feed.mdwn create mode 100644 doc/forum/howto_update_feed/comment_1_bec356619f370a618f19a187d09d2e35._comment create mode 100644 doc/forum/howto_update_feed/comment_2_84dfb80ba3db8d41164eb97022becae3._comment create mode 100644 doc/forum/howto_update_feed/comment_3_20166db298c10074e062aecad59ffd71._comment create mode 100644 doc/forum/howto_update_feed/comment_4_f040e31b763fc9a7aa092442b4d6b8e8._comment create mode 100644 doc/forum/huge_text_files___40__not_binary__41___-_compress.mdwn create mode 100644 doc/forum/huge_text_files___40__not_binary__41___-_compress/comment_1_bd0925e056c275c52b59f947e23afe86._comment create mode 100644 doc/forum/huge_text_files___40__not_binary__41___-_compress/comment_2_44eb5f14dbf3c5061afeb847958f27fe._comment create mode 100644 doc/forum/huge_text_files___40__not_binary__41___-_compress/comment_3_4788a41425d4cc65e9f529dbcdb2bf73._comment create mode 100644 doc/forum/huge_text_files___40__not_binary__41___-_compress/comment_4_4dbb0b18905d30ae6b187745859e75c2._comment create mode 100644 doc/forum/ignore_changes_made_by_a_remote.mdwn create mode 100644 doc/forum/ignore_changes_made_by_a_remote/comment_1_825676069d2e1554499b76fd8c306c30._comment create mode 100644 doc/forum/ignore_changes_made_by_a_remote/comment_2_dff49b72f7e072fddaf68584beb97f3c._comment create mode 100644 doc/forum/import_and_export_treeish_for_rsync_and_webdav.mdwn create mode 100644 doc/forum/import_and_export_treeish_for_rsync_and_webdav/comment_1_6a8ee189ff2fee0697b67a405f22c5a4._comment create mode 100644 doc/forum/importfeed__58___comments_in_file_with_feed_urls.mdwn create mode 100644 doc/forum/importfeed__58___comments_in_file_with_feed_urls/comment_1_370f5165fdda5c01a5335c864321a348._comment create mode 100644 doc/forum/importfeed_does_not_work_with_youtube_anymore.mdwn create mode 100644 doc/forum/importfeed_does_not_work_with_youtube_anymore/comment_1_2fcbc85d7aa51dfdb2025a00c37fa8ac._comment create mode 100644 doc/forum/importfeed_does_not_work_with_youtube_anymore/comment_2_58733a5065493dbac5cb8d12a029dace._comment create mode 100644 doc/forum/importfeed_does_not_work_with_youtube_anymore/comment_3_aef7c172d485f8f6570ada5756446480._comment create mode 100644 doc/forum/importfeed_loads_files_a_second_time_prepending_a_2__95__.mdwn create mode 100644 doc/forum/importfeed_loads_files_a_second_time_prepending_a_2__95__/comment_1_1623344457fbe10c464506e41fbac3d8._comment create mode 100644 doc/forum/importfeed_on_multiple___34__overlapping__34___playlists.mdwn create mode 100644 doc/forum/importfeed_on_multiple___34__overlapping__34___playlists/comment_1_ecd0764e7f15469217fd5e04a563f34c._comment create mode 100644 doc/forum/importfeed_on_multiple___34__overlapping__34___playlists/comment_2_b9885808ebe447c26283f910f4fc37c3._comment create mode 100644 doc/forum/importfeed_on_multiple___34__overlapping__34___playlists/comment_3_aa1077117a83ecffccb8d2095818fa02._comment create mode 100644 doc/forum/importfeed_on_multiple___34__overlapping__34___playlists/comment_4_0bf6d5b03032c0b9fd35c8410aea832c._comment create mode 100644 doc/forum/include__61__subdir__47____42___in_prefererred_content_expression_not_working.mdwn create mode 100644 doc/forum/incompatible_versions__63__.mdwn create mode 100644 doc/forum/incompatible_versions__63__/comment_1_629f28258746d413e452cbd42a1a43f4._comment create mode 100644 doc/forum/initremote_type__61__web.mdwn create mode 100644 doc/forum/initremote_type__61__web/comment_1_9ad92da9525cd89e515d1c5745a59c13._comment create mode 100644 doc/forum/initremote_type__61__web/comment_2_acc1dce80c3ed3b13fdfba55ab362581._comment create mode 100644 doc/forum/initremote_type__61__web/comment_3_b222de7b3d4397fe8bcafd20c661bc64._comment create mode 100644 doc/forum/initremote_type__61__web/comment_4_d128b2abef6cfdcac679aeff7a52d493._comment create mode 100644 doc/forum/initremote_type__61__web/comment_5_8de26c367ccb68b917b0b5f91eec8d1a._comment create mode 100644 doc/forum/is_it_possible_to_use_github_with_git-lfs_special_remote_within_the_assistant___40__android__41____63__.mdwn create mode 100644 doc/forum/is_it_possible_to_use_github_with_git-lfs_special_remote_within_the_assistant___40__android__41____63__/comment_1_d9e0c9471c14178a1b3d07d3c6d76897._comment create mode 100644 doc/forum/is_it_possible_to_use_github_with_git-lfs_special_remote_within_the_assistant___40__android__41____63__/comment_2_a73cbde4297d1be734c768d7b8f9d597._comment create mode 100644 doc/forum/is_there_a_way_to_automatically_retry_when_special_remotes_fail__63__.mdwn create mode 100644 doc/forum/is_there_a_way_to_automatically_retry_when_special_remotes_fail__63__/comment_1_82820ce711b87b092a21e31fd381ffce._comment create mode 100644 doc/forum/is_there_a_way_to_automatically_retry_when_special_remotes_fail__63__/comment_2_160e80583b647eae53aa120ca734e34a._comment create mode 100644 doc/forum/is_there_a_way_to_automatically_retry_when_special_remotes_fail__63__/comment_3_6d81a41edf052e310e1f80cc6add3c09._comment create mode 100644 doc/forum/is_there_a_way_to_only_commit_some_files_in_direct-mode___63__.mdwn create mode 100644 doc/forum/is_there_a_way_to_only_commit_some_files_in_direct-mode___63__/comment_1_804e43111ee97dff15e49e50b6c29d91._comment create mode 100644 doc/forum/is_there_a_way_to_only_commit_some_files_in_direct-mode___63__/comment_2_299ad6cd0225daa166d36af3726a9ef2._comment create mode 100644 doc/forum/is_windows_really_slow__63__.mdwn create mode 100644 doc/forum/journal.lck_became_readonly_after_really_long_fsck.mdwn create mode 100644 doc/forum/journal.lck_became_readonly_after_really_long_fsck/comment_1_6c094472d7f6f5f0257a445805200a82._comment create mode 100644 doc/forum/keys__44___URLs_and_URIs.mdwn create mode 100644 doc/forum/keys__44___URLs_and_URIs/comment_1_d285566ca97e720a7bb497c0db8cc0c2._comment create mode 100644 doc/forum/known_and_local_annex_keys.mdwn create mode 100644 doc/forum/known_and_local_annex_keys/comment_1_3cb4828dc7116e4cf49e119f055ae9a3._comment create mode 100644 doc/forum/known_and_local_annex_keys/comment_2_68f20c881eafe986694bde10571cf1c0._comment create mode 100644 doc/forum/known_and_local_annex_keys/comment_3_e195a7091a06ce0427bb28aca9a17d04._comment create mode 100644 doc/forum/known_and_local_annex_keys/comment_4_d81f0bf7465832cb676fd89f5d53ec18._comment create mode 100644 doc/forum/largefiles__58___fail-on-unspecified_mode__63__.mdwn create mode 100644 doc/forum/largefiles__58___fail-on-unspecified_mode__63__/comment_1_0bddf22d95cccf68a2852d7ef3a6dc19._comment create mode 100644 doc/forum/library__44___backup_and_music_player.mdwn create mode 100644 doc/forum/library__44___backup_and_music_player/comment_1_a6e38a1678c433e5a5d96afae4ae4332._comment create mode 100644 doc/forum/linux_standalone_tarballs.mdwn create mode 100644 doc/forum/linux_standalone_tarballs/comment_1_5c3ceb845a45e50784f7098bfbf94df1._comment create mode 100644 doc/forum/local_pairing_with_2_mac.mdwn create mode 100644 doc/forum/local_pairing_with_2_mac/comment_10_508585e72c81d197a9a1e193c25a702a._comment create mode 100644 doc/forum/local_pairing_with_2_mac/comment_1_6ca4fed183340a2902d1d4d91284b772._comment create mode 100644 doc/forum/local_pairing_with_2_mac/comment_2_7c2b3d0a8a69c7056508f8ec73ebefcd._comment create mode 100644 doc/forum/local_pairing_with_2_mac/comment_3_07fa468aac1288e770487973052bccea._comment create mode 100644 doc/forum/local_pairing_with_2_mac/comment_4_dc0494213d2b57b5b9a489b096a5b8d0._comment create mode 100644 doc/forum/local_pairing_with_2_mac/comment_5_bcac18e137c00d4279774dec51963289._comment create mode 100644 doc/forum/local_pairing_with_2_mac/comment_6_76b62eafda1ecbf88abe288cbe778e17._comment create mode 100644 doc/forum/local_pairing_with_2_mac/comment_7_13fe788f2e9a823ad2e4844f114675a7._comment create mode 100644 doc/forum/local_pairing_with_2_mac/comment_8_f81b454e9cfc14dcb33148798be55de3._comment create mode 100644 doc/forum/local_pairing_with_2_mac/comment_9_f7a1ce9627ebfc854dfde2f6c924db80._comment create mode 100644 doc/forum/local_subtree_and_broken_symlinks.mdwn create mode 100644 doc/forum/local_subtree_and_broken_symlinks/comment_1_779cc4e49cb4da8aea7f5743e6257f21._comment create mode 100644 doc/forum/location_tracking_cleanup.mdwn create mode 100644 doc/forum/location_tracking_cleanup/comment_1_7d6319e8c94dfe998af9cfcbf170efb2._comment create mode 100644 doc/forum/location_tracking_cleanup/comment_2_e7395cb6e01f42da72adf71ea3ebcde4._comment create mode 100644 doc/forum/location_tracking_cleanup/comment_3_c15428cec90e969284a5e690fb4b2fde._comment create mode 100644 doc/forum/locks_during_--batch_operations.mdwn create mode 100644 doc/forum/locks_during_--batch_operations/comment_1_190f6a52d9e49b2a092ad4c848e9d0b4._comment create mode 100644 doc/forum/locks_during_--batch_operations/comment_2_b19ed6657064c11bf54673f1b2ff4860._comment create mode 100644 doc/forum/long_paths_on_windows_10_-_workaround.mdwn create mode 100644 doc/forum/lost_in_walkthrough.mdwn create mode 100644 doc/forum/lost_in_walkthrough/comment_1_51b703b961ca762f0359e1c169f1ee75._comment create mode 100644 doc/forum/lost_in_walkthrough/comment_2_a9de0401a103bdd4401ba2d5983dc54a._comment create mode 100644 doc/forum/lsof_resource_use_problems.mdwn create mode 100644 doc/forum/lsof_resource_use_problems/comment_1_a5e5d410545fa7f93f08936ec6aeee42._comment create mode 100644 doc/forum/lsof_resource_use_problems/comment_2_7b0d4109c04c47e65420105f0de3b7a2._comment create mode 100644 doc/forum/luks_encrypted_disk_support.mdwn create mode 100644 doc/forum/luks_encrypted_disk_support/comment_1_0ea476c778888f34196d9031f72b1844._comment create mode 100644 doc/forum/luks_encrypted_disk_support/comment_2_0af149bfe1868dde0a132c5d835c50df._comment create mode 100644 doc/forum/make___34__git_annex_fsck__34___only_display__44___not_move.mdwn create mode 100644 doc/forum/make___34__git_annex_fsck__34___only_display__44___not_move/comment_1_018cb2fd618a448088d9e91e4872333d._comment create mode 100644 doc/forum/make___34__git_annex_fsck__34___only_display__44___not_move/comment_2_fdfd1d1ded3fb98a83f2593605250a87._comment create mode 100644 doc/forum/make___34__git_annex_fsck__34___only_display__44___not_move/comment_3_369daddf95ab43f2c3d6b81c35810c19._comment create mode 100644 doc/forum/make_a_snapshot_backup_into_a___34__remote__34__.mdwn create mode 100644 doc/forum/make_a_snapshot_backup_into_a___34__remote__34__/comment_1_4974480f1c75152a05c2305d21ed1842._comment create mode 100644 doc/forum/make_a_snapshot_backup_into_a___34__remote__34__/comment_2_e18fba58bcd5259125e6e36194234136._comment create mode 100644 doc/forum/making_good_use_of_my_shiny_new_rsync.net_account.mdwn create mode 100644 doc/forum/making_good_use_of_my_shiny_new_rsync.net_account/comment_1_0ebe509b768d46081db2100f5b712ef7._comment create mode 100644 doc/forum/making_good_use_of_my_shiny_new_rsync.net_account/comment_2_ef63d893531d93d2eb09f48f8baff4dd._comment create mode 100644 doc/forum/man_pages_in_the_prebuilt_linux_tarball.mdwn create mode 100644 doc/forum/man_pages_in_the_prebuilt_linux_tarball/comment_1_a7bc2e84e6d7c0e2de5900685207af78._comment create mode 100644 doc/forum/manage_repository_connection_between_external_HDD_and_server.mdwn create mode 100644 doc/forum/manage_repository_connection_between_external_HDD_and_server/comment_1_ba8ed548bf228a7d1c82b68283f99a5b._comment create mode 100644 doc/forum/managing_git-annex_with_java.mdwn create mode 100644 doc/forum/managing_git-annex_with_java/comment_1_fd12f0d0727b5bdddef1d7ef6236fe57._comment create mode 100644 doc/forum/managing_multiple_repositories.mdwn create mode 100644 doc/forum/manual_update_of_.git__47__annex__47__objects.mdwn create mode 100644 doc/forum/manual_update_of_.git__47__annex__47__objects/comment_1_ea6ec91150c8962e2711631f2422bf3a._comment create mode 100644 doc/forum/manual_update_of_.git__47__annex__47__objects/comment_2_a7bbf304b26650a786e358bdc01e3069._comment create mode 100644 doc/forum/manual_update_of_.git__47__annex__47__objects/comment_3_a855096b683c4c4f84e72c797e065d59._comment create mode 100644 doc/forum/many_remotes.mdwn create mode 100644 doc/forum/mesh_configurations.mdwn create mode 100644 doc/forum/mesh_configurations/comment_10_dc99216ee2fc0bd3d43234915a0305ab._comment create mode 100644 doc/forum/mesh_configurations/comment_1_0712fa3d50ca6092bd7d98c945b5cc31._comment create mode 100644 doc/forum/mesh_configurations/comment_2_0d9ba4017343475a96975145c9db29c5._comment create mode 100644 doc/forum/mesh_configurations/comment_3_d228158cf00cd04dc9ef5602acebdaac._comment create mode 100644 doc/forum/mesh_configurations/comment_4_d5c8e99cadf976434460d6d0f410136e._comment create mode 100644 doc/forum/mesh_configurations/comment_5_a181fde7b7f6d0559331e1afa395ba0a._comment create mode 100644 doc/forum/mesh_configurations/comment_6_7cb33d2416289f744828d8d9d24e9ef6._comment create mode 100644 doc/forum/mesh_configurations/comment_7_6c9d499f64067ee9d3721dc763f3c425._comment create mode 100644 doc/forum/mesh_configurations/comment_8_a2b5da1ea55a222dd30f0e982d5ee807._comment create mode 100644 doc/forum/mesh_configurations/comment_9_ac3e1faaefaed222f725345ab4b5f01a._comment create mode 100644 doc/forum/messed_up_annex_by_using_git_checkout.mdwn create mode 100644 doc/forum/messed_up_annex_by_using_git_checkout/comment_1_04f33895f6451690372595c576be2811._comment create mode 100644 doc/forum/metadata_limits.mdwn create mode 100644 doc/forum/metadata_limits/comment_1_a20bbe49f2f23d23131221ec79c8b973._comment create mode 100644 doc/forum/metadata_limits/comment_2_4e8995ccd5fc2e5ee5d89a0780e5df9d._comment create mode 100644 doc/forum/migrate_existing_git_repository_to_git-annex.mdwn create mode 100644 doc/forum/migrate_existing_git_repository_to_git-annex/comment_1_4181bf34c71e2e8845e6e5fb55d53381._comment create mode 100644 doc/forum/migrate_existing_git_repository_to_git-annex/comment_2_5f08da5e21c0b3b5a8d1e4408c0d6405._comment create mode 100644 doc/forum/migrate_existing_git_repository_to_git-annex/comment_3_f483038c006cf7dcccf1014fa771744f._comment create mode 100644 doc/forum/migrate_existing_git_repository_to_git-annex/comment_4_057f0079fbee3451ccda08026bab21d4._comment create mode 100644 doc/forum/migration_to_git-annex_and_rsync.mdwn create mode 100644 doc/forum/misctmp_filling_up.mdwn create mode 100644 doc/forum/misctmp_filling_up/comment_1_2739dec72fe0950dd070c8fab9fbd751._comment create mode 100644 doc/forum/misctmp_filling_up/comment_2_440081b5e2b9b5b19e8cd5db3649a976._comment create mode 100644 doc/forum/misctmp_filling_up/comment_3_b6ab64f02f204fc7e8741b9c04c5349d._comment create mode 100644 doc/forum/mistakenly_checked___42__files__42___into_an_annex.__bummer.mdwn create mode 100644 doc/forum/mistakenly_checked___42__files__42___into_an_annex.__bummer/comment_1_752db25abb647804a1cc12c5b247378a._comment create mode 100644 doc/forum/mistakenly_checked___42__files__42___into_an_annex.__bummer/comment_2_db6f4959c35732f72e7a90bd9f4c665c._comment create mode 100644 doc/forum/monitoring_disk_usage_by_different_repos_on_same_drive.mdwn create mode 100644 doc/forum/monitoring_disk_usage_by_different_repos_on_same_drive/comment_1_04718e5f87a7e0521a3165bc9fc951a8._comment create mode 100644 doc/forum/more_intelligent_copy_.mdwn create mode 100644 doc/forum/more_intelligent_copy_/comment_1_526f6a007f44f389ef7c904024752541._comment create mode 100644 doc/forum/more_intelligent_copy_/comment_2_7b3f5d2e9de4b13de821177db2f57bcd._comment create mode 100644 doc/forum/move_files_under_git-annex_and_graft_history__63__.mdwn create mode 100644 doc/forum/move_files_under_git-annex_and_graft_history__63__/comment_1_345f9a32f5fc1ea21af9fe18f902d1b0._comment create mode 100644 doc/forum/move_files_under_git-annex_and_graft_history__63__/comment_2_aab850db06cbd3c33067cff567d2699e._comment create mode 100644 doc/forum/move_files_under_git-annex_and_graft_history__63__/comment_3_4cff971451dd7038ffe8f7f2fa3b28c9._comment create mode 100644 doc/forum/move_files_under_git-annex_and_graft_history__63__/comment_4_73e37a27ae3ff6673f34d8b1a6bed4a0._comment create mode 100644 doc/forum/move_files_under_git-annex_and_graft_history__63__/comment_5_d536cb5c2622d18802e6a32b03102f14._comment create mode 100644 doc/forum/moving_annex_across_filesystems.mdwn create mode 100644 doc/forum/multiple_git_repositories_inside_git_annex_assistant_repository.mdwn create mode 100644 doc/forum/multiple_git_repositories_inside_git_annex_assistant_repository/comment_1_419b27cb1c71bce021ef9f2e471aa92e._comment create mode 100644 doc/forum/multiple_git_repositories_inside_git_annex_assistant_repository/comment_2_dae4c7a42080dd89150159b2946839b1._comment create mode 100644 doc/forum/multiple_git_repositories_inside_git_annex_assistant_repository/comment_3_9d9fa65559ba4bb0e4676289b5a65684._comment create mode 100644 doc/forum/multiple_git_repositories_inside_git_annex_assistant_repository/comment_4_4e89b3590cc33b2565cd173ef7c85013._comment create mode 100644 doc/forum/multiple_repositories_single_backup.mdwn create mode 100644 doc/forum/multiple_repositories_single_backup/comment_1_4a479fa78e0b366fcff1a27bc37081de._comment create mode 100644 doc/forum/multiple_repositories_single_backup/comment_2_bbe19eec0969385a0d4682bf9e9de21a._comment create mode 100644 doc/forum/multiple_repositories_single_backup/comment_3_1b18ea058e3eb34852055cffe51de176._comment create mode 100644 doc/forum/multiple_routes_to_same_repository.mdwn create mode 100644 doc/forum/multiple_routes_to_same_repository/comment_1_26c1734d41d5374f18fc688d862d6b8e._comment create mode 100644 doc/forum/multiple_routes_to_same_repository/comment_2_d119ab485fb2d5512c15372efdb2327d._comment create mode 100644 doc/forum/multiple_sym_links___40__for_tagging_photos__41____63__.mdwn create mode 100644 doc/forum/multiple_sym_links___40__for_tagging_photos__41____63__/comment_1_96beb9ea895c80285748adb940b4f57d._comment create mode 100644 doc/forum/multiple_sym_links___40__for_tagging_photos__41____63__/comment_2_985065c1feed9300631dac7a2701f669._comment create mode 100644 doc/forum/multiple_urls_for_the_same_UUID.mdwn create mode 100644 doc/forum/multiple_urls_for_the_same_UUID/comment_1_de7410d8824a864c4d106c9f1afaec3f._comment create mode 100644 doc/forum/multiple_urls_for_the_same_UUID/comment_2_309a86cf7e08448be64357a30d8b56ae._comment create mode 100644 doc/forum/multiple_urls_for_the_same_UUID/comment_3_fa97a45fc1392935fd5e0714db999bc2._comment create mode 100644 doc/forum/multiple_urls_for_the_same_UUID/comment_4_139178b1ba45b62eec0c89a660c0c81e._comment create mode 100644 doc/forum/multiple_urls_for_the_same_UUID/comment_5_7237986a34228282c6b764309afc1d57._comment create mode 100644 doc/forum/multiple_urls_for_the_same_UUID/comment_6_392819ba657569a1b997b58aa921a0ad._comment create mode 100644 doc/forum/multiple_urls_for_the_same_UUID/comment_7_276cb5d94cbd10e9fc7d1cf4ac607273._comment create mode 100644 doc/forum/multiple_urls_for_the_same_UUID/comment_8_c44144c677d54aaea6e900d0d7e000a3._comment create mode 100644 doc/forum/multiple_urls_for_the_same_UUID/comment_9_38f3007635b0a7b7d30bad0af8a2d0a9._comment create mode 100644 doc/forum/n00b_question._Can_I_use_git-annex_to_manage_a_tree_that_contains_git_repos__63__.mdwn create mode 100644 doc/forum/n00b_question._Can_I_use_git-annex_to_manage_a_tree_that_contains_git_repos__63__/comment_1_ac45ad341f026289ce56183b9ff463af._comment create mode 100644 doc/forum/n00b_question._Can_I_use_git-annex_to_manage_a_tree_that_contains_git_repos__63__/comment_2_53e0ffe901a1a1c22361bfd7cf71affd._comment create mode 100644 doc/forum/n00b_question._Can_I_use_git-annex_to_manage_a_tree_that_contains_git_repos__63__/comment_2_f7416c26daca543ad08c11e187e1589e._comment create mode 100644 doc/forum/n00b_question._Can_I_use_git-annex_to_manage_a_tree_that_contains_git_repos__63__/comment_4_9c6386710387f7334ea44c1de7cc8729._comment create mode 100644 doc/forum/name_resolution_of_dne.mdwn create mode 100644 doc/forum/name_resolution_of_dne/comment_1_7309e109d1f6eba8fc92659372d64b19._comment create mode 100644 doc/forum/name_resolution_of_dne/comment_2_54ed13db673cff7177cd371143a295b4._comment create mode 100644 doc/forum/named_pipes_as_arguments.mdwn create mode 100644 doc/forum/named_pipes_as_arguments/comment_1_0fff7a842609af3531d151425a94df0a._comment create mode 100644 doc/forum/new_linux_arm_tarball_build.mdwn create mode 100644 doc/forum/new_linux_arm_tarball_build/comment_10_5f9735ec62478c99b8c814055206cff0._comment create mode 100644 doc/forum/new_linux_arm_tarball_build/comment_11_859c44046b00fe885f6878cfe0e46360._comment create mode 100644 doc/forum/new_linux_arm_tarball_build/comment_12_35ade68d62e95036344ad33db3279c21._comment create mode 100644 doc/forum/new_linux_arm_tarball_build/comment_13_36f48c30894b9b225b812ba5e5b2f504._comment create mode 100644 doc/forum/new_linux_arm_tarball_build/comment_14_67021b6d239690c9d18e8630aa2254ff._comment create mode 100644 doc/forum/new_linux_arm_tarball_build/comment_15_646a19555f982fb7ab302289400adc3d._comment create mode 100644 doc/forum/new_linux_arm_tarball_build/comment_16_442015225a14f60064aa3ba3cfbdf2ae._comment create mode 100644 doc/forum/new_linux_arm_tarball_build/comment_17_653448e38c3bb71a97023cb5d6b21af6._comment create mode 100644 doc/forum/new_linux_arm_tarball_build/comment_18_0a76ce3895ba9598bd79625268d95ef4._comment create mode 100644 doc/forum/new_linux_arm_tarball_build/comment_1_7211ddc626bae97d4140c723c3cf028f._comment create mode 100644 doc/forum/new_linux_arm_tarball_build/comment_2_fcbe3f7fa9d012b21c7a771553fa9142._comment create mode 100644 doc/forum/new_linux_arm_tarball_build/comment_3_2702cdbae4179a7a103d2a7098a8ed5e._comment create mode 100644 doc/forum/new_linux_arm_tarball_build/comment_4_e1d802fbcc9d699ece5267e80990255a._comment create mode 100644 doc/forum/new_linux_arm_tarball_build/comment_5_257b91ecbf5a6040a8e4c9a360c775ba._comment create mode 100644 doc/forum/new_linux_arm_tarball_build/comment_6_bd8cca86a63be7e330111618c1959a74._comment create mode 100644 doc/forum/new_linux_arm_tarball_build/comment_7_6814bdeca94328fe6c3f407795ff923a._comment create mode 100644 doc/forum/new_linux_arm_tarball_build/comment_8_6db99d998ca990494c8f2826ff1ca273._comment create mode 100644 doc/forum/new_linux_arm_tarball_build/comment_9_2802b24ccb24f1615c9d61904f916d05._comment create mode 100644 doc/forum/new_microfeatures.mdwn create mode 100644 doc/forum/new_microfeatures/comment_1_058bd517c6fffaf3446b1f5d5be63623._comment create mode 100644 doc/forum/new_microfeatures/comment_2_41ad904c68e89c85e1fc49c9e9106969._comment create mode 100644 doc/forum/new_microfeatures/comment_3_a1a9347b5bc517f2a89a8b292c3f8517._comment create mode 100644 doc/forum/new_microfeatures/comment_4_5a6786dc52382fff5cc42fdb05770196._comment create mode 100644 doc/forum/new_microfeatures/comment_5_3c627d275586ff499d928a8f8136babf._comment create mode 100644 doc/forum/new_microfeatures/comment_6_31ea08c008500560c0b96c6601bc6362._comment create mode 100644 doc/forum/new_microfeatures/comment_7_94045b9078b1fff877933b012d1b49e2._comment create mode 100644 doc/forum/nntp__47__usenet_special_remote.mdwn create mode 100644 doc/forum/nntp__47__usenet_special_remote/comment_1_171a0b95b1f95cfd82073e88bdefaab9._comment create mode 100644 doc/forum/nntp__47__usenet_special_remote/comment_2_48736ed17c98ffcfb13ec00b901b2dd6._comment create mode 100644 doc/forum/non-bare_repo_on_cloud_remote.mdwn create mode 100644 doc/forum/non-bare_repo_on_cloud_remote/comment_1_da0c023af7c78f1ef1cfe1143a900a9f._comment create mode 100644 doc/forum/non-bare_repo_on_cloud_remote/comment_2_71baea93f6caaf7b81a9ac00bee91e5e._comment create mode 100644 doc/forum/non_fast_forward_error_with_git_annex_sync.mdwn create mode 100644 doc/forum/non_fast_forward_error_with_git_annex_sync/comment_1_48d66e5314de5b6a26f78622a4e93ba6._comment create mode 100644 doc/forum/non_fast_forward_error_with_git_annex_sync/comment_2_f7101a8e84bbbfb2fbea6c65ca62fdb9._comment create mode 100644 doc/forum/non_fast_forward_error_with_git_annex_sync/comment_3_bbb3a5572fa2427d9bf859ae1ba68764._comment create mode 100644 doc/forum/noob_question._VPS_web_assistant.mdwn create mode 100644 doc/forum/noob_question._VPS_web_assistant/comment_1_49f349192d64048753bedcf10ee22355._comment create mode 100644 doc/forum/not_finding_git-annex-shell_on_remote.mdwn create mode 100644 doc/forum/not_finding_git-annex-shell_on_remote/comment_1_84881cad02c251a2515cec50fc22bf16._comment create mode 100644 doc/forum/not_finding_git-annex-shell_on_remote/comment_2_f32412f8d3b84cd5cb3c4d5d6bb60f32._comment create mode 100644 doc/forum/not_finding_git-annex-shell_on_remote/comment_3_dfbf7f41dd4d17f2ce8b67daa9dcd11d._comment create mode 100644 doc/forum/not_finding_git-annex-shell_on_remote/comment_4_71ae60efcacdba5e11548923b2c85b95._comment create mode 100644 doc/forum/not_getting_file_contents.mdwn create mode 100644 doc/forum/not_getting_file_contents/comment_1_4a0f7f4de9c9bc4d13db033cb75d20af._comment create mode 100644 doc/forum/not_getting_file_contents/comment_2_dc7403e1b551552f9fd00da6a1453570._comment create mode 100644 doc/forum/notify-start_and_notify-finish_for_the_assistant.mdwn create mode 100644 doc/forum/notify-start_and_notify-finish_for_the_assistant/comment_1_d3da4ce5cfea6c0a3277e83e0181102d._comment create mode 100644 doc/forum/notify-start_and_notify-finish_for_the_assistant/comment_2_01dfd865c469a5bc465f73347a65ce44._comment create mode 100644 doc/forum/offsite_repo.mdwn create mode 100644 doc/forum/offsite_repo/comment_1_1f3ab9a39baa16e3e307b23fd1aabeb8._comment create mode 100644 doc/forum/offsite_repo/comment_2_d4ecd0dc29597e3e0988e06ee9c4d245._comment create mode 100644 doc/forum/offsite_repo/comment_3_4b233762116c52bd2a754f49152201b7._comment create mode 100644 doc/forum/offsite_repo/comment_4_2e3dfd605df004330396040737a7c5ee._comment create mode 100644 doc/forum/offsite_repo/comment_5_59a7718fde634c96dd781ed5fca1f61a._comment create mode 100644 doc/forum/one-off_unlocked_annex_files_that_go_against_large.mdwn create mode 100644 doc/forum/one-off_unlocked_annex_files_that_go_against_large/comment_1_9e4604f3c7ca9be1fe6a7020fee2fd96._comment create mode 100644 doc/forum/one-off_unlocked_annex_files_that_go_against_large/comment_2_9bd32b89d0521fd1bec94683dffb4ecd._comment create mode 100644 doc/forum/one-off_unlocked_annex_files_that_go_against_large/comment_3_3c3c4b9ee0a99f0638717922785de675._comment create mode 100644 doc/forum/one-off_unlocked_annex_files_that_go_against_large/comment_4_8d1ba01f4e25606b960023eab38ec483._comment create mode 100644 doc/forum/one-off_unlocked_annex_files_that_go_against_large/comment_5_789e8ada06063f6a1c6d6358180dc202._comment create mode 100644 doc/forum/one_annex_versus_many_annexes__63__.mdwn create mode 100644 doc/forum/one_or_many_annexes__63__.mdwn create mode 100644 doc/forum/one_or_many_annexes__63__/comment_1_656d96011801d67a45b0b3bb3d70fa63._comment create mode 100644 doc/forum/only_keep_current_version_of_files_in_repo.mdwn create mode 100644 doc/forum/only_keep_current_version_of_files_in_repo/comment_1_dd03f7cd46a8c12a34e2b1cf78e7a057._comment create mode 100644 doc/forum/only_keep_current_version_of_files_in_repo/comment_2_b45120f0a11428b75c099ca3d85d9016._comment create mode 100644 doc/forum/optimising_lookupkey.mdwn create mode 100644 doc/forum/optimising_lookupkey/comment_1_e06db4754805c1e0ee298ecc676427d2._comment create mode 100644 doc/forum/optimising_lookupkey/comment_2_7dbfa3da6ae72a1f0669396664dd0c1a._comment create mode 100644 doc/forum/optimising_lookupkey/comment_3_2c895e4494cddab70ba761c6c48e7cf8._comment create mode 100644 doc/forum/original_filename_on_s3.mdwn create mode 100644 doc/forum/original_filename_on_s3/comment_1_870f3f01f95b5878d483ffedd2ae2698._comment create mode 100644 doc/forum/original_filename_on_s3/comment_2_2a0d5d77219ae2410090eb1811ee1fec._comment create mode 100644 doc/forum/original_filename_on_s3/comment_3_0aea0eef336dd648013a9cf7789fc445._comment create mode 100644 doc/forum/othertmp__58___createDirectory__58___already_exists.mdwn create mode 100644 doc/forum/othertmp__58___createDirectory__58___already_exists/comment_1_6fb34a361417e4cac08edc20fd2bc3e7._comment create mode 100644 doc/forum/othertmp__58___createDirectory__58___already_exists/comment_2_0a9372f3dba83b6cee3a33933bf2b006._comment create mode 100644 doc/forum/overmounting_repository_at_home.mdwn create mode 100644 doc/forum/overmounting_repository_at_home/comment_1_399ac5014c489698e1e45deec4db7311._comment create mode 100644 doc/forum/overmounting_repository_at_home/comment_2_d006d89ba204568cdee0731b6251ec1a._comment create mode 100644 doc/forum/overmounting_repository_at_home/comment_3_3734b50c37cbec675813cbeca7bf4ce9._comment create mode 100644 doc/forum/overwrite_files_with_export_to_special_remote.mdwn create mode 100644 doc/forum/overwrite_files_with_export_to_special_remote/comment_1_8091fc1d63ad0a96e086c91a26e2af70._comment create mode 100644 doc/forum/partial_annex_repository.mdwn create mode 100644 doc/forum/partial_annex_repository/comment_1_5e594914724a04e21087e1e4e57c2d30._comment create mode 100644 doc/forum/partial_annex_repository/comment_2_e6a9584bacc3ec98c4757c82a195b414._comment create mode 100644 doc/forum/partial_synchronisation._android_phone.mdwn create mode 100644 doc/forum/partial_synchronisation._android_phone/comment_1_2a48569277945a9c334bdfc51f8fd01f._comment create mode 100644 doc/forum/partial_synchronisation._android_phone/comment_2_550ae91c8a1fe060368c4682d37514b6._comment create mode 100644 doc/forum/people__39__s_experience_with_parallel_git-annex_operations.mdwn create mode 100644 doc/forum/people__39__s_experience_with_parallel_git-annex_operations/comment_1_5f3b51692797f56656f313e8455c1b5f._comment create mode 100644 doc/forum/performance_and_multiple_replication_problems.mdwn create mode 100644 doc/forum/performance_and_multiple_replication_problems/comment_1_a2cdf1a4840f099f6bc941fd8de966c7._comment create mode 100644 doc/forum/performance_and_multiple_replication_problems/comment_2_e65b360706c66ede6e0e841b2ebbbfbc._comment create mode 100644 doc/forum/performance_and_multiple_replication_problems/comment_3_ad7cb4c510e2ab26959ea7cb40a43fef._comment create mode 100644 doc/forum/performance_and_multiple_replication_problems/comment_4_23a6dc7ea569944ca55bd21851dd770d._comment create mode 100644 doc/forum/performance_and_multiple_replication_problems/comment_5_8df6cc8b72e0e78c7380f7d471124498._comment create mode 100644 doc/forum/performance_for_FTP_site_mirroring.mdwn create mode 100644 doc/forum/performance_for_FTP_site_mirroring/comment_1_7648fced001ce1c34726e913e06273e9._comment create mode 100644 doc/forum/performance_for_FTP_site_mirroring/comment_2_fa2b7400c85356d4de6da8459a5c3b50._comment create mode 100644 doc/forum/performance_for_FTP_site_mirroring/comment_3_cb4d7b283f20b43283036f20ebc648ec._comment create mode 100644 doc/forum/performance_improvement__58___git_on_ssd__44___annex_on_spindle_disk.mdwn create mode 100644 doc/forum/performance_improvement__58___git_on_ssd__44___annex_on_spindle_disk/comment_1_b3f22f9be02bc4f2d5a121db3d753ff5._comment create mode 100644 doc/forum/performance_improvement__58___git_on_ssd__44___annex_on_spindle_disk/comment_2_f94abce32ef818176b42a3cc860691ae._comment create mode 100644 doc/forum/performance_improvement__58___git_on_ssd__44___annex_on_spindle_disk/comment_3_0c8e77fe248e00bd990d568623e5a5c9._comment create mode 100644 doc/forum/performance_improvement__58___git_on_ssd__44___annex_on_spindle_disk/comment_4_4b7e8f9521d61900d9ad418e74808ffb._comment create mode 100644 doc/forum/performance_improvement__58___git_on_ssd__44___annex_on_spindle_disk/comment_5_7abbbe7db3988a2d239d11b0a4c597e7._comment create mode 100644 doc/forum/performance_improvement__58___git_on_ssd__44___annex_on_spindle_disk/comment_6_46bd45fdc25d9c583f4ebe3a9730ab9f._comment create mode 100644 doc/forum/pgp_issue_in_log_file_after_upgrade_to_5.20140517.mdwn create mode 100644 doc/forum/pgp_issue_in_log_file_after_upgrade_to_5.20140517/comment_1_807d7da99f732f2fa5f9d3cb1ba9f1a1._comment create mode 100644 doc/forum/pgp_issue_in_log_file_after_upgrade_to_5.20140517/comment_2_92a7509fc42ab2347d57f080081d14b5._comment create mode 100644 doc/forum/possible_gpg_issue.mdwn create mode 100644 doc/forum/possible_gpg_issue/comment_1_c5a33ff375cddd001e6cb7be8d0ce940._comment create mode 100644 doc/forum/possible_gpg_issue/comment_2_e5ea7fc9be496f71516a238522193744._comment create mode 100644 doc/forum/possible_gpg_issue/comment_3_d505b6e5050d2afa7c8543e21918193d._comment create mode 100644 doc/forum/possible_gpg_issue/comment_4_e52099d461d0df99040f664a3af23caf._comment create mode 100644 doc/forum/possible_gpg_issue/comment_5_a0c8afc2d8583d30073b62396b254a6e._comment create mode 100644 doc/forum/possible_gpg_issue/comment_6_2a0120d6b586594cfd9baabbd6605373._comment create mode 100644 doc/forum/possible_gpg_issue/comment_7_f095eadcd9f6947f64e6830acea8228e._comment create mode 100644 doc/forum/post-copy__47__sync_hook.mdwn create mode 100644 doc/forum/post-copy__47__sync_hook/comment_1_c8322d4b9bbf5eac80b48c312a42fbcf._comment create mode 100644 doc/forum/pre-commit_hook_to_use_git_annex_for_only_large_files.mdwn create mode 100644 doc/forum/pre-commit_hook_to_use_git_annex_for_only_large_files/comment_1_01db183b1f1d081066d88332e2b6166a._comment create mode 100644 doc/forum/pre-commit_hook_to_use_git_annex_for_only_large_files/comment_2_2b76809869e0289f78f137afbdcf36c8._comment create mode 100644 doc/forum/preferred_content.mdwn create mode 100644 doc/forum/preferred_content/comment_1_9c9e5f2ee5ae4d8459358ad16f879ef1._comment create mode 100644 doc/forum/preferred_content_globs_question.mdwn create mode 100644 doc/forum/preferred_content_globs_question/comment_1_de4212f2e70fde49063b45b33498ade7._comment create mode 100644 doc/forum/preferred_content_settings_for_multiple_symlinks.mdwn create mode 100644 doc/forum/preferred_content_settings_for_multiple_symlinks/comment_1_70da012d96ab576151fe3e081ef905d1._comment create mode 100644 doc/forum/preferred_content_settings_for_multiple_symlinks/comment_2_ccea74d8b5a4de1f3cd1f6da6694ae0e._comment create mode 100644 doc/forum/preferred_content_settings_for_multiple_symlinks/comment_3_fab70c642d5aaf26de05270860281030._comment create mode 100644 doc/forum/preferred_content_settings_for_multiple_symlinks/comment_4_3cbd06de53b6a13e2741124a8e7b5b5b._comment create mode 100644 doc/forum/preferred_content_settings_for_multiple_symlinks/comment_5_963558ab261d8a6315402d371e8348f9._comment create mode 100644 doc/forum/preferred_content_settings_for_multiple_symlinks/comment_6_23279af1d49d22e880d078c59f58c492._comment create mode 100644 doc/forum/preferred_content_settings_for_multiple_symlinks/comment_7_73bf2c6dfa71cdb10b36c5cda2d2dc11._comment create mode 100644 doc/forum/problem_with_non-ascii_filenames.mdwn create mode 100644 doc/forum/problem_with_non-ascii_filenames/comment_1_ad7e7d7ef4b25ef59f93246dab0e3048._comment create mode 100644 doc/forum/public-web-frontend.mdwn create mode 100644 doc/forum/public-web-frontend/comment_1_c73bd2dfe020c25eaad1c0707dd2db01._comment create mode 100644 doc/forum/public-web-frontend/comment_2_0026d7be6b17e50d86b3b54985882f80._comment create mode 100644 doc/forum/public__44___read_only_annex_without_location_tracking.mdwn create mode 100644 doc/forum/public__44___read_only_annex_without_location_tracking/comment_1_47262f048a87fd6b781090f880a9bf99._comment create mode 100644 doc/forum/public__44___read_only_annex_without_location_tracking/comment_2_ec3ff6487c9e5c89c7e508d72518bd50._comment create mode 100644 doc/forum/pulling_from_encrypted_remote.mdwn create mode 100644 doc/forum/pulling_from_encrypted_remote/comment_1_e9d6a9a6e01d01edb41a11b0da11d74d._comment create mode 100644 doc/forum/pulling_from_encrypted_remote/comment_2_8d0db2ff65ce935c6e68044a3e0721a8._comment create mode 100644 doc/forum/pure_git-annex_only_workflow.mdwn create mode 100644 doc/forum/pure_git-annex_only_workflow/comment_10_683768c9826b0bf0f267e8734b9eb872._comment create mode 100644 doc/forum/pure_git-annex_only_workflow/comment_11_6b541ed834ef45606f3b98779a25a148._comment create mode 100644 doc/forum/pure_git-annex_only_workflow/comment_12_ca8ca35d6cd4a9f94568536736c12adc._comment create mode 100644 doc/forum/pure_git-annex_only_workflow/comment_13_00c82d320c7b4bb51078beba17e14dc8._comment create mode 100644 doc/forum/pure_git-annex_only_workflow/comment_14_b63568b327215ef8f646a39d760fdfc0._comment create mode 100644 doc/forum/pure_git-annex_only_workflow/comment_15_cb7c856d8141b2de3cc95874753f1ee5._comment create mode 100644 doc/forum/pure_git-annex_only_workflow/comment_1_a32f7efd18d174845099a4ed59e6feae._comment create mode 100644 doc/forum/pure_git-annex_only_workflow/comment_2_66dc9b65523a9912411db03c039ba848._comment create mode 100644 doc/forum/pure_git-annex_only_workflow/comment_3_9b7d89da52f7ebb7801f9ec8545c3aba._comment create mode 100644 doc/forum/pure_git-annex_only_workflow/comment_4_dc8a3f75533906ad3756fcc47f7e96bb._comment create mode 100644 doc/forum/pure_git-annex_only_workflow/comment_5_afe5035a6b35ed2c7e193fb69cc182e2._comment create mode 100644 doc/forum/pure_git-annex_only_workflow/comment_6_3660d45c5656f68924acbd23790024ee._comment create mode 100644 doc/forum/pure_git-annex_only_workflow/comment_7_33db51096f568c65b22b4be0b5538c0d._comment create mode 100644 doc/forum/pure_git-annex_only_workflow/comment_8_6e5b42fdb7801daadc0b3046cbc3d51e._comment create mode 100644 doc/forum/pure_git-annex_only_workflow/comment_9_ace319652f9c7546883b5152ddc82591._comment create mode 100644 doc/forum/purge_files_with_no_copies.mdwn create mode 100644 doc/forum/purge_files_with_no_copies/comment_1_12b578689eb8d5d38c06261ec65e2109._comment create mode 100644 doc/forum/pushing_to_android.mdwn create mode 100644 doc/forum/pushing_to_android/comment_1_1a7f6d21a3eef88d20d6f2bbad4c39d5._comment create mode 100644 doc/forum/question_about_assistant_and___47__archive__47__.mdwn create mode 100644 doc/forum/question_about_assistant_and___47__archive__47__/comment_1_97890e26072af9277144651e3fdcada0._comment create mode 100644 doc/forum/question_about_assistant_and___47__archive__47__/comment_2_542bf265e35a976ac76767762d67d617._comment create mode 100644 doc/forum/question_about_assistant_and___47__archive__47__/comment_3_bafe99159df2adcd5fecc0d67bbf05a5._comment create mode 100644 doc/forum/question_about_assistant_and___47__archive__47__/comment_4_e77fa2992d9302a49a05f514c81612ca._comment create mode 100644 doc/forum/race_condition_with_drop_-J__63__.mdwn create mode 100644 doc/forum/race_condition_with_drop_-J__63__/comment_1_0607c11410d99a6933e02c28b54c1f65._comment create mode 100644 doc/forum/read_directly_from_annex.mdwn create mode 100644 doc/forum/read_directly_from_annex/comment_1_d8c4a60a672e60f89d6e57e515ef86cd._comment create mode 100644 doc/forum/rebuild_location_log_from_encrypted_remote.mdwn create mode 100644 doc/forum/rebuild_location_log_from_encrypted_remote/comment_1_f84f955fed7b96ae6208b6ff2ec650cd._comment create mode 100644 doc/forum/rebuild_location_log_from_encrypted_remote/comment_2_c0b2ce3bc7cd55a0c77ddc31493068c2._comment create mode 100644 doc/forum/rebuild_location_log_from_encrypted_remote/comment_3_06a73ca3dc73399ff000b642cca72de7._comment create mode 100644 doc/forum/receiving_indirect_renames_on_direct_repo___63__.mdwn create mode 100644 doc/forum/receiving_indirect_renames_on_direct_repo___63__/comment_1_f4b0a14373c75cb752597c832e296bcc._comment create mode 100644 doc/forum/receiving_indirect_renames_on_direct_repo___63__/comment_2_8c86dfc99f0b9040402c9d746decda53._comment create mode 100644 doc/forum/receiving_indirect_renames_on_direct_repo___63__/comment_3_0246fff6c7c75f6be45bd257ec3872a5._comment create mode 100644 doc/forum/recover_deleted_files___63__.mdwn create mode 100644 doc/forum/recover_deleted_files___63__/comment_1_d7abb7c45c6ec2723a04f153ed215453._comment create mode 100644 doc/forum/recover_deleted_files___63__/comment_2_8ea2acaa30d3ee7e9f75310f4ec859b2._comment create mode 100644 doc/forum/recover_deleted_files___63__/comment_3_376de81c70799bf409be189a48234815._comment create mode 100644 doc/forum/recover_deleted_files___63__/comment_4_2e73ac530d65a01768a57058b7220a29._comment create mode 100644 doc/forum/recovering_from_repo_corruption.mdwn create mode 100644 doc/forum/recovering_from_repo_corruption/comment_1_01fc85037e24fc70e5c5329898cf6781._comment create mode 100644 doc/forum/recovering_from_repo_corruption/comment_2_3bd1c0bf25a0e892e711a60f53cd5298._comment create mode 100644 doc/forum/recovering_from_repo_corruption/comment_3_679dde8ca0081fc6854d6d2e8a42abdb._comment create mode 100644 doc/forum/recovery_from_failed_merge.mdwn create mode 100644 doc/forum/recovery_from_failed_merge/comment_1_84e5b55d473d16bc9bdba5d88dc29bc3._comment create mode 100644 doc/forum/reflog_of_pruned_commits.mdwn create mode 100644 doc/forum/reflog_of_pruned_commits/comment_1_edb31e8722edc58be7e2593556dc3ddf._comment create mode 100644 doc/forum/reflog_of_pruned_commits/comment_2_cd0f057a730389509bd12dcaf21e3150._comment create mode 100644 doc/forum/refs__47__heads__47__synced__47__git-annex_receives_from_more_than_one_src.mdwn create mode 100644 doc/forum/refs__47__heads__47__synced__47__git-annex_receives_from_more_than_one_src/comment_1_c805561fa714ff3930742bb330b340c9._comment create mode 100644 doc/forum/reinstalled_os__44___cloned_annex__44___does_not_recognize_remote.mdwn create mode 100644 doc/forum/reinstalled_os__44___cloned_annex__44___does_not_recognize_remote/comment_1_c1962d757dd22f49e774afa13a9862ca._comment create mode 100644 doc/forum/reinstalled_os__44___cloned_annex__44___does_not_recognize_remote/comment_2_1f0f4a1dc89643cee81ff7199b55e747._comment create mode 100644 doc/forum/released_finder_integration_for_macOS_called_git-annex-turtle.mdwn create mode 100644 doc/forum/released_finder_integration_for_macOS_called_git-annex-turtle/comment_1_58f236c940ca20bfbae53324a530da0d._comment create mode 100644 doc/forum/released_finder_integration_for_macOS_called_git-annex-turtle/comment_2_54ba7672150ee32df4d2d92390a960c1._comment create mode 100644 doc/forum/released_finder_integration_for_macOS_called_git-annex-turtle/comment_3_107d0a3c9de6880d0ee164a651d2c20e._comment create mode 100644 doc/forum/released_finder_integration_for_macOS_called_git-annex-turtle/comment_4_ddb6d671ddd28ba79efce74e41eab7e1._comment create mode 100644 doc/forum/released_finder_integration_for_macOS_called_git-annex-turtle/comment_5_d496549c4f8bf3500e8ac5c2f2ae0d6e._comment create mode 100644 doc/forum/released_finder_integration_for_macOS_called_git-annex-turtle/comment_6_8b3555fe33da55c01b199efd492951b0._comment create mode 100644 doc/forum/reliability__47__completeness_of_XMPP_updates.mdwn create mode 100644 doc/forum/reliability__47__completeness_of_XMPP_updates/comment_1_e0f7aa48d54fc0564f41c3a569c723b7._comment create mode 100644 doc/forum/reliability__47__completeness_of_XMPP_updates/comment_2_4e74039a673c16c0163f2cfb406dc4c3._comment create mode 100644 doc/forum/reliability__47__completeness_of_XMPP_updates/comment_3_41ade4fe72804b2f06cd4dbf405c1746._comment create mode 100644 doc/forum/relying_on_git_for_numcopies.mdwn create mode 100644 doc/forum/relying_on_git_for_numcopies/comment_1_8ad3cccd7f66f6423341d71241ba89fc._comment create mode 100644 doc/forum/relying_on_git_for_numcopies/comment_2_be6acbc26008a9cb54e7b8f498f2c2a2._comment create mode 100644 doc/forum/relying_on_git_for_numcopies/comment_3_43d8e1513eb9947f8a503f094c03f307._comment create mode 100644 doc/forum/remembering_state.mdwn create mode 100644 doc/forum/remembering_state/comment_1_4a6ac5f50dfa5a17a0f0ccd0c2e7a466._comment create mode 100644 doc/forum/remembering_state/comment_2_1b02d3713a2986bc027d166589a11c3f._comment create mode 100644 doc/forum/remembering_state/comment_3_b48775ea1e90b061b084f61a4a9baca5._comment create mode 100644 doc/forum/remembering_state/comment_4_cbebcc6ed4bdae6815c0576475e96f6a._comment create mode 100644 doc/forum/remote-specific_meta-data.mdwn create mode 100644 doc/forum/remote-specific_meta-data/comment_1_179ec4787d93ca4710c5bd448754d404._comment create mode 100644 doc/forum/remote-specific_meta-data/comment_2_51347629414ac42a6709d00d38ebef9c._comment create mode 100644 doc/forum/remote_bare_repo_is_invisible_due_to_+__47__.git.mdwn create mode 100644 doc/forum/remote_bare_repo_is_invisible_due_to_+__47__.git/comment_1_8333d1f8d773cd114aee8899d51b8fa1._comment create mode 100644 doc/forum/remote_bare_repo_is_invisible_due_to_+__47__.git/comment_2_174f467144d1977c6bc313f6461fc5c6._comment create mode 100644 doc/forum/remote_bare_repo_is_invisible_due_to_+__47__.git/comment_3_cea5b2a55fd82e4e42ad045d1bdda0a0._comment create mode 100644 doc/forum/remote_bare_repo_is_invisible_due_to_+__47__.git/comment_4_5bd942d53cf0a4978883eed1b61cfe91._comment create mode 100644 doc/forum/remote_bare_repo_is_invisible_due_to_+__47__.git/comment_5_6863faa0a64ff72abcf82435bfabf7b0._comment create mode 100644 doc/forum/remote_bare_repo_is_invisible_due_to_+__47__.git/comment_6_df69e9d176b14c687098d52dbe3cacd3._comment create mode 100644 doc/forum/remote_server_client_repositories_are_bare__33____63__.mdwn create mode 100644 doc/forum/remote_server_client_repositories_are_bare__33____63__/comment_1_234241460f6c75a8376b303b8dd4e882._comment create mode 100644 doc/forum/remote_server_client_repositories_are_bare__33____63__/comment_2_42dfc382d07af2a4f29c76016084f87c._comment create mode 100644 doc/forum/remote_server_client_repositories_are_bare__33____63__/comment_3_32bf10cf837db16566dcc99d0b9aaf67._comment create mode 100644 doc/forum/remote_server_client_repositories_are_bare__33____63__/comment_4_cd04cfaf97f200d5e581b83bb8d018b2._comment create mode 100644 doc/forum/removing_information_from_special_remote_file.mdwn create mode 100644 doc/forum/removing_information_from_special_remote_file/comment_1_a3c41731dbbcd53715c205e29ab99e4e._comment create mode 100644 doc/forum/removing_remote.log_information_completely.mdwn create mode 100644 doc/forum/removing_remote.log_information_completely/comment_1_033f5b8f2b306c756b3f12e0a9bc6637._comment create mode 100644 doc/forum/renaming_directories_not_supported__63__.mdwn create mode 100644 doc/forum/renaming_directories_not_supported__63__/comment_1_94bb80e70fe619c6f1913b4a233e47ec._comment create mode 100644 doc/forum/renaming_directories_not_supported__63__/comment_2_4bd6386dbd5cb907a9c85fb240265ee5._comment create mode 100644 doc/forum/repair_stuck_on_ls-tree_command.mdwn create mode 100644 doc/forum/repair_stuck_on_ls-tree_command/comment_10_791c50f8a2284b704e34cacf15637341._comment create mode 100644 doc/forum/repair_stuck_on_ls-tree_command/comment_11_1d951126a9633b206dffbc77bfc65f6a._comment create mode 100644 doc/forum/repair_stuck_on_ls-tree_command/comment_12_1a844376915c6a40ad03c2b9b599367b._comment create mode 100644 doc/forum/repair_stuck_on_ls-tree_command/comment_1_9555c925516ce3be83b4dd17d587100f._comment create mode 100644 doc/forum/repair_stuck_on_ls-tree_command/comment_2_17327b90d09f8dd0bf7f359c16cf69dd._comment create mode 100644 doc/forum/repair_stuck_on_ls-tree_command/comment_2_2ae0c755f5a0bf5c93afe5e081fcb915._comment create mode 100644 doc/forum/repair_stuck_on_ls-tree_command/comment_4_875f9e36a94264a92eb097e9f4bda444._comment create mode 100644 doc/forum/repair_stuck_on_ls-tree_command/comment_5_d5c29dc4ea49542f7053bf2e83e0f07f._comment create mode 100644 doc/forum/repair_stuck_on_ls-tree_command/comment_6_061770159851c0f06a962937dff035b9._comment create mode 100644 doc/forum/repair_stuck_on_ls-tree_command/comment_7_5d9e5fd148d5f9e918ad818e07009d69._comment create mode 100644 doc/forum/repair_stuck_on_ls-tree_command/comment_8_726c9a887b7df1833d7aef3bdce50517._comment create mode 100644 doc/forum/repair_stuck_on_ls-tree_command/comment_9_163cdd18380a13aaa13d68d516af1e30._comment create mode 100644 doc/forum/replacing_a_locked_file_without_unlocking_first.mdwn create mode 100644 doc/forum/replacing_a_locked_file_without_unlocking_first/comment_1_637598d027bc6194dad89d63aea511d4._comment create mode 100644 doc/forum/replacing_a_locked_file_without_unlocking_first/comment_2_b3ee1b086bf0add1e5f286635c02959a._comment create mode 100644 doc/forum/replacing_a_locked_file_without_unlocking_first/comment_3_ed4137413812467d67dd84aa5fde6263._comment create mode 100644 doc/forum/replacing_a_locked_file_without_unlocking_first/comment_4_8aa708a1bf76e452ef12c35999774791._comment create mode 100644 doc/forum/replacing_a_union_mount_with_git-annex.mdwn create mode 100644 doc/forum/replacing_a_union_mount_with_git-annex/comment_1_b627a4028d98f1a137c4af85918f49c0._comment create mode 100644 doc/forum/repo_corruption_in_usb_external_drive.mdwn create mode 100644 doc/forum/repo_corruption_in_usb_external_drive/comment_1_d9122bb0cc3551d92877c299a25b9c9e._comment create mode 100644 doc/forum/repos_syncs_but_fails_to_show_files_in_one_direction.mdwn create mode 100644 doc/forum/repos_syncs_but_fails_to_show_files_in_one_direction/comment_1_412c319a1610b447fcf372584c2bb15c._comment create mode 100644 doc/forum/repos_syncs_but_fails_to_show_files_in_one_direction/comment_2_c10d614039b82c5be289e8e34bc70f86._comment create mode 100644 doc/forum/repos_syncs_but_fails_to_show_files_in_one_direction/comment_3_4fec14b132bea863b58aa07e03fc31cc._comment create mode 100644 doc/forum/reserving_space_with_directory_special_remotes.mdwn create mode 100644 doc/forum/reserving_space_with_directory_special_remotes/comment_1_cd17b624704d93b51931023f69573323._comment create mode 100644 doc/forum/reserving_space_with_directory_special_remotes/comment_2_877ca1be23d1484a8a30cdaeb6630053._comment create mode 100644 doc/forum/reserving_space_with_directory_special_remotes/comment_3_65910eeaf3c6fcfd03f22c2957293232._comment create mode 100644 doc/forum/retrieving_previous_versions.mdwn create mode 100644 doc/forum/retrieving_previous_versions/comment_1_a4e83f688d4ec9177e7bf520f12ed26d._comment create mode 100644 doc/forum/retrieving_previous_versions/comment_2_e9251f66154e49a77be661c4b4918e18._comment create mode 100644 doc/forum/retrieving_previous_versions/comment_3_5b0ca6fbc000727bf78f5fc4ba34b91a._comment create mode 100644 doc/forum/root_assistant__63__.mdwn create mode 100644 doc/forum/root_assistant__63__/comment_1_fccab2e36d393f420d0fa23958e6a9d2._comment create mode 100644 doc/forum/rsync.net__58___Too_many_authentication_failures_for___42____42____42____42____42__.mdwn create mode 100644 doc/forum/rsync.net__58___Too_many_authentication_failures_for___42____42____42____42____42__/comment_1_7754e2cfb72b034effe8642c1b3e593e._comment create mode 100644 doc/forum/rsync.net__58___Too_many_authentication_failures_for___42____42____42____42____42__/comment_2_04e1da4352ef9f9be90253ea726e5f24._comment create mode 100644 doc/forum/rsync.net__58___Too_many_authentication_failures_for___42____42____42____42____42__/comment_3_84aceb9a9d3e5bd14c044861f47e3b9d._comment create mode 100644 doc/forum/rsync.net__58___Too_many_authentication_failures_for___42____42____42____42____42__/comment_4_2cd17d01edeb230197865e6ea0884de0._comment create mode 100644 doc/forum/rsync_asking_for_an_unknown_password.mdwn create mode 100644 doc/forum/rsync_asking_for_an_unknown_password/comment_1_f23d1c04a27625089eaef5b4bb7f8456._comment create mode 100644 doc/forum/rsync_asking_for_an_unknown_password/comment_2_ce4b399fdb2f04e30bd8a951994f1c80._comment create mode 100644 doc/forum/rsync_into_annex_without_overwriting_links__63__.mdwn create mode 100644 doc/forum/rsync_into_annex_without_overwriting_links__63__/comment_1_baa5351a0653838cfbf5f194f6252bcc._comment create mode 100644 doc/forum/rsync_into_annex_without_overwriting_links__63__/comment_2_598cc6e65f57e941be1319255e66a55f._comment create mode 100644 doc/forum/rsync_into_annex_without_overwriting_links__63__/comment_3_d765f93511e0ba446f54f3ad30e91e6f._comment create mode 100644 doc/forum/rsync_into_annex_without_overwriting_links__63__/comment_4_62cf96d62228b52bf7dd52eab0b94f67._comment create mode 100644 doc/forum/rsync_into_annex_without_overwriting_links__63__/comment_5_40e4e9fe7d301b5e75140136d0132860._comment create mode 100644 doc/forum/rsync_over_ssh__63__.mdwn create mode 100644 doc/forum/rsync_over_ssh__63__/comment_1_ee21f32e90303e20339e0a568321bbbe._comment create mode 100644 doc/forum/rsync_over_ssh__63__/comment_2_aa690da6ecfb2b30fc5080ad76dc77b1._comment create mode 100644 doc/forum/rsync_protocol_mismatch_due_to_encfs_folder.mdwn create mode 100644 doc/forum/rsync_regression_on_Windows.mdwn create mode 100644 doc/forum/rsync_regression_on_Windows/comment_1_0e713f8949a3e5a949489fc89c0b9078._comment create mode 100644 doc/forum/rsync_remote_is_not_available_from_a_cloned_repo/comment_1_2e340c5a6473f165dc06cc35db38e5c0._comment create mode 100644 doc/forum/rsync_test_remote_fail.mdwn create mode 100644 doc/forum/rsync_test_remote_fail/comment_1_deffffd5112a60ad7837479da045d39f._comment create mode 100644 doc/forum/rsync_test_remote_fail/comment_2_824e45450cc01b30144ac5f8265b930e._comment create mode 100644 doc/forum/rsync_test_remote_fail/comment_3_0b910e98485832dd7f305decdc39fa7f._comment create mode 100644 doc/forum/rsyncing_.git__47__annex__47__objects.mdwn create mode 100644 doc/forum/rsyncing_.git__47__annex__47__objects/comment_1_25eb9f7be5730337b9efd96dce9efd2e._comment create mode 100644 doc/forum/rsyncing_.git__47__annex__47__objects/comment_2_d7ceae666c8a1951021d3c6e6ac39a11._comment create mode 100644 doc/forum/s3_bandwidth_limitations_and_next_release.mdwn create mode 100644 doc/forum/s3_bandwidth_limitations_and_next_release/comment_1_6fba752ada4ca86c96a026a4d09ef16b._comment create mode 100644 doc/forum/s3_server_side_encryption.mdwn create mode 100644 doc/forum/s3_server_side_encryption/comment_1_68345d01b016abf96c226d2bfa17c641._comment create mode 100644 doc/forum/s3_server_side_encryption/comment_2_b2ccef6dc00d58e103ac0fda48ee94d3._comment create mode 100644 doc/forum/s3_server_side_encryption/comment_3_3eb57b98e4136b8550ea5d19393fe967._comment create mode 100644 doc/forum/s3_server_side_encryption/comment_4_71d6c2356af8974cb848c3574cf3eb6d._comment create mode 100644 doc/forum/s3_vs_ssh_Performance_Problems.mdwn create mode 100644 doc/forum/s3_vs_ssh_Performance_Problems/comment_1_65f064f09d7850abecab97007b0d30f0._comment create mode 100644 doc/forum/s3_vs_ssh_Performance_Problems/comment_2_baaf2384d9196077268e9ca9bbe3b871._comment create mode 100644 doc/forum/s3_vs_ssh_Performance_Problems/comment_3_dc44be42070c073d150c476406e9b425._comment create mode 100644 doc/forum/s3_vs_ssh_Performance_Problems/comment_4_f9c3ef3b1b44bfb29125acb6ec621f38._comment create mode 100644 doc/forum/safely_dropping_git-annex_history.mdwn create mode 100644 doc/forum/safely_dropping_git-annex_history/comment_10_a4b93a3fbc98d9b86e942f95e0039862._comment create mode 100644 doc/forum/safely_dropping_git-annex_history/comment_11_383882fafd32f25ed22b5eb2fb3691b9._comment create mode 100644 doc/forum/safely_dropping_git-annex_history/comment_12_47794a2abf29bf4ea2763ff89d872ab4._comment create mode 100644 doc/forum/safely_dropping_git-annex_history/comment_13_b7b920862fc82eaa5d7deae34b4aebc4._comment create mode 100644 doc/forum/safely_dropping_git-annex_history/comment_14_979bbccf31dbee1707d403957bde3493._comment create mode 100644 doc/forum/safely_dropping_git-annex_history/comment_1_4fd76d10a93fe01588fce7a621f9254d._comment create mode 100644 doc/forum/safely_dropping_git-annex_history/comment_2_10ecf3220ffcbbe94ba09da225458f18._comment create mode 100644 doc/forum/safely_dropping_git-annex_history/comment_3_e3beb8acb075faaeef6c052aecbf0a41._comment create mode 100644 doc/forum/safely_dropping_git-annex_history/comment_4_61a5fe2e7e47c60a8b237ea69404a37f._comment create mode 100644 doc/forum/safely_dropping_git-annex_history/comment_5_426d02e2f2a2ae4ec7eae02dfe4519b3._comment create mode 100644 doc/forum/safely_dropping_git-annex_history/comment_6_410a7296c2cee16d3d5bb618a5a41c1d._comment create mode 100644 doc/forum/safely_dropping_git-annex_history/comment_7_42cf492fc98a9eba8176387749ef12e0._comment create mode 100644 doc/forum/safely_dropping_git-annex_history/comment_8_c0327ada073d8b69535f71b4dc6aa57e._comment create mode 100644 doc/forum/safely_dropping_git-annex_history/comment_9_f83d6090aea2b7d5d54c876df940cbad._comment create mode 100644 doc/forum/scalability_with_lots_of_files.mdwn create mode 100644 doc/forum/scalability_with_lots_of_files/comment_1_b9bb0a71d81b8cbc2a751bb7bab84812._comment create mode 100644 doc/forum/schedule_repository___91__expression__93__.mdwn create mode 100644 doc/forum/schedule_repository___91__expression__93__/comment_1_b123b657a92897017973927e3e47673b._comment create mode 100644 doc/forum/script_to_generate___34__.hidden__34___files_for_files_not_in_local_remote.mdwn create mode 100644 doc/forum/script_to_generate___34__.hidden__34___files_for_files_not_in_local_remote/comment_1_76453756be78f06ef3a3d7d1bf011b9f._comment create mode 100644 doc/forum/security_risk_presented_by_remote.log__63__.mdwn create mode 100644 doc/forum/security_risk_presented_by_remote.log__63__/comment_1_9715488033f2a8939a32ed12259377ba._comment create mode 100644 doc/forum/security_risk_presented_by_remote.log__63__/comment_2_40383346237de0bae4760dc85fefc348._comment create mode 100644 doc/forum/security_risk_presented_by_remote.log__63__/comment_3_b1ddf06b34f750e9bbd88e6d5348e765._comment create mode 100644 doc/forum/security_risk_presented_by_remote.log__63__/comment_4_428bbced6406a35eb093a27e35831f38._comment create mode 100644 doc/forum/security_risk_presented_by_remote.log__63__/comment_5_df1eab397c8e08698064391438bbff1b._comment create mode 100644 doc/forum/security_risk_presented_by_remote.log__63__/comment_6_6a3911dc346d506d4350b5aec7619462._comment create mode 100644 doc/forum/seems_to_build_fine_on_haskell_platform_2011.mdwn create mode 100644 doc/forum/share_.git__47__annex__47__objects_across_multiple_repositories_on_one_machine.mdwn create mode 100644 doc/forum/share_.git__47__annex__47__objects_across_multiple_repositories_on_one_machine/comment_1_1606849eb13b6069394455297395dc30._comment create mode 100644 doc/forum/share_.git__47__annex__47__objects_across_multiple_repositories_on_one_machine/comment_2_f60c43ec9d493db03e2a5a5595501e55._comment create mode 100644 doc/forum/share_.git__47__annex__47__objects_across_multiple_repositories_on_one_machine/comment_3_b041da6694d9d9d21a67f7bbdda0f62e._comment create mode 100644 doc/forum/shared_cipher_tries_to_use_gpg.mdwn create mode 100644 doc/forum/shared_cipher_tries_to_use_gpg/comment_1_760961eaaa7d5c254dd71c5792437c9e._comment create mode 100644 doc/forum/shared_cipher_tries_to_use_gpg/comment_2_f3260aea3a5bb9b95a9bdf1d0dfce090._comment create mode 100644 doc/forum/short_exlusive_refspec_notation_for_git_annex_unused_.mdwn create mode 100644 doc/forum/short_exlusive_refspec_notation_for_git_annex_unused_/comment_1_0aeb5702e74fcf158f1e9aca16ca9e6b._comment create mode 100644 doc/forum/slow_ikiwiki_server__63__.mdwn create mode 100644 doc/forum/slow_ikiwiki_server__63__/comment_1_f734812a94c0f6c7612257f82e0c4b36._comment create mode 100644 doc/forum/slow_ikiwiki_server__63__/comment_2_1eb8334b06b784211eb93405dbf93a77._comment create mode 100644 doc/forum/slow_ikiwiki_server__63__/comment_3_d73e4ff5f273160a3df5590ebafd440c._comment create mode 100644 doc/forum/slow_s3_transfer.mdwn create mode 100644 doc/forum/slow_s3_transfer/comment_1_a6e3f8579447d85c22f3bb99c4e6cf0d._comment create mode 100644 doc/forum/slow_s3_transfer/comment_2_f66a8d597de5065049a9a9b245166540._comment create mode 100644 doc/forum/sneakernet_with_a___34__directory__34___special_remote_on_fat.mdwn create mode 100644 doc/forum/sneakernet_with_a___34__directory__34___special_remote_on_fat/comment_1_a6f0ae755b9e24fd0de5868b57c6a497._comment create mode 100644 doc/forum/sneakernet_with_a___34__directory__34___special_remote_on_fat/comment_2_9fe4a596aea6bd1a898b4c235126dce2._comment create mode 100644 doc/forum/sneakernet_with_a___34__directory__34___special_remote_on_fat/comment_3_02eae41ba9ad2f2fb15cbd20069bf1da._comment create mode 100644 doc/forum/some_symlinks_left_in_direct_mode.mdwn create mode 100644 doc/forum/some_symlinks_left_in_direct_mode/comment_1_fd8d8107861453f0aa6b2c390e369307._comment create mode 100644 doc/forum/some_symlinks_left_in_direct_mode/comment_2_63f61caf28e834d48e12467bf09b2e3d._comment create mode 100644 doc/forum/something_really_good_happened_with_3.20130124.mdwn create mode 100644 doc/forum/something_really_good_happened_with_3.20130124/comment_1_1712bddd2f483a353f6313aa626445f1._comment create mode 100644 doc/forum/sparse_git_checkouts_with_annex.mdwn create mode 100644 doc/forum/sparse_git_checkouts_with_annex/comment_1_c7dc199c5740a0e7ba606dfb5e3e579a._comment create mode 100644 doc/forum/sparse_git_checkouts_with_annex/comment_2_e357db3ccc4079f07a291843975535eb._comment create mode 100644 doc/forum/sparse_git_checkouts_with_annex/comment_3_fcfafca994194d57dccf5319c7c9e646._comment create mode 100644 doc/forum/sparse_git_checkouts_with_annex/comment_4_04dc14880f31eee2b6d767d4d4258c5a._comment create mode 100644 doc/forum/special_remote_for_IMAP.mdwn create mode 100644 doc/forum/special_remote_for_IMAP/comment_1_7c7d4b57a1b6508fff1a6b0508c861f8._comment create mode 100644 doc/forum/special_remote_for_IMAP/comment_2_9c46fe8a857aa7a5ce797288144386bd._comment create mode 100644 doc/forum/special_remote_for_IMAP/comment_3_27e3b644df6942ce4c103236d0d5cb1b._comment create mode 100644 doc/forum/special_remote_for_IMAP/comment_4_0f8e01c453afb02aebf44b3fb2c9a7c1._comment create mode 100644 doc/forum/special_remote_for_iPods.mdwn create mode 100644 doc/forum/special_remote_for_iPods/comment_1_37cc3dc740341cc663074fd3bfb85947._comment create mode 100644 doc/forum/special_remote_which_applies_a_lossless_operation_in__47__out.mdwn create mode 100644 doc/forum/special_remote_which_applies_a_lossless_operation_in__47__out/comment_1_195f52aaaa36ce20955f2eb40af3c79a._comment create mode 100644 doc/forum/speed_up_assistant_startup_on_large_repositories.mdwn create mode 100644 doc/forum/speed_up_assistant_startup_on_large_repositories/comment_1_5ba637a0f6d01ba24fe25e6265134e0a._comment create mode 100644 doc/forum/speed_up_assistant_startup_on_large_repositories/comment_2_d65746697977f8971a4b59f5b413f926._comment create mode 100644 doc/forum/speed_up_assistant_startup_on_large_repositories/comment_3_be6c4fe5a0c745688438b716973791cc._comment create mode 100644 doc/forum/speed_up_assistant_startup_on_large_repositories/comment_4_a07472338a08c068a9b88b2176fc2bee._comment create mode 100644 doc/forum/ssh__95__exchange__95__identification__58___read__58___Connection_reset_by_peer.mdwn create mode 100644 doc/forum/ssh__95__exchange__95__identification__58___read__58___Connection_reset_by_peer/comment_1_87b9540e37abb16c0ec7605f5ab204a5._comment create mode 100644 doc/forum/ssh__95__exchange__95__identification__58___read__58___Connection_reset_by_peer/comment_2_bd3383c142bf93d9cd496cb668d7782c._comment create mode 100644 doc/forum/ssh__95__exchange__95__identification__58___read__58___Connection_reset_by_peer/comment_3_9b1911ae6468d09dae74ab1a60d2757b._comment create mode 100644 doc/forum/ssh_key_setup_woes_in_Android.mdwn create mode 100644 doc/forum/ssh_key_setup_woes_in_Android/comment_1_f16fbff27a449409699f3dbcf9590622._comment create mode 100644 doc/forum/ssh_password.mdwn create mode 100644 doc/forum/ssh_password/comment_1_a3e5a41e1d4da683d577976b134b11ee._comment create mode 100644 doc/forum/ssh_password/comment_2_fa261676a99d49d4b237b0d43048d76d._comment create mode 100644 doc/forum/ssh_remote_-_no___34__use_a_git_repository__34___option_during_setup__63__.mdwn create mode 100644 doc/forum/ssh_remote_-_no___34__use_a_git_repository__34___option_during_setup__63__/comment_1_7244794579a191a677190c60758f32e7._comment create mode 100644 doc/forum/ssh_remote_-_no___34__use_a_git_repository__34___option_during_setup__63__/comment_2_277cf12907bd7c5930eb4f137b115e29._comment create mode 100644 doc/forum/ssh_vs_cifs__47__webdav.mdwn create mode 100644 doc/forum/ssl_errors_with_special_remote.mdwn create mode 100644 doc/forum/ssl_errors_with_special_remote/comment_1_a3d68cc1af06c54d29818644a9943cc4._comment create mode 100644 doc/forum/ssl_errors_with_special_remote/comment_2_6ef51ec4daa0c4d3abae22dafe6f068b._comment create mode 100644 doc/forum/ssl_errors_with_special_remote/comment_3_d0e4921bd6d71c7b43418722008d2c22._comment create mode 100644 doc/forum/standalone_tarballs_for_specific_versions.mdwn create mode 100644 doc/forum/standalone_tarballs_for_specific_versions/comment_10_3c41c48d40ae44129a80f2d2bef284ae._comment create mode 100644 doc/forum/standalone_tarballs_for_specific_versions/comment_11_543bb94e6a6c1313a09328402a191995._comment create mode 100644 doc/forum/standalone_tarballs_for_specific_versions/comment_12_b187721c1480debba3d391c965d17800._comment create mode 100644 doc/forum/standalone_tarballs_for_specific_versions/comment_13_121ae7a2803975e3bdcb5f9df0c4af3f._comment create mode 100644 doc/forum/standalone_tarballs_for_specific_versions/comment_14_5183f3d940ef116b07f88bac25cb97a8._comment create mode 100644 doc/forum/standalone_tarballs_for_specific_versions/comment_15_b822c789e2736caa2c7bce27e619c463._comment create mode 100644 doc/forum/standalone_tarballs_for_specific_versions/comment_16_33af5c294ccdff942f078ff366470342._comment create mode 100644 doc/forum/standalone_tarballs_for_specific_versions/comment_17_a8d92991f13993d0beb72c7dd51e23a6._comment create mode 100644 doc/forum/standalone_tarballs_for_specific_versions/comment_18_28f604900388b087eed76e7c03b8945b._comment create mode 100644 doc/forum/standalone_tarballs_for_specific_versions/comment_19_00592c4cdcd7c3f63d5eacd16abdc88b._comment create mode 100644 doc/forum/standalone_tarballs_for_specific_versions/comment_1_945d08e40897ee964be5e6945ad9914a._comment create mode 100644 doc/forum/standalone_tarballs_for_specific_versions/comment_20_59066dc14b5b45a3a15ee65cf6746bab._comment create mode 100644 doc/forum/standalone_tarballs_for_specific_versions/comment_21_c4fcf4abe2550b677ee312c597556e66._comment create mode 100644 doc/forum/standalone_tarballs_for_specific_versions/comment_22_fe5049bba125e20d766595cb30bf7ce2._comment create mode 100644 doc/forum/standalone_tarballs_for_specific_versions/comment_23_23bf8b9ab7e7850d801dcaec60ccf22d._comment create mode 100644 doc/forum/standalone_tarballs_for_specific_versions/comment_24_3dd596dc5f09564932dacd90fbb5be2b._comment create mode 100644 doc/forum/standalone_tarballs_for_specific_versions/comment_25_dd482d39c746dd6845382e9503731b6f._comment create mode 100644 doc/forum/standalone_tarballs_for_specific_versions/comment_26_7fb08748b8610ad33f800c1bd173b120._comment create mode 100644 doc/forum/standalone_tarballs_for_specific_versions/comment_2_211e260fbc60dc83a8986fac4e9700b7._comment create mode 100644 doc/forum/standalone_tarballs_for_specific_versions/comment_3_9002aa86c44c19f28ab74724daad5422._comment create mode 100644 doc/forum/standalone_tarballs_for_specific_versions/comment_4_ea42a5cb83e9cc8e24673bb805cfd4e1._comment create mode 100644 doc/forum/standalone_tarballs_for_specific_versions/comment_5_c6d2c756b51247c784786e3a02d3840a._comment create mode 100644 doc/forum/standalone_tarballs_for_specific_versions/comment_6_f7de3190366e81fc898393c1ed168c56._comment create mode 100644 doc/forum/standalone_tarballs_for_specific_versions/comment_7_6ac3fa868ab0dfa6cc26928098abc334._comment create mode 100644 doc/forum/standalone_tarballs_for_specific_versions/comment_8_74875c799f20d051739227e2b79de18f._comment create mode 100644 doc/forum/standalone_tarballs_for_specific_versions/comment_9_febd89250e37af938c723e4a204c5cef._comment create mode 100644 doc/forum/start_assistant_from_command_line.mdwn create mode 100644 doc/forum/start_assistant_from_command_line/comment_1_f8dfce1fca9f1212ccaf84e431db71a9._comment create mode 100644 doc/forum/start_assistant_from_command_line/comment_2_e769c5d09afbff85961363ddc5eb4019._comment create mode 100644 doc/forum/status_of_v7.mdwn create mode 100644 doc/forum/status_of_v7/comment_1_88d3bcb329bce6dfe33707f39b843b39._comment create mode 100644 doc/forum/store_annex_in_different_place_on_hard_drive.mdwn create mode 100644 doc/forum/store_annex_in_different_place_on_hard_drive/comment_1_a95add69028ad71f3c66b544c1a28db6._comment create mode 100644 doc/forum/support_for_git_sparse_checkout.mdwn create mode 100644 doc/forum/switching_backends.mdwn create mode 100644 doc/forum/switching_backends/comment_1_ecf4109c1148dafde3519243ae3c5a03._comment create mode 100644 doc/forum/switching_backends/comment_2_21f465a18f40b95dafd307fce0de659a._comment create mode 100644 doc/forum/switching_backends/comment_4_4c13d22c1695195e6b101bd20ef6bb42._comment create mode 100644 doc/forum/switching_backends/comment_4_e1d4a48baac23fd3f67b20eba4eee8af._comment create mode 100644 doc/forum/switching_to__47__from_direct_mode_while_assistant_is_running.mdwn create mode 100644 doc/forum/switching_to__47__from_direct_mode_while_assistant_is_running/comment_1_7832243a36613c48d0077b438dbf8b4a._comment create mode 100644 doc/forum/symlinks_corrupt__58___link_in_textfile__44___100_bytes_of_size.mdwn create mode 100644 doc/forum/symlinks_corrupt__58___link_in_textfile__44___100_bytes_of_size/comment_1_ee6ec862a391c54c8e1254891d4d477e._comment create mode 100644 doc/forum/symlinks_corrupt__58___link_in_textfile__44___100_bytes_of_size/comment_2_0748b20c8a0d7d4704003c0ecfc27716._comment create mode 100644 doc/forum/sync_--content__44___fatal_is_outside_repository_errors.mdwn create mode 100644 doc/forum/sync_--content__44___fatal_is_outside_repository_errors/comment_10_d4a649874ee9c9e6a4c0252700607713._comment create mode 100644 doc/forum/sync_--content__44___fatal_is_outside_repository_errors/comment_1_668dae37dd46047b46c9e1c23f7bcec4._comment create mode 100644 doc/forum/sync_--content__44___fatal_is_outside_repository_errors/comment_2_09c62e4abf4ccc0d2e030ef5e1bcdf71._comment create mode 100644 doc/forum/sync_--content__44___fatal_is_outside_repository_errors/comment_2_8f694afa77f5a835c826d29d46d44615._comment create mode 100644 doc/forum/sync_--content__44___fatal_is_outside_repository_errors/comment_4_a7f476aeacf88679f25badc78fad886a._comment create mode 100644 doc/forum/sync_--content__44___fatal_is_outside_repository_errors/comment_5_e96503f38cba755b2e6bd89b1ffab6ff._comment create mode 100644 doc/forum/sync_--content__44___fatal_is_outside_repository_errors/comment_6_7443fe5f7384431914c714c2b462cf5c._comment create mode 100644 doc/forum/sync_--content__44___fatal_is_outside_repository_errors/comment_7_63225cc9557886ae12b3450f68812815._comment create mode 100644 doc/forum/sync_--content__44___fatal_is_outside_repository_errors/comment_8_baefe35266021184ee78440226fe2a8d._comment create mode 100644 doc/forum/sync_--content__44___fatal_is_outside_repository_errors/comment_9_a9ed50cd4a1f436822ae97bfcd1ced48._comment create mode 100644 doc/forum/sync_--content_sometimes_iterates_over_all_files.mdwn create mode 100644 doc/forum/sync_--content_sometimes_iterates_over_all_files/comment_1_a276f0f6aa87a491c2fba3d58217b75a._comment create mode 100644 doc/forum/sync_--content_sometimes_iterates_over_all_files/comment_2_1f8ae9a0099d456e25f387798f99eec9._comment create mode 100644 doc/forum/sync_between_indirect_and_direct_mode.mdwn create mode 100644 doc/forum/sync_between_indirect_and_direct_mode/comment_1_7efc0d79196675582571c05fdd133b53._comment create mode 100644 doc/forum/sync_between_indirect_and_direct_mode/comment_2_8ac84dbaf7a4d503497487cbdb1749d8._comment create mode 100644 doc/forum/sync_between_indirect_and_direct_mode/comment_3_9acb237711669ec6046a8d07f9ed3b2c._comment create mode 100644 doc/forum/sync_content_through_repo_that_wants_nothing.mdwn create mode 100644 doc/forum/sync_content_through_repo_that_wants_nothing/comment_1_6c014bc88fc8a685ef79a044c8938c7d._comment create mode 100644 doc/forum/sync_content_through_repo_that_wants_nothing/comment_2_ef89154903395025bb0a0408e1c23bdf._comment create mode 100644 doc/forum/sync_content_through_repo_that_wants_nothing/comment_3_e05a3e3d991617bb2b323b5572cd771e._comment create mode 100644 doc/forum/sync_quits_after_first_non-successfull_remote.mdwn create mode 100644 doc/forum/sync_quits_after_first_non-successfull_remote/comment_1_dbca6ea763702a82ae7563722cdc7fab._comment create mode 100644 doc/forum/sync_remote_repo_on_local_sync_upstream.mdwn create mode 100644 doc/forum/sync_remote_repo_on_local_sync_upstream/comment_1_db650b4b5764e33219cb28eba2987ea5._comment create mode 100644 doc/forum/sync_stages_deletions_on_remote.mdwn create mode 100644 doc/forum/sync_stages_deletions_on_remote/comment_1_2b639066095e450c2d9be3b2775d24b3._comment create mode 100644 doc/forum/sync_stages_deletions_on_remote/comment_2_da5775526a2a476b6ead1cd1a735b8bd._comment create mode 100644 doc/forum/sync_stages_deletions_on_remote/comment_3_9e07593228915936fadcf90373be9f4e._comment create mode 100644 doc/forum/sync_stages_deletions_on_remote/comment_4_e5a3dc34c6229ec40bc999c3cab28041._comment create mode 100644 doc/forum/sync_stages_deletions_on_remote/comment_5_f3350d336c6c66c3aacc7caade2ef12c._comment create mode 100644 doc/forum/syncing_home_directories.mdwn create mode 100644 doc/forum/syncing_home_directories/comment_1_220a6e0ffe0ea610921a63c0a6e3beab._comment create mode 100644 doc/forum/syncing_music_to_my_android_device.mdwn create mode 100644 doc/forum/syncing_music_to_my_android_device/comment_1_81653a23424ac04675651fb7632c57ae._comment create mode 100644 doc/forum/syncing_music_to_my_android_device/comment_2_e49c9e5da5c5d1db228b9b753bed53ff._comment create mode 100644 doc/forum/syncing_non-git_trees_with_git-annex.mdwn create mode 100644 doc/forum/syncing_non-git_trees_with_git-annex/comment_1_7f9593bdfd95e4a8814e6cc5c44619e6._comment create mode 100644 doc/forum/syncing_non-git_trees_with_git-annex/comment_2_49f15478781a0ad5e46e75319070335c._comment create mode 100644 doc/forum/syncing_non-git_trees_with_git-annex/comment_3_6d8f399f0549eddd1d1f5c9c9a10c654._comment create mode 100644 doc/forum/syncing_to_an_encrypted_remove_won__39__t_prompt_with_pinentry-gtk2.mdwn create mode 100644 doc/forum/syncing_to_an_encrypted_remove_won__39__t_prompt_with_pinentry-gtk2/comment_1_daf41d0e59d384dfe5c86a53600ea3f7._comment create mode 100644 doc/forum/taskwarrior.mdwn create mode 100644 doc/forum/taskwarrior/comment_1_1c3a29e7d292cb602d9d349f8009b51e._comment create mode 100644 doc/forum/taskwarrior/comment_2_4b3d70501763f6d36c927ae37bbd33c2._comment create mode 100644 doc/forum/telehash_syncing.mdwn create mode 100644 doc/forum/tell_us_how_you__39__re_using_git-annex.mdwn create mode 100644 doc/forum/tell_us_how_you__39__re_using_git-annex/comment_1_4884803ddee7f642a3ac995a19967a6a._comment create mode 100644 doc/forum/tell_us_how_you__39__re_using_git-annex/comment_2_61f5054918e7b36c191454365bc7f3b7._comment create mode 100644 doc/forum/tell_us_how_you__39__re_using_git-annex/comment_3_db07e8703be606c998c831e91d300d69._comment create mode 100644 doc/forum/tell_us_how_you__39__re_using_git-annex/comment_4_a58595969cdd42ed20210e9615b42e42._comment create mode 100644 doc/forum/tell_us_how_you__39__re_using_git-annex/comment_5_4de0a5431431e80f4a81d87e649d4598._comment create mode 100644 doc/forum/temporary_AWS_credentials.mdwn create mode 100644 doc/forum/temporary_AWS_credentials/comment_1_655825b3aa981e97969e226c98034c4b._comment create mode 100644 doc/forum/temporary_AWS_credentials/comment_2_d4b66fd587c3a0ce74436ec09b398f10._comment create mode 100644 doc/forum/test_whether_a_file_is_already_annexed.mdwn create mode 100644 doc/forum/test_whether_a_file_is_already_annexed/comment_1_55bcb41abae2b70c046e3da1c4d8c761._comment create mode 100644 doc/forum/test_whether_a_file_is_already_annexed/comment_2_e2531c7e77bbc75f24af7ce5f789826e._comment create mode 100644 doc/forum/test_whether_a_file_is_already_annexed/comment_3_21f51c99b1aac8b3292f60bd83493e94._comment create mode 100644 doc/forum/test_whether_a_file_is_already_annexed/comment_4_2c61629777f47ce3e697298d5736f997._comment create mode 100644 doc/forum/the___39__here__39___remote.mdwn create mode 100644 doc/forum/the___39__here__39___remote/comment_1_8100ed97a671afea207efe3f70230707._comment create mode 100644 doc/forum/time_profiling_the_assistant.mdwn create mode 100644 doc/forum/time_profiling_the_assistant/comment_1_0227d9c0db24c6abadfe091f92848ec6._comment create mode 100644 doc/forum/tips__58___special__95__remotes__47__hook_with_tahoe-lafs.mdwn create mode 100644 doc/forum/tips__58___special__95__remotes__47__hook_with_tahoe-lafs/comment_1_76bb33ce45ce6a91b86454147463193b._comment create mode 100644 doc/forum/tips__58___special__95__remotes__47__hook_with_tahoe-lafs/comment_2_4d9b9d47d01d606a475678f630797bf9._comment create mode 100644 doc/forum/tips__58___special__95__remotes__47__hook_with_tahoe-lafs/comment_3_8a812b11fcc2dc3b6fcf01cdbbb8459d._comment create mode 100644 doc/forum/tips__58___special__95__remotes__47__hook_with_tahoe-lafs/comment_4_fc98c819bc5eb4d7c9e74d87fb4f6f3b._comment create mode 100644 doc/forum/tips__58___special__95__remotes__47__hook_with_tahoe-lafs/comment_5_c459fb479fe7b13eaea2377cfc1923a6._comment create mode 100644 doc/forum/tips__58___special__95__remotes__47__hook_with_tahoe-lafs/comment_6_2e9da5a919bbbc27b32de3b243867d4f._comment create mode 100644 doc/forum/tips__58___special__95__remotes__47__hook_with_tahoe-lafs/comment_7_d636c868524b2055ee85832527437f90._comment create mode 100644 doc/forum/tips__58___special__95__remotes__47__hook_with_tahoe-lafs/comment_8_39dc449cc60a787c3bfbfaaac6f9be0c._comment create mode 100644 doc/forum/tips__58___special__95__remotes__47__hook_with_tahoe-lafs/comment_9_2592749c2f02b3e151896e31acba359b._comment create mode 100644 doc/forum/transfer_bare_repo_setup_problem.mdwn create mode 100644 doc/forum/transfer_bare_repo_setup_problem/comment_1_3b6c15b81c5df09587bc75c5e358b39c._comment create mode 100644 doc/forum/transfer_bare_repo_setup_problem/comment_2_c011e8fcda61b6ee0067020abbddf61a._comment create mode 100644 doc/forum/treat_directory_with_multiple_files_as_a_single_item.mdwn create mode 100644 doc/forum/treat_directory_with_multiple_files_as_a_single_item/comment_1_89d2819893ae954041d65a5758993be8._comment create mode 100644 doc/forum/treat_directory_with_multiple_files_as_a_single_item/comment_2_6889f4695bca77c18efe0000fc491b57._comment create mode 100644 doc/forum/treat_directory_with_multiple_files_as_a_single_item/comment_3_61924cf10643a6d2d011899d95b4ae56._comment create mode 100644 doc/forum/trouble_with_multiple_remotes_syncing_to_gcrypt_based_ssh_repo_.mdwn create mode 100644 doc/forum/trouble_with_multiple_remotes_syncing_to_gcrypt_based_ssh_repo_/comment_1_4ad9a6a7cf5678ac0bc6d46a54f64cd3._comment create mode 100644 doc/forum/trouble_with_multiple_remotes_syncing_to_gcrypt_based_ssh_repo_/comment_2_82dc18ed14879936d04133f248879fb9._comment create mode 100644 doc/forum/trusted_repositories__58___fatal__58___not_a_git_repo.mdwn create mode 100644 doc/forum/trusted_repositories__58___fatal__58___not_a_git_repo/comment_1_0a755a4a281c3bd130722093c8ddd080._comment create mode 100644 doc/forum/two-way_assistant_sync_with_ssh_special_remote.mdwn create mode 100644 doc/forum/two-way_assistant_sync_with_ssh_special_remote/comment_1_d42def5dfc1cf814fdb07f7cf808bb12._comment create mode 100644 doc/forum/two_lines_back_to_remote__63__.mdwn create mode 100644 doc/forum/two_lines_back_to_remote__63__/comment_1_064d786c5550e4470440717994e62051._comment create mode 100644 doc/forum/two_lines_back_to_remote__63__/comment_2_b1debe6f63e811c79ad97b9e38dd2935._comment create mode 100644 doc/forum/two_lines_back_to_remote__63__/comment_3_70ee40b99e06c4f64d3e2e4433c8b4ba._comment create mode 100644 doc/forum/ui.mdwn create mode 100644 doc/forum/ui/comment_1_f3e3446b05d6b573e29e6cad300fb635._comment create mode 100644 doc/forum/ui/comment_2_b493ee97eb2378e72c12f3d137109580._comment create mode 100644 doc/forum/unable_to_access_remotes_when_cloning_a_gcrypt_remote.mdwn create mode 100644 doc/forum/unable_to_access_remotes_when_cloning_a_gcrypt_remote/comment_1_cbcc4be05aa6d8f030d5ab0dc46858f4._comment create mode 100644 doc/forum/unable_to_access_remotes_when_cloning_a_gcrypt_remote/comment_2_3623a37d918d08e8681276206137f5af._comment create mode 100644 doc/forum/unable_to_clone_annex_repo_in_windows.mdwn create mode 100644 doc/forum/unable_to_clone_annex_repo_in_windows/comment_1_588af0e0b655966c2d344f3f4b4d2e5f._comment create mode 100644 doc/forum/unable_to_clone_annex_repo_in_windows/comment_2_e4fcc8329b2deb058b7368ce1c226a3e._comment create mode 100644 doc/forum/unable_to_clone_annex_repo_in_windows/comment_3_20aa8de2513fdb6b19a4b24f20983f0a._comment create mode 100644 doc/forum/unannex_--fast_+_uninit_leaves_files_in_.git__47__annex__47__objects__63__.mdwn create mode 100644 doc/forum/unannex_--fast_+_uninit_leaves_files_in_.git__47__annex__47__objects__63__/comment_1_4aaf93801119b36a01e452c7bb0fc7e9._comment create mode 100644 doc/forum/unannex_alternatives.mdwn create mode 100644 doc/forum/unannex_alternatives/comment_1_dcd4cd41280b41512bbdffafaf307993._comment create mode 100644 doc/forum/unannex_alternatives/comment_2_58a72a9fe0f58c7af0b4d7927a2dd21d._comment create mode 100644 doc/forum/unannex_alternatives/comment_3_b1687fc8f9e7744327bbeb6f0635d1cd._comment create mode 100644 doc/forum/unknown_response_from_git_cat-file.mdwn create mode 100644 doc/forum/unknown_response_from_git_cat-file/comment_1_f26ba569e715fe69b6de3093930362ee._comment create mode 100644 doc/forum/unknown_response_from_git_cat-file/comment_2_bba450e83609225c161b4fec1e006f8a._comment create mode 100644 doc/forum/unknown_response_from_git_cat-file/comment_3_8e0458e86764242e9e35940b4db302b7._comment create mode 100644 doc/forum/unknown_response_from_git_cat-file/comment_4_275fcf1e6643cb247f8ed5afc4c69e56._comment create mode 100644 doc/forum/unlock__47__lock_always_gets_me.mdwn create mode 100644 doc/forum/unlock__47__lock_always_gets_me/comment_1_dee73a7ea3e1a5154601adb59782831f._comment create mode 100644 doc/forum/unlock__47__lock_always_gets_me/comment_2_f89b4349dde840c355a3bc28908decdf._comment create mode 100644 doc/forum/unlock__47__lock_always_gets_me/comment_3_acbab7b75726d34dccb5c9dab7b3e728._comment create mode 100644 doc/forum/unrelated_repositories_sync.mdwn create mode 100644 doc/forum/unrelated_repositories_sync/comment_1_c899b7b05a96d14e25c2efadff3b4e52._comment create mode 100644 doc/forum/unsynced_folder.mdwn create mode 100644 doc/forum/unsynced_folder/comment_1_7d7a262f067c7b02d76e82637223934c._comment create mode 100644 doc/forum/untitled.mdwn create mode 100644 doc/forum/untitled/comment_1_0176d1d50bd62b113ff690346ba4161b._comment create mode 100644 doc/forum/update_via_cabal_fails.mdwn create mode 100644 doc/forum/update_via_cabal_fails/comment_1_e1235dc2acd3bac3dd51b7614dabbb88._comment create mode 100644 doc/forum/updating_the___34__number_of_copies__34__.mdwn create mode 100644 doc/forum/updating_the___34__number_of_copies__34__/comment_1_327bdb0d9c190c60c7147b3acf07af09._comment create mode 100644 doc/forum/updating_the___34__number_of_copies__34__/comment_2_7e11c839637e0894332e413cde02cee9._comment create mode 100644 doc/forum/updating_the___34__number_of_copies__34__/comment_3_8b7a70fb3bb41e4eda412302834730bb._comment create mode 100644 doc/forum/usability__58___creating_an_archive_on_a_new_external_drive.mdwn create mode 100644 doc/forum/usability__58___creating_an_archive_on_a_new_external_drive/comment_1_27b5283c65c402f330263426e4ca6ac1._comment create mode 100644 doc/forum/usability__58___creating_an_archive_on_a_new_external_drive/comment_2_b3a6b5ff0aaddd78903fc7bc7fbd6ee2._comment create mode 100644 doc/forum/usability__58___creating_an_archive_on_a_new_external_drive/comment_3_aab934c0e37771d7f834d2567a9e76a1._comment create mode 100644 doc/forum/usability__58___creating_an_archive_on_a_new_external_drive/comment_4_42beace277e009ddff449cb220775d44._comment create mode 100644 doc/forum/usability__58___what_are_those_arrow_things__63__.mdwn create mode 100644 doc/forum/usability__58___what_are_those_arrow_things__63__/comment_1_bf34c169c725f9504e0f2114ba53be4b._comment create mode 100644 doc/forum/usability__58___what_are_those_arrow_things__63__/comment_2_364ce8b369fd0ba7ddaec3127840ff39._comment create mode 100644 doc/forum/use_case__58___unique_indentifier_of_objets___40__doi_like__41__.mdwn create mode 100644 doc/forum/use_case__58___unique_indentifier_of_objets___40__doi_like__41__/comment_1_955f3aac12c1ddb41267c5a23ccb79e3._comment create mode 100644 doc/forum/use_case__58___unique_indentifier_of_objets___40__doi_like__41__/comment_2_0aff36755f49afddd5482a602a1ccd2b._comment create mode 100644 doc/forum/use_case_question__58___developer_repo_with_s3.mdwn create mode 100644 doc/forum/use_case_question__58___developer_repo_with_s3/comment_1_3e48d0a6c74e1bd67b1128d6b52f5fc4._comment create mode 100644 doc/forum/use_case_question__58___developer_repo_with_s3/comment_2_751d3f5855729d493ee2042b19117a70._comment create mode 100644 doc/forum/use_case_question__58___developer_repo_with_s3/comment_3_69ec3fedc166d68c10103b97c231e3d4._comment create mode 100644 doc/forum/use_case_question__58___developer_repo_with_s3/comment_4_4afea3a65b6b5c57a4dac5cdbbf89432._comment create mode 100644 doc/forum/use_case_question__58___developer_repo_with_s3/comment_5_743d7435c4e94efb293f4d6b1e83483d._comment create mode 100644 doc/forum/use_existing_ssh_keys__63__.mdwn create mode 100644 doc/forum/use_existing_ssh_keys__63__/comment_1_c420c53f022bbd1b28494bc44d076feb._comment create mode 100644 doc/forum/use_existing_ssh_keys__63__/comment_2_e4cae848e5701852073ced307832872b._comment create mode 100644 doc/forum/use_existing_ssh_keys__63__/comment_3_a97c20b6df74c49e5f57c7caf962f1e2._comment create mode 100644 doc/forum/use_existing_ssh_keys__63__/comment_4_8977bb8ee662c30dfcecae73cede9dfa._comment create mode 100644 doc/forum/using_--quiet_with_sync.mdwn create mode 100644 doc/forum/using_--quiet_with_sync/comment_1_69c2034761a8b92b001b142e49f0449e._comment create mode 100644 doc/forum/using_git-annex_with_lightroom.mdwn create mode 100644 doc/forum/using_git-annex_with_lightroom/comment_1_ec977efd277f0644767a4fc7064e4baf._comment create mode 100644 doc/forum/using_git-annex_with_lightroom/comment_2_4dc4f1ea91c72418843a682fab1854d2._comment create mode 100644 doc/forum/using_git_annex_to_merge_and_synchronize_2_directories___40__like_unison__41__.mdwn create mode 100644 doc/forum/using_git_annex_to_merge_and_synchronize_2_directories___40__like_unison__41__/comment_1_5c3ee8a8aaa6d0918c0cc9683ce177ae._comment create mode 100644 doc/forum/using_git_annex_to_merge_and_synchronize_2_directories___40__like_unison__41__/comment_2_648946353c6d90c57351cce4010f1301._comment create mode 100644 doc/forum/using_rsync.net_as_backup_and_glacier_as_archive.mdwn create mode 100644 doc/forum/uuid_mismatch.mdwn create mode 100644 doc/forum/uuid_mismatch/comment_1_ed29dcf70b916bdd094015c1c9616550._comment create mode 100644 doc/forum/uuid_mismatch/comment_2_de4beb1eb76ae7084387e8efc28e55d3._comment create mode 100644 doc/forum/uuid_mismatch/comment_3_a681a4847acbe890c4e486288b3c81d3._comment create mode 100644 doc/forum/v5_to_v6_upgrade_strategy.mdwn create mode 100644 doc/forum/v5_to_v6_upgrade_strategy/comment_1_1505166c806ab3d1a3148a245faa713a._comment create mode 100644 doc/forum/v5_to_v6_upgrade_strategy/comment_2_ef2648a58037b867e2d745eb4b3a15a2._comment create mode 100644 doc/forum/v5_to_v6_upgrade_strategy/comment_3_46fb3f5b0a7fa13b6f16ccb9832dac7e._comment create mode 100644 doc/forum/v6_thinning_seems_to_be_not_working_for_me.mdwn create mode 100644 doc/forum/v6_thinning_seems_to_be_not_working_for_me/comment_1_751e603141513faaa43abc38f3329a3e._comment create mode 100644 doc/forum/vanilla_git_repo_as_special_remote__63__.mdwn create mode 100644 doc/forum/vanilla_git_repo_as_special_remote__63__/comment_1_67e186265ae21f2cd8451750152f2a6d._comment create mode 100644 doc/forum/vanilla_git_repo_as_special_remote__63__/comment_2_6314256da98966f4c7d02aa0d6bf94ff._comment create mode 100644 doc/forum/version_3_upgrade.mdwn create mode 100644 doc/forum/version_3_upgrade/comment_1_05fc9c9cad26c520bebb98c852c71e35._comment create mode 100644 doc/forum/version_5_repo_with_version_6_repo.mdwn create mode 100644 doc/forum/version_5_repo_with_version_6_repo/comment_1_95037082d15758d7b2c23ad041d7f6f0._comment create mode 100644 doc/forum/very_slow_on_exfat_drives.mdwn create mode 100644 doc/forum/very_slow_on_exfat_drives/comment_10_5f67c870fc7e43ae75d8e1f8ced975c2._comment create mode 100644 doc/forum/very_slow_on_exfat_drives/comment_11_65460ed123404478ae59fed1b5cff627._comment create mode 100644 doc/forum/very_slow_on_exfat_drives/comment_12_77cd7b20abd0cd1eadee0ebeb186b3cf._comment create mode 100644 doc/forum/very_slow_on_exfat_drives/comment_13_1d6588477082dd6de6eaad02fdc53463._comment create mode 100644 doc/forum/very_slow_on_exfat_drives/comment_14_6487a9a170f7caa7c9db06ac3bee8c0e._comment create mode 100644 doc/forum/very_slow_on_exfat_drives/comment_15_1d7c3ff1eaeffe03fe7e3e25af822e4e._comment create mode 100644 doc/forum/very_slow_on_exfat_drives/comment_1_0f16c72ed7bcba01398b36cb8b3cee08._comment create mode 100644 doc/forum/very_slow_on_exfat_drives/comment_2_769b971263b9124ec08079336d03869d._comment create mode 100644 doc/forum/very_slow_on_exfat_drives/comment_3_b6ee8c6384c73b44ae9ccc0ba32c3135._comment create mode 100644 doc/forum/very_slow_on_exfat_drives/comment_4_b1dbbf57a46c79e8e32885c2ee8f45d2._comment create mode 100644 doc/forum/very_slow_on_exfat_drives/comment_5_ec5d339021f2a26942248962ea818a80._comment create mode 100644 doc/forum/very_slow_on_exfat_drives/comment_6_a6c5e8dc86ed6b4b5ff45f66f5bad50a._comment create mode 100644 doc/forum/very_slow_on_exfat_drives/comment_7_3e66ef8493d2839cb26418788c510463._comment create mode 100644 doc/forum/very_slow_on_exfat_drives/comment_8_ae7380ff84e4200985c22deb647853e3._comment create mode 100644 doc/forum/very_slow_on_exfat_drives/comment_9_5b69d3cb7d3a51ce8a9cbdb608be676c._comment create mode 100644 doc/forum/view_from_numeric_values.mdwn create mode 100644 doc/forum/view_from_numeric_values/comment_1_f3c440f3f0104002a0020ba96ddcf87b._comment create mode 100644 doc/forum/view_from_numeric_values/comment_2_2414e1a8cfd154c339d8fc0e4a630ae9._comment create mode 100644 doc/forum/view_from_numeric_values/comment_3_7879a11cc9767cdaac14f9993182dc25._comment create mode 100644 doc/forum/view_from_numeric_values/comment_4_517c7659654a6fc608eb3332053df8a4._comment create mode 100644 doc/forum/view_including_files_with_no_tags.mdwn create mode 100644 doc/forum/view_including_files_with_no_tags/comment_1_b0aafc023fbec33af268576c4c199af3._comment create mode 100644 doc/forum/view_including_files_with_no_tags/comment_2_5ae9d5308371bdb1f94342c9f9b01aff._comment create mode 100644 doc/forum/views___40__branches__41___never_get_deleted.mdwn create mode 100644 doc/forum/views___40__branches__41___never_get_deleted/comment_1_ff53fa0b5f0c4a6554a37e3309e26925._comment create mode 100644 doc/forum/views___40__branches__41___never_get_deleted/comment_3_1d4a3f4e83b288262e291262a6636602._comment create mode 100644 doc/forum/views___40__branches__41___never_get_deleted/comment_3_4e96e5325fd12e48f190fe551a6ac07e._comment create mode 100644 doc/forum/views___40__branches__41___never_get_deleted/comment_4_a4764b5bfb08ebe90430ea14fcb6e8e0._comment create mode 100644 doc/forum/views___40__branches__41___never_get_deleted/comment_5_02e08dffb01246010b390aeef8f32234._comment create mode 100644 doc/forum/vlc_and_git-annex.mdwn create mode 100644 doc/forum/vlc_and_git-annex/comment_1_9c9ab8ce463cf74418aa2f385955f165._comment create mode 100644 doc/forum/vlc_and_git-annex/comment_2_037f94c1deeac873dbdb36cd4c927e45._comment create mode 100644 doc/forum/walkthrough_report_setting_up_tor_p2p_remote.mdwn create mode 100644 doc/forum/warning__58___remote_HEAD_refers_to_nonexistent_ref__44___unable_to_checkout.mdwn create mode 100644 doc/forum/warning__58___remote_HEAD_refers_to_nonexistent_ref__44___unable_to_checkout/comment_1_c0d9758be80d1a349ffe82c80075bebd._comment create mode 100644 doc/forum/warning__58___remote_HEAD_refers_to_nonexistent_ref__44___unable_to_checkout/comment_2_c28dae2eb0ab825ee6d43735e04a18a3._comment create mode 100644 doc/forum/web-browser_for_the_repository.mdwn create mode 100644 doc/forum/web-browser_for_the_repository/comment_1_1f8e7e54e9f377417cd672d66ae9bd9d._comment create mode 100644 doc/forum/web-browser_for_the_repository/comment_2_551d5bb2d24212de65720d796365177f._comment create mode 100644 doc/forum/web-browser_for_the_repository/comment_3_d410df4b7160f17e3846674c3e0e9368._comment create mode 100644 doc/forum/web-browser_for_the_repository/comment_4_d06217403bf53a713b845bbc9ca8b962._comment create mode 100644 doc/forum/webapp__58___disabling_a_paired_repository.mdwn create mode 100644 doc/forum/webapp__58___disabling_a_paired_repository/comment_1_9dd316fedf55afecbc77f3b99e66d837._comment create mode 100644 doc/forum/webapp__58___disabling_a_paired_repository/comment_2_28cf58629b9774426c084d80964151d7._comment create mode 100644 doc/forum/webapp__58___disabling_a_paired_repository/comment_3_799d66b116e8ddf42e624bb4a082337c._comment create mode 100644 doc/forum/webapp___47___assistant_without_watch.mdwn create mode 100644 doc/forum/webapp___47___assistant_without_watch/comment_1_1bcd99aa81f937ded683e19a69d33dd9._comment create mode 100644 doc/forum/webapp___47___assistant_without_watch/comment_2_9f5b3f5bf7fedcd5baec519d97d3aa8c._comment create mode 100644 doc/forum/webapp_and_manual_mode.mdwn create mode 100644 doc/forum/webapp_and_manual_mode/comment_1_5b5df5ffeb6ee15779972f13fdc11729._comment create mode 100644 doc/forum/webapp_and_manual_mode/comment_2_a1f06b50d1317c78a301b47eb05d2617._comment create mode 100644 doc/forum/webapp_and_manual_mode/comment_3_f0739bf4304a91a5d4ec33ac2421c966._comment create mode 100644 doc/forum/webapp_does_not_start.mdwn create mode 100644 doc/forum/webapp_does_not_start/comment_1_dd27d30ce305562a1552f46c87b1cd27._comment create mode 100644 doc/forum/webapp_does_not_start/comment_2_ef37f40288a1181ca619ae13b0f7a994._comment create mode 100644 doc/forum/webapp_does_not_start/comment_3_6e625dba9f7fa36bf9c7e9d77fbadeff._comment create mode 100644 doc/forum/webapp_listen_port_with_autostart.mdwn create mode 100644 doc/forum/webapp_listen_port_with_autostart/comment_1_65dbcf3d8f6c16568f5a326242eab9c5._comment create mode 100644 doc/forum/webapp_listen_port_with_autostart/comment_2_39664f833dedc1a4fe083eec9bc4a7cd._comment create mode 100644 doc/forum/weird_view_file_naming.mdwn create mode 100644 doc/forum/weird_view_file_naming/comment_1_24a44f94194231bb8efe9b20ee311d4c._comment create mode 100644 doc/forum/weird_view_file_naming/comment_2_2ff3002e45a7443f0502243b3690df9d._comment create mode 100644 doc/forum/what_are___95__exactly__95___limitations_of_git-annex_when_using_it_like_dropbox.mdwn create mode 100644 doc/forum/what_are___95__exactly__95___limitations_of_git-annex_when_using_it_like_dropbox/comment_1_b76e6d3c4d530fd6735460aa5ab03ad5._comment create mode 100644 doc/forum/what_happens_to_deleted_files__63__.mdwn create mode 100644 doc/forum/what_happens_to_deleted_files__63__/comment_1_a476174646ad3adfbbe0cafdd7d42d08._comment create mode 100644 doc/forum/what_rules_is_git_annex_sync_--content_using_to_send_files_out.mdwn create mode 100644 doc/forum/what_rules_is_git_annex_sync_--content_using_to_send_files_out/comment_1_86428fc8286266d01cc51af8ae4aa335._comment create mode 100644 doc/forum/what_rules_is_git_annex_sync_--content_using_to_send_files_out/comment_2_50c1a19a7278e8748c2e6e789f6b418a._comment create mode 100644 doc/forum/what_rules_is_git_annex_sync_--content_using_to_send_files_out/comment_3_368403625451415c66b9e62005d9ddea._comment create mode 100644 doc/forum/what_rules_is_git_annex_sync_--content_using_to_send_files_out/comment_4_53ccb5c7c8f15f44fb2f113742fe77f3._comment create mode 100644 doc/forum/when_repo_offline_list_whereis_slow.mdwn create mode 100644 doc/forum/when_repo_offline_list_whereis_slow/comment_1_79052583012da5097ca7bdc52dcdfb7d._comment create mode 100644 doc/forum/when_repo_offline_list_whereis_slow/comment_2_caa2b4ca2826444bdfb47616a549f4e6._comment create mode 100644 doc/forum/where_to_submit_pull_requests_for_git-annex__63__.mdwn create mode 100644 doc/forum/where_to_submit_pull_requests_for_git-annex__63__/comment_1_f5e6022798ba63b55bff197b5937f9fe._comment create mode 100644 doc/forum/whereis__58___Why_not_here__63__.mdwn create mode 100644 doc/forum/whereis__58___Why_not_here__63__/comment_1_02a423918efcc760bb89dfb78586dc2a._comment create mode 100644 doc/forum/whereis__58___Why_not_here__63__/comment_2_e55ce8cbb6bbabc654ba743d755a6eee._comment create mode 100644 doc/forum/whereis__58___Why_not_here__63__/comment_3_7de87ad1fd8a0f53562d3083af1410d6._comment create mode 100644 doc/forum/whereis_command_with_file_names_instead_of_hashes.mdwn create mode 100644 doc/forum/whereis_command_with_file_names_instead_of_hashes/comment_1_4eaca07152916adc18032fb404e4dd92._comment create mode 100644 doc/forum/whereis_command_with_file_names_instead_of_hashes/comment_2_94b43ac23ff8332b35723422eede8997._comment create mode 100644 doc/forum/whereis_command_with_file_names_instead_of_hashes/comment_3_45ffa6dd17667ecd6685f85f34046eff._comment create mode 100644 doc/forum/whereis_command_with_file_names_instead_of_hashes/comment_4_d459fbcf0db59b821ae67f4949e48103._comment create mode 100644 doc/forum/whereis_command_with_file_names_instead_of_hashes/comment_5_e52a8c9cb418fbc2e2cba71f37bd44ad._comment create mode 100644 doc/forum/which_version_should_I_install__63__.mdwn create mode 100644 doc/forum/which_version_should_I_install__63__/comment_1_147f12392f6f546ab50dc346052ad4b7._comment create mode 100644 doc/forum/which_version_should_I_install__63__/comment_3_c85c107a60b4b642ed9a8de7d233f95e._comment create mode 100644 doc/forum/which_version_should_I_install__63__/comment_4_f627212a612f5d746bb8bcc5e1ea48df._comment create mode 100644 doc/forum/which_version_should_I_install__63__/comment_5_1c8201cf1de60fde73a2370a6e6c3ad3._comment create mode 100644 doc/forum/which_version_should_I_install__63__/comment_6_c0f850927683d45dbe4d6d1d61788b4a._comment create mode 100644 doc/forum/which_version_should_I_install__63__/comment_7_b563b2be227a1a128d8ac0679108f5b5._comment create mode 100644 doc/forum/which_version_should_I_install__63__/comment_8_e24a8a8edd7d0b314f26406d17775fdc._comment create mode 100644 doc/forum/which_version_should_I_install__63__/comment_8_ef725153df7a9b65f7ade4d7e6cecffb._comment create mode 100644 doc/forum/why_doesn__39__t___96__git_annex_fix__96___fix_a_link__63__.mdwn create mode 100644 doc/forum/why_doesn__39__t___96__git_annex_fix__96___fix_a_link__63__/comment_1_865245182d765fed7bbeb42a35dd605e._comment create mode 100644 doc/forum/why_doesn__39__t___96__git_annex_fix__96___fix_a_link__63__/comment_2_c1f5a285b7cfb92d218b9b0d31caeed6._comment create mode 100644 doc/forum/why_doesn__39__t___96__git_annex_fix__96___fix_a_link__63__/comment_3_be2816c47091842b829cd626e18c5fda._comment create mode 100644 doc/forum/windows_port__63__.mdwn create mode 100644 doc/forum/windows_port__63__/comment_1_23fa9aa3b00940a1c1b3876c35eef019._comment create mode 100644 doc/forum/wishlist__58___get__47__drop_via_webapp_file_explorer.mdwn create mode 100644 doc/forum/wishlist__58___get__47__drop_via_webapp_file_explorer/comment_1_c818a6d44dc13a56460b1865f70eb97c._comment create mode 100644 doc/forum/wishlist__58___make_copy_stop_on_exhausted_disk_space.mdwn create mode 100644 doc/forum/wishlist__58___make_copy_stop_on_exhausted_disk_space/comment_1_467e5e3db3e836030bc4b4f15846951f._comment create mode 100644 doc/forum/wishlist__58___make_copy_stop_on_exhausted_disk_space/comment_2_e3ca3db9bea11d3e085ee9c3c56b33fe._comment create mode 100644 doc/forum/wishlist__58___make_copy_stop_on_exhausted_disk_space/comment_3_0ef8c37350fc192d9b784fbab1d9f318._comment create mode 100644 doc/forum/working_without_git-annex_commits.mdwn create mode 100644 doc/forum/workspace.xml_file_disappeared__44___broken_symlink_showed_up.mdwn create mode 100644 doc/forum/workspace.xml_file_disappeared__44___broken_symlink_showed_up/comment_1_00b084f9786de6516f46065c0cb00e79._comment create mode 100644 doc/forum/workspace.xml_file_disappeared__44___broken_symlink_showed_up/comment_2_138499b36d28c5e267b4aad8792dc87e._comment create mode 100644 doc/forum/workspace.xml_file_disappeared__44___broken_symlink_showed_up/comment_3_6c59c494b563e56d061417eb2216bb19._comment create mode 100644 doc/forum/workspace.xml_file_disappeared__44___broken_symlink_showed_up/comment_4_ccbba61cdd6fce3e5de82417bcc0cbfb._comment create mode 100644 doc/forum/workspace.xml_file_disappeared__44___broken_symlink_showed_up/comment_5_50526283b35997cece2f087507cdd4ee._comment create mode 100644 doc/forum/would_you_call_me_crazy_if_I_use_git_annex_in_direct_mode_to_track_my___47__home__63____63__.mdwn create mode 100644 doc/forum/would_you_call_me_crazy_if_I_use_git_annex_in_direct_mode_to_track_my___47__home__63____63__/comment_1_b011442de2f67f3ad340031a0767e990._comment create mode 100644 doc/forum/would_you_call_me_crazy_if_I_use_git_annex_in_direct_mode_to_track_my___47__home__63____63__/comment_2_c69865c08c3eb49d64310fc76e80c65d._comment create mode 100644 doc/forum/would_you_call_me_crazy_if_I_use_git_annex_in_direct_mode_to_track_my___47__home__63____63__/comment_3_7651fb48fc71b2c7b4e7b6830a0f9865._comment create mode 100644 doc/forum/would_you_call_me_crazy_if_I_use_git_annex_in_direct_mode_to_track_my___47__home__63____63__/comment_4_7d88f1aa163185c801b7697846086c7f._comment create mode 100644 doc/future_proofing.mdwn create mode 100644 doc/future_proofing/comment_1_2614eb2e9b7b23fa9bb4251c0d025909._comment create mode 100644 doc/git-annex-add.mdwn create mode 100644 doc/git-annex-add/comment_1_0e6b855afb4fba540ea5560df26839c5._comment create mode 100644 doc/git-annex-add/comment_2_43cf725964c63a2d2545d9f204316a57._comment create mode 100644 doc/git-annex-add/comment_3_8517f9634d217f731efd704405d3f2ca._comment create mode 100644 doc/git-annex-add/comment_4_3bbbe94633b6cb4ef93b7942eb36cc6c._comment create mode 100644 doc/git-annex-add/comment_5_f67bd5fdbe9deeeea1d48175a6b5c536._comment create mode 100644 doc/git-annex-add/comment_6_be9e67994aacebedb478f68a8ae542a5._comment create mode 100644 doc/git-annex-add/comment_7_bb9d72f90f4d3c93d71de1a1bbc244b6._comment create mode 100644 doc/git-annex-addunused.mdwn create mode 100644 doc/git-annex-addurl.mdwn create mode 100644 doc/git-annex-addurl/comment_10_66051cf22495e661828f2ef3291f8578._comment create mode 100644 doc/git-annex-addurl/comment_11_a09a85bbabc112369ab661b7ac5f277d._comment create mode 100644 doc/git-annex-addurl/comment_12_f75e35ae6f739e98aeb15c3f8708be8a._comment create mode 100644 doc/git-annex-addurl/comment_13_f413cc1febfa70e3ad885c6fa031a209._comment create mode 100644 doc/git-annex-addurl/comment_14_5719924fbda2daabe83ef2fde447d620._comment create mode 100644 doc/git-annex-addurl/comment_15_460d474cb8ef32d41eae71ee070de0b3._comment create mode 100644 doc/git-annex-addurl/comment_16_c6e1743647bb4d45b5a1b237f53d77a6._comment create mode 100644 doc/git-annex-addurl/comment_1_ce9c660be160a22c28aeb6de8b3b5818._comment create mode 100644 doc/git-annex-addurl/comment_2_9bc984fb80d77309b62a4e915e65a31a._comment create mode 100644 doc/git-annex-addurl/comment_3_46e1b62d37619521a60eb2339b8d094f._comment create mode 100644 doc/git-annex-addurl/comment_4_0951800d761d18614eb6c5f08cdbb885._comment create mode 100644 doc/git-annex-addurl/comment_5_47dfa82fc6426fb9ad050dd00290dc03._comment create mode 100644 doc/git-annex-addurl/comment_7_8d8ac07a0f0fe599ea5ed1e4089b13fa._comment create mode 100644 doc/git-annex-addurl/comment_8_88aea3014245634d42f23a22ccf2fcc9._comment create mode 100644 doc/git-annex-addurl/comment_8_b261e7bfeeffb2c5264aaadae1d78817._comment create mode 100644 doc/git-annex-addurl/comment_9_48741c1c625dc1ecba2db4f7be2f644c._comment create mode 100644 doc/git-annex-adjust.mdwn create mode 100644 doc/git-annex-adjust/comment_1_364d1d5546c0f448a4b27cfe69a59a07._comment create mode 100644 doc/git-annex-adjust/comment_2_383af8e1e26e4119671437aace0a58f5._comment create mode 100644 doc/git-annex-adjust/comment_3_c5af3a73af8925839413467a7d1e0e14._comment create mode 100644 doc/git-annex-adjust/comment_4_597c5e0254012e3a4ecafa49cfa23cb6._comment create mode 100644 doc/git-annex-adjust/comment_6_f00c27078cce5ad75fcf0cec1033751b._comment create mode 100644 doc/git-annex-adjust/comment_7_a9c88b1d83d5e874f8f8063fcdd9e624._comment create mode 100644 doc/git-annex-assist.mdwn create mode 100644 doc/git-annex-assistant.mdwn create mode 100644 doc/git-annex-backends.mdwn create mode 100644 doc/git-annex-benchmark.mdwn create mode 100644 doc/git-annex-benchmark/comment_1_fe0e8d2e2e875521e715ee2e68818570._comment create mode 100644 doc/git-annex-benchmark/comment_2_3d8dcde00f8df7961490ef81f5400824._comment create mode 100644 doc/git-annex-calckey.mdwn create mode 100644 doc/git-annex-checkpresentkey.mdwn create mode 100644 doc/git-annex-checkpresentkey/comment_1_756f276929a0b0ff73baea141d3ef07d._comment create mode 100644 doc/git-annex-checkpresentkey/comment_2_e277962791b64e67b08ccff47dd22447._comment create mode 100644 doc/git-annex-common-options.mdwn create mode 100644 doc/git-annex-config.mdwn create mode 100644 doc/git-annex-config/comment_1_26bd743439e87e71b1eea2c620e6fc12._comment create mode 100644 doc/git-annex-config/comment_2_0cf3e61f86b217b89dcace22bdfaaa44._comment create mode 100644 doc/git-annex-config/comment_3_cd443c49f9d1122f078872259e342683._comment create mode 100644 doc/git-annex-config/comment_4_e1c484811ea276532ed1b5c965d4de1b._comment create mode 100644 doc/git-annex-configremote.mdwn create mode 100644 doc/git-annex-contentlocation.mdwn create mode 100644 doc/git-annex-copy.mdwn create mode 100644 doc/git-annex-copy/comment_1_9be279110a112335bc72ee8c8a347da2._comment create mode 100644 doc/git-annex-copy/comment_2_599958b0a57d2f8f4383733d28ad9c8d._comment create mode 100644 doc/git-annex-copy/comment_3_a9408822e314c32bebf8230f9d40216b._comment create mode 100644 doc/git-annex-copy/comment_4_44dcb42a011cc203655bccca06de2e10._comment create mode 100644 doc/git-annex-copy/comment_5_fe7c2c6617b3a5ca153af2225fc66498._comment create mode 100644 doc/git-annex-dead.mdwn create mode 100644 doc/git-annex-describe.mdwn create mode 100644 doc/git-annex-diffdriver.mdwn create mode 100644 doc/git-annex-diffdriver/comment_1_b45fd606668e2eee0a37bf1db3391f37._comment create mode 100644 doc/git-annex-diffdriver/comment_2_05c3a29d7827dd6fc5babe0ac1ff2a94._comment create mode 100644 doc/git-annex-direct.mdwn create mode 100644 doc/git-annex-direct/comment_1_5d6f9e9393e534e027ddcd555861196b._comment create mode 100644 doc/git-annex-direct/comment_2_ef8ac748470549776c1ee299b062add2._comment create mode 100644 doc/git-annex-drop.mdwn create mode 100644 doc/git-annex-drop/comment_10_9ed8d998831414436e5d0e100ed96fb7._comment create mode 100644 doc/git-annex-drop/comment_11_95c5be6e2be84dc0903e3d7384f67313._comment create mode 100644 doc/git-annex-drop/comment_1_ecb863aea64eadbaeb7759c5cb0bf5a5._comment create mode 100644 doc/git-annex-drop/comment_2_c9017041b01d803b346b1b14b8d1e066._comment create mode 100644 doc/git-annex-drop/comment_3_16095aad685d142672911e799450634a._comment create mode 100644 doc/git-annex-drop/comment_4_156873ca9820b316a2099b6646562891._comment create mode 100644 doc/git-annex-drop/comment_5_655f0bcaafdf03eb637af715e7642e27._comment create mode 100644 doc/git-annex-drop/comment_6_ed46bc0407457fc5db0d5241ba69d9ed._comment create mode 100644 doc/git-annex-drop/comment_7_f9b255923bdb20c92b878d86998b7ae2._comment create mode 100644 doc/git-annex-drop/comment_8_cf6fbdc5355aebe33188825d578690c1._comment create mode 100644 doc/git-annex-drop/comment_9_55d96bb12b325954bb7e7817f1a8ff3f._comment create mode 100644 doc/git-annex-dropkey.mdwn create mode 100644 doc/git-annex-dropunused.mdwn create mode 100644 doc/git-annex-edit.mdwn create mode 100644 doc/git-annex-enable-tor.mdwn create mode 100644 doc/git-annex-enableremote.mdwn create mode 100644 doc/git-annex-enableremote/comment_2_43876327581d6bcfb69c318c02d6389a._comment create mode 100644 doc/git-annex-enableremote/comment_2_78223f5c6ad120d5e0b98583543425db._comment create mode 100644 doc/git-annex-enableremote/comment_3_4bc11d1df0ff6962b12f5b8a1bb6188e._comment create mode 100644 doc/git-annex-examinekey.mdwn create mode 100644 doc/git-annex-expire.mdwn create mode 100644 doc/git-annex-export.mdwn create mode 100644 doc/git-annex-filter-branch.mdwn create mode 100644 doc/git-annex-filter-process.mdwn create mode 100644 doc/git-annex-find.mdwn create mode 100644 doc/git-annex-find/comment_6_8d931c135df8f9eba201a3dbb94af87e._comment create mode 100644 doc/git-annex-find/comment_7_b9d4cc7438ce5dbe22b62e9decc6cbee._comment create mode 100644 doc/git-annex-find/comment_8_d5846a41e2e227569d7d90dbb8edf7d8._comment create mode 100644 doc/git-annex-findkeys.mdwn create mode 100644 doc/git-annex-findref.mdwn create mode 100644 doc/git-annex-fix.mdwn create mode 100644 doc/git-annex-forget.mdwn create mode 100644 doc/git-annex-fromkey.mdwn create mode 100644 doc/git-annex-fsck.mdwn create mode 100644 doc/git-annex-fuzztest.mdwn create mode 100644 doc/git-annex-get.mdwn create mode 100644 doc/git-annex-get/comment_1_9914f6f6c99757927eed9b5d0217908e._comment create mode 100644 doc/git-annex-get/comment_2_ce5c85afa01019afe58c79df151c65ff._comment create mode 100644 doc/git-annex-group.mdwn create mode 100644 doc/git-annex-groupwanted.mdwn create mode 100644 doc/git-annex-import.mdwn create mode 100644 doc/git-annex-import/comment_1_8961635a772b4ddb5ba1e04a50034e6a._comment create mode 100644 doc/git-annex-import/comment_2_e62b59d5c9cee04a77c51799624a3357._comment create mode 100644 doc/git-annex-import/comment_3_3891ccc35010e1e5c328a9aa6b9e596b._comment create mode 100644 doc/git-annex-importfeed.mdwn create mode 100644 doc/git-annex-importfeed/comment_1_d0197108d07873040e46577df1faadbd._comment create mode 100644 doc/git-annex-importfeed/comment_2_25d4ed016e98609066597a8d2b956f87._comment create mode 100644 doc/git-annex-importfeed/comment_3_bce2b233e4d42fc87a2e17d51e2c2606._comment create mode 100644 doc/git-annex-indirect.mdwn create mode 100644 doc/git-annex-info.mdwn create mode 100644 doc/git-annex-init.mdwn create mode 100644 doc/git-annex-initremote.mdwn create mode 100644 doc/git-annex-inprogress.mdwn create mode 100644 doc/git-annex-list.mdwn create mode 100644 doc/git-annex-lock.mdwn create mode 100644 doc/git-annex-log.mdwn create mode 100644 doc/git-annex-lookupkey.mdwn create mode 100644 doc/git-annex-lookupkey/comment_1_100fcc1559449ae99a2dc6eade61662c._comment create mode 100644 doc/git-annex-lookupkey/comment_2_897eaca8174d5f568a19805f90d9e1c3._comment create mode 100644 doc/git-annex-map.mdwn create mode 100644 doc/git-annex-matchexpression.mdwn create mode 100644 doc/git-annex-matching-expression.mdwn create mode 100644 doc/git-annex-matching-options.mdwn create mode 100644 doc/git-annex-matching-options/comment_1_09d1a7961a79dff47bef8797b3775766._comment create mode 100644 doc/git-annex-matching-options/comment_2_78a5e7090e5ac3e6710813bac600fde0._comment create mode 100644 doc/git-annex-merge.mdwn create mode 100644 doc/git-annex-metadata.mdwn create mode 100644 doc/git-annex-metadata/comment_10_278fca1c579d0acdcce819449aec8eee._comment create mode 100644 doc/git-annex-metadata/comment_11_deee9a4c3a812c9c8097d89f2f6c7d76._comment create mode 100644 doc/git-annex-metadata/comment_1_45492400069021adbe048978be6957ef._comment create mode 100644 doc/git-annex-metadata/comment_2_12e615b99bf9999df0678cb6dc09d398._comment create mode 100644 doc/git-annex-metadata/comment_3_6537bd785997501a9708682acd91f9f6._comment create mode 100644 doc/git-annex-metadata/comment_4_49c885bd5840aba9f9e011a1618931a1._comment create mode 100644 doc/git-annex-metadata/comment_5_b4f928a4e8a81165e3845219483a9b25._comment create mode 100644 doc/git-annex-metadata/comment_6_11b1fa357953736925cfbbc1079590dd._comment create mode 100644 doc/git-annex-metadata/comment_7_fe7d15a1a4cd729b6ffec26f49d8b47a._comment create mode 100644 doc/git-annex-metadata/comment_8_54cff011e3e13882cfbd7a30fb43d078._comment create mode 100644 doc/git-annex-metadata/comment_9_a14b21109aa12eaf13e8c215e108cc29._comment create mode 100644 doc/git-annex-migrate.mdwn create mode 100644 doc/git-annex-mincopies.mdwn create mode 100644 doc/git-annex-mirror.mdwn create mode 100644 doc/git-annex-move.mdwn create mode 100644 doc/git-annex-move/comment_1_b69fbe2f3892deddb269dd3eb1fdcd84._comment create mode 100644 doc/git-annex-move/comment_2_f2908113a633034aa73b8564d22abba6._comment create mode 100644 doc/git-annex-move/comment_3_82cfbc0f3600c7c4c9dffc1d35e81123._comment create mode 100644 doc/git-annex-move/comment_4_013e20add9a007d3f9a9c2a2ceb6cb06._comment create mode 100644 doc/git-annex-move/comment_5_e7608b7fac4ec80781cb4281dc2bf596._comment create mode 100644 doc/git-annex-move/comment_6_eb62a9020575d89799815f6e4b98b28c._comment create mode 100644 doc/git-annex-move/comment_7_e23e2a133db02112ca99aeda0499e841._comment create mode 100644 doc/git-annex-multicast.mdwn create mode 100644 doc/git-annex-numcopies.mdwn create mode 100644 doc/git-annex-oldkeys.mdwn create mode 100644 doc/git-annex-p2p.mdwn create mode 100644 doc/git-annex-p2p/comment_1_d5a6a2eab5d32a9c2f4ed194e01d95e8._comment create mode 100644 doc/git-annex-post-receive.mdwn create mode 100644 doc/git-annex-pre-commit.mdwn create mode 100644 doc/git-annex-preferred-content.mdwn create mode 100644 doc/git-annex-preferred-content/comment_1_4c24f4513af72214bd5feb69f1ab86bc._comment create mode 100644 doc/git-annex-preferred-content/comment_2_e4e0f34466db1fecd21db0e929530ad0._comment create mode 100644 doc/git-annex-preferred-content/comment_3_73c14351e041ac5ba86f6ab21487fd12._comment create mode 100644 doc/git-annex-preferred-content/comment_4_4f30e99af93a2eb571f5b084cfa72d0d._comment create mode 100644 doc/git-annex-preferred-content/comment_5_b05949f87e0073e93a7e09658bd21f05._comment create mode 100644 doc/git-annex-preferred-content/comment_6_f10a0c185fa2f2b4b8ec9fceaed6e8e1._comment create mode 100644 doc/git-annex-proxy.mdwn create mode 100644 doc/git-annex-pull.mdwn create mode 100644 doc/git-annex-push.mdwn create mode 100644 doc/git-annex-readpresentkey.mdwn create mode 100644 doc/git-annex-registerurl.mdwn create mode 100644 doc/git-annex-reinit.mdwn create mode 100644 doc/git-annex-reinject.mdwn create mode 100644 doc/git-annex-reinject/comment_1_070a87e0cb1bbc49088989293334e1fb._comment create mode 100644 doc/git-annex-reinject/comment_2_d1a04e31fea877ae5fe873fbd01fdcaa._comment create mode 100644 doc/git-annex-reinject/comment_3_2dcdd82efbd6dcac0f3b729d55a09386._comment create mode 100644 doc/git-annex-rekey.mdwn create mode 100644 doc/git-annex-remotedaemon.mdwn create mode 100644 doc/git-annex-renameremote.mdwn create mode 100644 doc/git-annex-repair.mdwn create mode 100644 doc/git-annex-repair/comment_1_088ce57c74a653478e03968e1d6bba23._comment create mode 100644 doc/git-annex-required.mdwn create mode 100644 doc/git-annex-reregisterurl.mdwn create mode 100644 doc/git-annex-resolvemerge.mdwn create mode 100644 doc/git-annex-restage.mdwn create mode 100644 doc/git-annex-rmurl.mdwn create mode 100644 doc/git-annex-rmurl/comment_1_fc99b7e905c81183f78320af266ae1a5._comment create mode 100644 doc/git-annex-rmurl/comment_2_181581caac6ee439ba1003ebca79ed09._comment create mode 100644 doc/git-annex-satisfy.mdwn create mode 100644 doc/git-annex-schedule.mdwn create mode 100644 doc/git-annex-semitrust.mdwn create mode 100644 doc/git-annex-setkey.mdwn create mode 100644 doc/git-annex-setpresentkey.mdwn create mode 100644 doc/git-annex-setpresentkey/comment_1_58c98aafb5f6c20c6b71126cd17d3a40._comment create mode 100644 doc/git-annex-setpresentkey/comment_2_57b0ae8a49df6c8809aa3050610191b2._comment create mode 100644 doc/git-annex-setpresentkey/comment_3_30a5d3fbd8e02726989ab80ed98b4a54._comment create mode 100644 doc/git-annex-setpresentkey/comment_4_df3018b9b3491963311063e8ff202df4._comment create mode 100644 doc/git-annex-shell.mdwn create mode 100644 doc/git-annex-smudge.mdwn create mode 100644 doc/git-annex-status.mdwn create mode 100644 doc/git-annex-sync.mdwn create mode 100644 doc/git-annex-sync/comment_1_2e12ed1c1a594dfbd06a3f25f5e25e57._comment create mode 100644 doc/git-annex-sync/comment_2_cc11f83a06352e5049dcbc588d216f27._comment create mode 100644 doc/git-annex-sync/comment_3_cf05eba2bcc10f48092334f9ce889863._comment create mode 100644 doc/git-annex-sync/comment_4_bd5e45a7e668063df9159033a0857075._comment create mode 100644 doc/git-annex-sync/comment_5_5bf6c2b9750dbe5cff87d630f59f511a._comment create mode 100644 doc/git-annex-sync/comment_6_2c989d6d9f2ad2821db970cb3aed83c7._comment create mode 100644 doc/git-annex-sync/comment_7_8f9a5457020bed293e9a93ccc9461a65._comment create mode 100644 doc/git-annex-test.mdwn create mode 100644 doc/git-annex-test/comment_1_5fbd7f75fef7a9f504baab1fae05d72c._comment create mode 100644 doc/git-annex-test/comment_2_752ca0ba483203cc4f5ccf36752e656d._comment create mode 100644 doc/git-annex-test/comment_3_cac436ddf4dec95006d1ebb4171a3289._comment create mode 100644 doc/git-annex-testremote.mdwn create mode 100644 doc/git-annex-transferkey.mdwn create mode 100644 doc/git-annex-transferkeys.mdwn create mode 100644 doc/git-annex-transferrer.mdwn create mode 100644 doc/git-annex-trust.mdwn create mode 100644 doc/git-annex-unannex.mdwn create mode 100644 doc/git-annex-unannex/comment_1_281aea2f018ea0fc98452c0d180c3bcb._comment create mode 100644 doc/git-annex-unannex/comment_2_d325e4201ec2964c5633e00c473df755._comment create mode 100644 doc/git-annex-unannex/comment_3_034db8e67e4bf5321e022918902f38e8._comment create mode 100644 doc/git-annex-unannex/comment_4_2a5334f59a4bdf242d53d2d5c120283c._comment create mode 100644 doc/git-annex-unannex/comment_5_d549796a3b1bdd3e980cb2c05f30fe2e._comment create mode 100644 doc/git-annex-unannex/comment_6_d5a8450349b0383ec29d150420189937._comment create mode 100644 doc/git-annex-unannex/comment_7_a6b64c4d90f4d228b8facce5e2399eca._comment create mode 100644 doc/git-annex-unannex/comment_8_54a6008e1db73d16d72587830912d772._comment create mode 100644 doc/git-annex-undo.mdwn create mode 100644 doc/git-annex-undo/comment_1_3466520304aa164ec44ed4e9d67590e7._comment create mode 100644 doc/git-annex-undo/comment_2_3dba1a993cbd357bdaa453366c0185cd._comment create mode 100644 doc/git-annex-undo/comment_3_ac1369c0417c1dc5f1b41b5cc88fe2fd._comment create mode 100644 doc/git-annex-undo/comment_4_18ed23e07ffed1cbf63e71fb115b0654._comment create mode 100644 doc/git-annex-ungroup.mdwn create mode 100644 doc/git-annex-uninit.mdwn create mode 100644 doc/git-annex-uninit/comment_1_075670e8e153e1d9f420b7d53c6ec06d._comment create mode 100644 doc/git-annex-uninit/comment_2_c695775bdb2c7491314a33dd6bcb447d._comment create mode 100644 doc/git-annex-uninit/comment_4_3386d8419830354b4422d38448467e95._comment create mode 100644 doc/git-annex-uninit/comment_5_53358bdd6093e2fb787df8de7190c5fd._comment create mode 100644 doc/git-annex-unlock.mdwn create mode 100644 doc/git-annex-unlock/comment_10_1f5ca7ccd35e9b102bf24b3f14deeee1._comment create mode 100644 doc/git-annex-unlock/comment_11_26ad80a6ad142e7dac6c8af955a4413f._comment create mode 100644 doc/git-annex-unlock/comment_1_d7f38f681be51db1244988847840d735._comment create mode 100644 doc/git-annex-unlock/comment_2_51158d4484ecb39633ec828beb8d9ce3._comment create mode 100644 doc/git-annex-unlock/comment_3_516a1522db3d1c14cc5131a24d672a8f._comment create mode 100644 doc/git-annex-unlock/comment_4_d04a1d4159306939b91a34fd17ab0325._comment create mode 100644 doc/git-annex-unlock/comment_5_40abc819288a97753747562f16b8febe._comment create mode 100644 doc/git-annex-unlock/comment_6_047355b1ba5e90b71fc85b42f52d1aeb._comment create mode 100644 doc/git-annex-unlock/comment_6_7ab5b674d0fc18da262e6c0264953e21._comment create mode 100644 doc/git-annex-unlock/comment_8_d10c8b6e2dd8800cbfc11a7fa8536065._comment create mode 100644 doc/git-annex-unlock/comment_9_31c72f60ddf029f09c1850223d5a8a55._comment create mode 100644 doc/git-annex-unregisterurl.mdwn create mode 100644 doc/git-annex-untrust.mdwn create mode 100644 doc/git-annex-unused.mdwn create mode 100644 doc/git-annex-unused/comment_11_5c1ea2e8ac475d8c0ddca2c38f968b95._comment create mode 100644 doc/git-annex-unused/comment_12_573e68def90ffd899271c6a9f80eae3c._comment create mode 100644 doc/git-annex-unused/comment_13_4a935c0c8862b24202c877031c35e238._comment create mode 100644 doc/git-annex-unused/comment_1_029c4bee59e48806c9f3d83579fdbb90._comment create mode 100644 doc/git-annex-unused/comment_2_c4d994706f69024788e6653d02a09517._comment create mode 100644 doc/git-annex-unused/comment_2_ca010846ef8eed4a302b6755f1f521f4._comment create mode 100644 doc/git-annex-unused/comment_3_5eb913bb96a04a174c04fe5d119977f4._comment create mode 100644 doc/git-annex-unused/comment_4_5b208cb45335f0d383a456865068e659._comment create mode 100644 doc/git-annex-unused/comment_5_65ab9f687f2817199eda7455d9b82677._comment create mode 100644 doc/git-annex-unused/comment_6_962097729f8b4a657bb7b9863fdffb68._comment create mode 100644 doc/git-annex-unused/comment_7_e21b036767651c5cfdd34bbd24a31fb5._comment create mode 100644 doc/git-annex-unused/comment_8_10ee2770ffe1cde367f3d310b2670539._comment create mode 100644 doc/git-annex-unused/comment_9_cfcc0bab810d58b7db66c2fa4e92f769._comment create mode 100644 doc/git-annex-upgrade.mdwn create mode 100644 doc/git-annex-vadd.mdwn create mode 100644 doc/git-annex-vcycle.mdwn create mode 100644 doc/git-annex-version.mdwn create mode 100644 doc/git-annex-vfilter.mdwn create mode 100644 doc/git-annex-vicfg.mdwn create mode 100644 doc/git-annex-view.mdwn create mode 100644 doc/git-annex-vpop.mdwn create mode 100644 doc/git-annex-wanted.mdwn create mode 100644 doc/git-annex-watch.mdwn create mode 100644 doc/git-annex-webapp.mdwn create mode 100644 doc/git-annex-webapp/comment_1_443c5595412a19ef9c6948c4224297a3._comment create mode 100644 doc/git-annex-webapp/comment_2_7b1c4c4356e801006081588b32075fb4._comment create mode 100644 doc/git-annex-webapp/comment_3_aee70625f7cff6e7312f9bc2cbbb02d0._comment create mode 100644 doc/git-annex-webapp/comment_4_c1754cdb4087ad278867ed8fddd99409._comment create mode 100644 doc/git-annex-webapp/comment_5_31301895752f0dd81db72c463f0dc732._comment create mode 100644 doc/git-annex-whereis.mdwn create mode 100644 doc/git-annex-whereis/comment_1_6a1f97de22983127bfc351d14838fb0e._comment create mode 100644 doc/git-annex-whereis/comment_2_69a861de80c7d2b939aae7103b1b7359._comment create mode 100644 doc/git-annex-whereis/comment_3_d06a33bfaeb2a9274d12639fdedcfa8a._comment create mode 100644 doc/git-annex-whereis/comment_4_3f06096e582178b4c69d63e84735d911._comment create mode 100644 doc/git-annex-whereused.mdwn create mode 100644 doc/git-annex-whereused/comment_1_bebd4ad86c6a64cc48e6f0dd5861f3de._comment create mode 100644 doc/git-annex-whereused/comment_2_f926fbe7c558a242a2af949daed415f7._comment create mode 100644 doc/git-annex-whereused/comment_3_bc04457bf320e81437c2eb858793c5ca._comment create mode 100644 doc/git-annex.mdwn create mode 100644 doc/git-remote-tor-annex.mdwn create mode 100644 doc/git-union-merge.mdwn create mode 100644 doc/how_it_works.mdwn create mode 100644 doc/how_it_works/comment_1_b3bdd6a06d5764db521ae54878131f5f._comment create mode 100644 doc/how_it_works/comment_2_2a8ce5859040d815e6234fc18f5f1961._comment create mode 100644 doc/how_it_works/comment_3_806c0fe325942a425e43afb9b78327ec._comment create mode 100644 doc/how_it_works/comment_4_0ef6b8c9dbd5a7f9b9f274dc6f9988f0._comment create mode 100644 doc/how_it_works/comment_5_11e5141c9ffb37db4fa0c1bfb32c51a9._comment create mode 100644 doc/how_it_works/comment_6_2ad3441a02f1bcc2cca0c10ecf7b216f._comment create mode 100644 doc/index.mdwn create mode 100644 doc/install.mdwn create mode 100644 doc/install/AlpineLinux.mdwn create mode 100644 doc/install/Android.mdwn create mode 100755 doc/install/Android/git-annex-install create mode 100644 doc/install/Android/oldapp.mdwn create mode 100644 doc/install/Android/oldapp/comment_10_225f2c6fe255be93702cfbd4dc172f3b._comment create mode 100644 doc/install/Android/oldapp/comment_10_4b565e73f02f0e84bdf7e686b0d7bf5f._comment create mode 100644 doc/install/Android/oldapp/comment_11_3e7980603749665fafbdeb1b7ab068a5._comment create mode 100644 doc/install/Android/oldapp/comment_11_4e970633d9073fcf4bc33f3fff2525b2._comment create mode 100644 doc/install/Android/oldapp/comment_12_57867e2b13b83cc9815df56b027d388a._comment create mode 100644 doc/install/Android/oldapp/comment_12_87da4f379a0276b662583e7e22061218._comment create mode 100644 doc/install/Android/oldapp/comment_13_169025cf0b415d5a45dd89856e53cca9._comment create mode 100644 doc/install/Android/oldapp/comment_14_19909ddf4e7e6da0e814e165c5c9b44a._comment create mode 100644 doc/install/Android/oldapp/comment_1_f9ced494a530e6ae3e76cfbaddb89f5d._comment create mode 100644 doc/install/Android/oldapp/comment_2_74cccae04ea23a8600069c7e658143aa._comment create mode 100644 doc/install/Android/oldapp/comment_3_82c7cb31d19d4e18ca5548da5ca19a79._comment create mode 100644 doc/install/Android/oldapp/comment_4_cebaa8ee5bbed27d9b2d032ca7bdec6e._comment create mode 100644 doc/install/Android/oldapp/comment_8_34f7c42050fa48769a6bfae60d72e477._comment create mode 100644 doc/install/Android/oldapp/comment_9_f3d289b78d6bdb3cc65689495a8439a5._comment create mode 100644 doc/install/ArchLinux.mdwn create mode 100644 doc/install/ArchLinux/comment_10_b68c42b3804481808dfe83ae557edec3._comment create mode 100644 doc/install/ArchLinux/comment_11_0d51aaebe5929b03cba38156a97bf3cc._comment create mode 100644 doc/install/ArchLinux/comment_2_e5f923e6d81cfb3fba7a72f60baaf4ab._comment create mode 100644 doc/install/ArchLinux/comment_3_8e607cd883ec174571e9dfe3b25bfd05._comment create mode 100644 doc/install/ArchLinux/comment_4_a378391dd218859f381c479259dd8fe3._comment create mode 100644 doc/install/ArchLinux/comment_6_1d597d6a95f9c2df7dae6e98813e4865._comment create mode 100644 doc/install/ArchLinux/comment_7_2d708977e2fad6b68803494576382df5._comment create mode 100644 doc/install/ArchLinux/comment_7_97d611f1ae6d4fbe91f84f9fe739f368._comment create mode 100644 doc/install/ArchLinux/comment_8_5b5f5e0b64e5bfb1ea12e8b251c6fb5f._comment create mode 100644 doc/install/ArchLinux/comment_8_ddc13b45286933e7dd06f5bd6ea8fac9._comment create mode 100644 doc/install/ArchLinux/comment_9_b5f1bd5d92cf35002e2ea75e07040bea._comment create mode 100644 doc/install/Debian.mdwn create mode 100644 doc/install/Debian/comment_11_b44ed53973ac26eedd3838df28f74a7e._comment create mode 100644 doc/install/Debian/comment_12_a0105d7f045511b9c80ea9bb0eac3708._comment create mode 100644 doc/install/Debian/comment_13_435fb1359ea7f481ae23a973216085d8._comment create mode 100644 doc/install/Debian/comment_14_a34e23d9aa3027012ab1236aa4f7d5cb._comment create mode 100644 doc/install/Debian/comment_15_20d8271ba3f6cfe3c8849c3d41607630._comment create mode 100644 doc/install/Debian/comment_16_89f67da4a4a6a626a7db9c6674b244b6._comment create mode 100644 doc/install/Debian/comment_17_ef7f3e88d61833e51f0302e938343818._comment create mode 100644 doc/install/Debian/comment_1_029486088d098c2d4f1099f2f0e701a9._comment create mode 100644 doc/install/Debian/comment_2_648e3467e260cdf233acdb0b53313ce0._comment create mode 100644 doc/install/Debian/comment_3_4d922e11249627634ecc35bba4044d9e._comment create mode 100644 doc/install/Debian/comment_4_2a93ab18b05ccb90e7acc5885866fca2._comment create mode 100644 doc/install/Debian/comment_7_1bccc7bf7a4ef61a9b30024b9b22ba7d._comment create mode 100644 doc/install/Debian/comment_8_5b5a3b0e8abe8831a6a15a4e258d14fd._comment create mode 100644 doc/install/Docker.mdwn create mode 100644 doc/install/Docker/comment_1_909e3b2da0050ce1102c289cc5aac522._comment create mode 100644 doc/install/Fedora.mdwn create mode 100644 doc/install/Fedora/comment_1_c4db84e672ad4b45b522db735706b00f._comment create mode 100644 doc/install/Fedora/comment_2_f98c488c09bef86e2b0414589ce9e141._comment create mode 100644 doc/install/Fedora/comment_3_d872acf8865fe7c99a9b712db5b38ea4._comment create mode 100644 doc/install/Fedora/comment_4_93b3402e4c51e1a5c96f907bb528164b._comment create mode 100644 doc/install/Fedora/comment_5_0427e0503764b29e57abf9e97155136b._comment create mode 100644 doc/install/Fedora/comment_6_1b1b38a79251fe2e8c1e4debbe3bc3c5._comment create mode 100644 doc/install/Fedora/comment_7_4832d271dcc63a6cd1c40fe38ad5e367._comment create mode 100644 doc/install/Fedora/comment_8_80e167cde1a6511683a8f6e8029c0da6._comment create mode 100644 doc/install/FreeBSD.mdwn create mode 100644 doc/install/Gentoo.mdwn create mode 100644 doc/install/Guix.mdwn create mode 100644 doc/install/Linux_standalone.mdwn create mode 100644 doc/install/Linux_standalone/comment_1_1adc00aecc51f1e74701bd67cd74155d._comment create mode 100644 doc/install/Linux_standalone/comment_2_7983285b56fd10359a7cc3615fd1e2fe._comment create mode 100644 doc/install/Linux_standalone/comment_3_eaa9b0532d4629b61f3a684886b1d4f9._comment create mode 100644 doc/install/Linux_standalone/comment_4_070689ea45739d06260da07d1369dff9._comment create mode 100644 doc/install/Linux_standalone/comment_5_9046b80114fc03179c971bfb3e4d666d._comment create mode 100644 doc/install/NixOS.mdwn create mode 100644 doc/install/NixOS/comment_1_4e487ddd2654a8a992c1538b9c3bf003._comment create mode 100644 doc/install/OSX.mdwn create mode 100644 doc/install/OSX/Homebrew.mdwn create mode 100644 doc/install/OSX/Homebrew/comment_1_61cad5a309c3c4e3f278dec1890c9f40._comment create mode 100644 doc/install/OSX/Homebrew/comment_2_2f89cfbc42590885fb7e92a89d0f7895._comment create mode 100644 doc/install/OSX/MacPorts.mdwn create mode 100644 doc/install/OSX/MacPorts/comment_21_987f1302f56107c926b6daf83e124654._comment create mode 100644 doc/install/OSX/MacPorts/comment_3_47a77a03040fe628109bd54f82f9ad7a._comment create mode 100644 doc/install/OSX/comment_10_e5172de344908f85ce6cf976e3c3806b._comment create mode 100644 doc/install/OSX/comment_11_8d53c477b441ab0984257b21003c7cc7._comment create mode 100644 doc/install/OSX/comment_12_17b84f51de6bed88e373350b194c8a8d._comment create mode 100644 doc/install/OSX/comment_13_f4b39e2009274539d60b29711a4a2c8d._comment create mode 100644 doc/install/OSX/comment_14_5581b7d1c09e6a78419d626bb25261b6._comment create mode 100644 doc/install/OSX/comment_15_dda16b58686b0e5d061521f8e1831f89._comment create mode 100644 doc/install/OSX/comment_16_277249620801bd4305776a3d598bd074._comment create mode 100644 doc/install/OSX/comment_17_06e8fc7a4670a42c249f90a3602c3523._comment create mode 100644 doc/install/OSX/comment_18_5eca3153048d2b3b4fa707d6b8a5ebeb._comment create mode 100644 doc/install/OSX/comment_19_040d388c94ee0e537990f0cd782d8554._comment create mode 100644 doc/install/OSX/comment_20_3e6a3c00444badf2cf7a9ee3d54af11e._comment create mode 100644 doc/install/OSX/comment_21_951e6bb1f70d8f02374e9e3fb91dc182._comment create mode 100644 doc/install/OSX/comment_22_6ae394921280d3cd4907f210b9845a2f._comment create mode 100644 doc/install/OSX/comment_23_895d4e837d05a318512730d66f14db22._comment create mode 100644 doc/install/OSX/comment_23_af10ed56c037499d002fcf0114b9426a._comment create mode 100644 doc/install/OSX/comment_25_db90984062a07576a4777b2d743161f1._comment create mode 100644 doc/install/OSX/comment_2_25552ff2942048fafe97d653757f1ad6._comment create mode 100644 doc/install/OSX/comment_4_25cac8bcd84a5210fc0a5243260b8cc7._comment create mode 100644 doc/install/OSX/comment_5_39b4b748b4586bf32b37edfefef84bba._comment create mode 100644 doc/install/OSX/comment_6_1a9c91ef43edc4148947f202ff604114._comment create mode 100644 doc/install/OSX/comment_7_892f7e65f95f43697164267c4b71c0d5._comment create mode 100644 doc/install/OSX/comment_8_b94193a0583605920effa7179a6164d9._comment create mode 100644 doc/install/OSX/comment_9_f11f726d1fee3c4c91f3c984e792037d._comment create mode 100644 doc/install/OSX/old_comments.mdwn create mode 100644 doc/install/OSX/old_comments/comment_10_4d15bfc4fc26e7249953bebfbb09e0aa._comment create mode 100644 doc/install/OSX/old_comments/comment_10_798000aab19af2944b6e44dbc550c6fe._comment create mode 100644 doc/install/OSX/old_comments/comment_11_707a1a27a15b2de8dfc8d1a30420ab4c._comment create mode 100644 doc/install/OSX/old_comments/comment_12_60d13f2c8e008af1041bea565a392c83._comment create mode 100644 doc/install/OSX/old_comments/comment_13_a6f48c87c2d6eabe379d6e10a6cac453._comment create mode 100644 doc/install/OSX/old_comments/comment_14_6ef2ddb7b11ce6ad54578ae118ed346e._comment create mode 100644 doc/install/OSX/old_comments/comment_15_6fd1fad5b6d9f36620e5a0e99edd2f89._comment create mode 100644 doc/install/OSX/old_comments/comment_16_af6fe3540032cdf4400478de87771058._comment create mode 100644 doc/install/OSX/old_comments/comment_17_8d3a0596db67108041728b20f2790f31._comment create mode 100644 doc/install/OSX/old_comments/comment_1_0a1760bf0db1f1ba89bdb4c62032f631._comment create mode 100644 doc/install/OSX/old_comments/comment_2_0327c64b15249596add635d26f4ce67f._comment create mode 100644 doc/install/OSX/old_comments/comment_2_7683740a98182de06cb329792e0c0a25._comment create mode 100644 doc/install/OSX/old_comments/comment_34_c9362141d15a2f68a75df9f8bfe29da0._comment create mode 100644 doc/install/OSX/old_comments/comment_35_8106196c3fef70652cb2106e2d5857db._comment create mode 100644 doc/install/OSX/old_comments/comment_3_47c682a779812dda77601c24a619923c._comment create mode 100644 doc/install/OSX/old_comments/comment_3_733147cebe501c60f2141b711f1d7f24._comment create mode 100644 doc/install/OSX/old_comments/comment_3_b090f40fe5a32e00b472a5ab2b850b4a._comment create mode 100644 doc/install/OSX/old_comments/comment_3_fc092412e99cf4c5f095b0ef710bc4de._comment create mode 100644 doc/install/OSX/old_comments/comment_4_d513e21512a9b207983d38abf348d00f._comment create mode 100644 doc/install/OSX/old_comments/comment_4_d68c36432c7be3f4a76f4f0d7300bac9._comment create mode 100644 doc/install/OSX/old_comments/comment_4_e6109a964064a2a799768a370e57801d._comment create mode 100644 doc/install/OSX/old_comments/comment_5_50777853f808d57b957f8ce9a0f84b3d._comment create mode 100644 doc/install/OSX/old_comments/comment_5_626a4b4bf302d4ae750174f860402f70._comment create mode 100644 doc/install/OSX/old_comments/comment_6_18a8df794aa0ddd294dbf17d3d4c7fe2._comment create mode 100644 doc/install/OSX/old_comments/comment_7_2ce7acab15403d3f993cec94ec7f3bc6._comment create mode 100644 doc/install/OSX/old_comments/comment_8_a93ad4b67c5df4243268bcf32562f6be._comment create mode 100644 doc/install/OSX/old_comments/comment_9_ae3ed5345bc84f57e44251d2e6c39342._comment create mode 100644 doc/install/OSX/old_comments/comment_9_c6b1b31d16f2144ad08abd8c767b6ab9._comment create mode 100644 doc/install/OSX/porting.mdwn create mode 100644 doc/install/OSX/porting/comment_10_cd2120552ef894a37933b328136fa4cc._comment create mode 100644 doc/install/OSX/porting/comment_11_740fa80e2e54e6fb570f820ff1f56440._comment create mode 100644 doc/install/OSX/porting/comment_12_a84028080578a8b60115b6c4ef823627._comment create mode 100644 doc/install/OSX/porting/comment_13_d6f1db401858ffea23c123db49f5b296._comment create mode 100644 doc/install/OSX/porting/comment_14_035f856923276b0edad879e196e94097._comment create mode 100644 doc/install/OSX/porting/comment_15_336e0acb00e84943715e69917643a69e._comment create mode 100644 doc/install/OSX/porting/comment_16_1befafa862b7d07b1f6e57c0182497cf._comment create mode 100644 doc/install/OSX/porting/comment_17_19c08b2c6c2c5cd88bf96d2bcbbd9055._comment create mode 100644 doc/install/OSX/porting/comment_18_537fad5d8854e765499d47602d1ab398._comment create mode 100644 doc/install/OSX/porting/comment_19_18d4377f4ded5604d395d73783ba82c9._comment create mode 100644 doc/install/OSX/porting/comment_22_6b5f44a98f9d37a1c6ecfe19a60fe6c5._comment create mode 100644 doc/install/OSX/porting/comment_23_3d82a270dd4b0159f4aab5675166e1e3._comment create mode 100644 doc/install/OSX/porting/comment_24_b9d3563a2cc3d769f27876e028dc344d._comment create mode 100644 doc/install/OSX/porting/comment_27_2a60108a440231ba83f5a54b6bcc5488._comment create mode 100644 doc/install/OSX/porting/comment_27_d453510b9bb62072a4c663206c12c8a4._comment create mode 100644 doc/install/OSX/porting/comment_28_0970bfd63137ea48701dff6aea1b4bcb._comment create mode 100644 doc/install/OSX/porting/comment_29_8622ed56c6a8034c20fb311418d94003._comment create mode 100644 doc/install/OSX/porting/comment_30_ce58633ef5b2f8f4caa7e626358f33be._comment create mode 100644 doc/install/OSX/porting/comment_31_09084a7b3cf06bfa3add0f4991476ffe._comment create mode 100644 doc/install/OSX/porting/comment_32_a46d8e3e7795b9afb1e1c2be943d12af._comment create mode 100644 doc/install/OSX/porting/comment_33_203a36322b3c453c05c8906c64e62e06._comment create mode 100644 doc/install/OSX/porting/comment_34_874ff01f27911baf6ef0f559d5d5f5a0._comment create mode 100644 doc/install/OSX/porting/comment_8_38d9c2eea1090674de2361274eab5b0e._comment create mode 100644 doc/install/OSX/porting/comment_9_35bf3812db6f3ef25da9b3bc84f147c5._comment create mode 100644 doc/install/OpenBSD.mdwn create mode 100644 doc/install/RHEL.mdwn create mode 100644 doc/install/ScientificLinux.mdwn create mode 100644 doc/install/Ubuntu.mdwn create mode 100644 doc/install/Ubuntu/Phone.mdwn create mode 100644 doc/install/Ubuntu/comment_10_490e065314693423ab6969d8ae6978fe._comment create mode 100644 doc/install/Ubuntu/comment_11_4ebac3fb43de854ed1a3b1d2ea94011a._comment create mode 100644 doc/install/Ubuntu/comment_12_38f69dffe2db0d15e4c4e5cb47f40ef8._comment create mode 100644 doc/install/Ubuntu/comment_13_7964374bb2332940677eea570bdb0b69._comment create mode 100644 doc/install/Ubuntu/comment_14_b511063001af2e2170bef657cf016ff2._comment create mode 100644 doc/install/Ubuntu/comment_15_4ea052431b49a0505b4a58a760054bed._comment create mode 100644 doc/install/Ubuntu/comment_16_b5dd1d73309e427d6e817a3a69beea74._comment create mode 100644 doc/install/Ubuntu/comment_1_d1c511153fe94bf33e19a1281f1c92f2._comment create mode 100644 doc/install/Ubuntu/comment_2_ad13886c1c1f76d1cd995ea7b7d8471c._comment create mode 100644 doc/install/Ubuntu/comment_3_a08817322739b03cf0fec97283b16f1a._comment create mode 100644 doc/install/Ubuntu/comment_4_fe0997e56136bd30749f0995cbf19b56._comment create mode 100644 doc/install/Ubuntu/comment_5_fbb5306a162db1a1ee9efa3523aac952._comment create mode 100644 doc/install/Ubuntu/comment_6_a97e7f0e62ac685c3ded423bddeaa67f._comment create mode 100644 doc/install/Ubuntu/comment_7_921a223fd7e679b9ced3d8ba5ce688e0._comment create mode 100644 doc/install/Ubuntu/comment_8_1f943cb084fa8e21bc6ee5fc3118f02f._comment create mode 100644 doc/install/Ubuntu/comment_9_c2f8b35ada873acb1ce593b04e2899fe._comment create mode 100644 doc/install/Void.mdwn create mode 100644 doc/install/Windows.mdwn create mode 100644 doc/install/Windows/comment_10_39edee046193c7d36daaf245fa87007c._comment create mode 100644 doc/install/Windows/comment_11_6310a850074cf65b1c0b5b49e2e5b582._comment create mode 100644 doc/install/Windows/comment_12_3a7080a31d30ccb32fede56a98bb635a._comment create mode 100644 doc/install/Windows/comment_13_6a998c400070059477de18a81a3ba0b5._comment create mode 100644 doc/install/Windows/comment_14_7b5f0c6b31d9c409ea0989123788bacf._comment create mode 100644 doc/install/Windows/comment_15_19226be8cae0c29b0e9a54cebcf1f17b._comment create mode 100644 doc/install/Windows/comment_16_b4b60bed666355ace286775afe87860d._comment create mode 100644 doc/install/Windows/comment_17_165ac8b0e1cd4f250e681eb88c0624d3._comment create mode 100644 doc/install/Windows/comment_18_e0adfbf74754f847dc4705685cf00640._comment create mode 100644 doc/install/Windows/comment_1_e5e5c7b75859493a7d94cbf7df746fb9._comment create mode 100644 doc/install/Windows/comment_2_ef329ea100b36a1180e232a1f97369d6._comment create mode 100644 doc/install/Windows/comment_3_10fb90bc434b4da189ed7235818ef30f._comment create mode 100644 doc/install/Windows/comment_4_c81a36e387ca11050cf8cb977fff98ff._comment create mode 100644 doc/install/Windows/comment_5_88ad2f657bf92e8c6144608612b9be49._comment create mode 100644 doc/install/Windows/comment_6_90ef5d5a4f66ac3e440aadf302a625a9._comment create mode 100644 doc/install/Windows/comment_7_0589dd8c33572dd1d0ef5cb7b29ebba7._comment create mode 100644 doc/install/Windows/comment_8_35c66016c971a623ec86318adf7923b4._comment create mode 100644 doc/install/Windows/comment_9_2687128ff7aa4b6f29e8b880b5d4d13d._comment create mode 100644 doc/install/comment_1_0aa16754fb08d8f2a54c8c3f78b6c187._comment create mode 100644 doc/install/comment_2_ba3985a5cbd9f5682807d2bdbb9874e2._comment create mode 100644 doc/install/comment_3_9a2118d6f967585cb21f9d9b372f4017._comment create mode 100644 doc/install/comment_5_a2532a0fea59d15a2efa11748ff0d70a._comment create mode 100644 doc/install/comment_6_4ae37152bc9765cea921b436fb2785d8._comment create mode 100644 doc/install/comment_7_bc273d60cb74241231183186aefbc147._comment create mode 100644 doc/install/comment_8_1330a5413b720eca0103a0880d24eb2d._comment create mode 100644 doc/install/comment_8_768498659909c37044f2b4dd08bacda3._comment create mode 100644 doc/install/conda.mdwn create mode 100644 doc/install/conda/comment_1_d9fbae3aca8853a13919350d405d686b._comment create mode 100644 doc/install/conda/comment_2_8968f1e04a08fb95644910089438b02d._comment create mode 100644 doc/install/fromsource.mdwn create mode 100644 doc/install/fromsource/comment_10_7ebe353b05d4df29897dc9a4f45c8a91._comment create mode 100644 doc/install/fromsource/comment_11_0d06702e6e0ae3cd331cf748a9f6f273._comment create mode 100644 doc/install/fromsource/comment_12_b93ca271dffca3f948645d3e1326c1d9._comment create mode 100644 doc/install/fromsource/comment_13_3dac019cda71bf99878c0a1d9382323b._comment create mode 100644 doc/install/fromsource/comment_14_14b46470593f84f8c3768a91cb77bdab._comment create mode 100644 doc/install/fromsource/comment_15_c3a5b0aad28a90e0bb8da31a430578eb._comment create mode 100644 doc/install/fromsource/comment_16_4faf214f97f9516898d7c17d743ef825._comment create mode 100644 doc/install/fromsource/comment_17_2a9d6807a3a13815c824985521757167._comment create mode 100644 doc/install/fromsource/comment_18_1efa0c7a963ec452fc6336fbe4964f6e._comment create mode 100644 doc/install/fromsource/comment_19_6f42f9234f9ff6a2ca6bbb4d2643843e._comment create mode 100644 doc/install/fromsource/comment_1_9d085e460553fa045999ab7cb945cdec._comment create mode 100644 doc/install/fromsource/comment_1_f04df6bcd50d1d01eb34868bb00ac35c._comment create mode 100644 doc/install/fromsource/comment_20_0f553be2a4c666e3bed58b2bce549406._comment create mode 100644 doc/install/fromsource/comment_21_f91a6ec21e96eced73ea9579fd8cbd15._comment create mode 100644 doc/install/fromsource/comment_22_2f27b78215f97ade1986ca806c634cb3._comment create mode 100644 doc/install/fromsource/comment_23_c34d2b1d95830a3e58671a5b566a1758._comment create mode 100644 doc/install/fromsource/comment_24_40cbde8ec067b3a860e6df1a9bea5f76._comment create mode 100644 doc/install/fromsource/comment_25_8a7664e6f9271718dc607a0782366c5b._comment create mode 100644 doc/install/fromsource/comment_26_bd455c732639728bce2bfc39e32871d2._comment create mode 100644 doc/install/fromsource/comment_27_c080e9239b6eec88d329c28da7bb4141._comment create mode 100644 doc/install/fromsource/comment_28_15951dd070a675300420eea137a28ef9._comment create mode 100644 doc/install/fromsource/comment_29_ac082dca67f4a29b06070c0283130f52._comment create mode 100644 doc/install/fromsource/comment_2_a69d17c55e56a707ec6606d5cdddee25._comment create mode 100644 doc/install/fromsource/comment_2_b7954521d9ab40622b665f278dd72e17._comment create mode 100644 doc/install/fromsource/comment_30_ad639c07cb79e89406e95c1dafce3a01._comment create mode 100644 doc/install/fromsource/comment_31_4763b24a29627d55f465b9ea260ea7ec._comment create mode 100644 doc/install/fromsource/comment_32_1d34c294486c85b1149675fa5861ae35._comment create mode 100644 doc/install/fromsource/comment_33_8d4dfc33cada6091c30d3a43ce404b8b._comment create mode 100644 doc/install/fromsource/comment_34_38451e751add6daf479b559c4b6a7c61._comment create mode 100644 doc/install/fromsource/comment_35_4d44e4531e6686bd340f26836ad40026._comment create mode 100644 doc/install/fromsource/comment_36_2a095a5af53a356bd29abd22a9cb1bea._comment create mode 100644 doc/install/fromsource/comment_37_f33e1a4575dccc20b0d3d7c00e6db709._comment create mode 100644 doc/install/fromsource/comment_38_5c1e96221154a4ae4ebd636232044ced._comment create mode 100644 doc/install/fromsource/comment_39_a86057d7e6d47113330f79e1812c3a5d._comment create mode 100644 doc/install/fromsource/comment_3_55bed050bdb768543dbe1b86edec057d._comment create mode 100644 doc/install/fromsource/comment_3_a3bf3ce57ea73515a059267f25b816eb._comment create mode 100644 doc/install/fromsource/comment_45_d9cccbb9620cc8218e72b5380fd89a05._comment create mode 100644 doc/install/fromsource/comment_46_954de34275d33bc4590927f911761563._comment create mode 100644 doc/install/fromsource/comment_47_6de25c1e450e1e3b1d18d2c76235ccb8._comment create mode 100644 doc/install/fromsource/comment_48_9c08300c5d172ba9223042a00c8acb2b._comment create mode 100644 doc/install/fromsource/comment_49_c8370525547b435d963a2c1192a21124._comment create mode 100644 doc/install/fromsource/comment_4_2ff7f8a3b03bea7e860248829d595bd1._comment create mode 100644 doc/install/fromsource/comment_4_765334858ef1eedff2c5d89ed42aa7f6._comment create mode 100644 doc/install/fromsource/comment_50_c1ce6084ba1e96afa30e18f0f6433aa4._comment create mode 100644 doc/install/fromsource/comment_51_514bac1020c4227a23380d1675184fc7._comment create mode 100644 doc/install/fromsource/comment_52_df7d36e4d169fbc4199026d7af1aa581._comment create mode 100644 doc/install/fromsource/comment_53_e4bb31024aa4a317be2f45667b6d6f9f._comment create mode 100644 doc/install/fromsource/comment_54_d7fabada8101596954ed7e401a8c460b._comment create mode 100644 doc/install/fromsource/comment_55_0592c3d36ab569cd777009a491e25ba2._comment create mode 100644 doc/install/fromsource/comment_57_13a198daa871e001b02b9df2e8d7c446._comment create mode 100644 doc/install/fromsource/comment_57_efac370d382fc79e1f207e8090e0f06b._comment create mode 100644 doc/install/fromsource/comment_58_64b44da5ec93fe4f50ad8b856823558d._comment create mode 100644 doc/install/fromsource/comment_59_4ef618a5de9b86ffa54ae849cbb329bb._comment create mode 100644 doc/install/fromsource/comment_5_4aea55dc5b24d84e0953382ccfea1a01._comment create mode 100644 doc/install/fromsource/comment_5_8789fc27466714faa5a3a7a6b8ec6e5d._comment create mode 100644 doc/install/fromsource/comment_60_55ec2dcb5e1b5e272fdd53aa063bc162._comment create mode 100644 doc/install/fromsource/comment_61_7fb2a70b6d39ad95ee701a99b9e19961._comment create mode 100644 doc/install/fromsource/comment_62_4cf71016c3b42ec972760a938031cbf9._comment create mode 100644 doc/install/fromsource/comment_63_dddfc7e7d2fa09008f538abde3213b45._comment create mode 100644 doc/install/fromsource/comment_64_c3195cbc42058593ea6ca9d2eaaf9722._comment create mode 100644 doc/install/fromsource/comment_65_663426a5014e5a38d477fb6fed411c17._comment create mode 100644 doc/install/fromsource/comment_66_849c4c2cfc34991c13d55495e391cce3._comment create mode 100644 doc/install/fromsource/comment_67_5655a80d206bd1f7cf1f326c645df7ed._comment create mode 100644 doc/install/fromsource/comment_68_059f1cd929228e131bf88d80aca0b573._comment create mode 100644 doc/install/fromsource/comment_69_444e529f8838ef127ff115eb6c2ef8ca._comment create mode 100644 doc/install/fromsource/comment_6_5afb2d081e8b603bc338cd460ad9317d._comment create mode 100644 doc/install/fromsource/comment_70_ab27934713fa6032ec9992f7e04fa9c5._comment create mode 100644 doc/install/fromsource/comment_71_3075af9a88b717c8ff1a489177e689f4._comment create mode 100644 doc/install/fromsource/comment_72_fb9581f4949efe1e8c90851fce9d61bf._comment create mode 100644 doc/install/fromsource/comment_73_bc163a82180b00a8b757edf269cebc06._comment create mode 100644 doc/install/fromsource/comment_74_473d320a05f08ce3cbe24789dcb01200._comment create mode 100644 doc/install/fromsource/comment_75_58dfd18135aa187d8b3977521ecff2d2._comment create mode 100644 doc/install/fromsource/comment_7_129c4f2e404c874e5adfa52902a81104._comment create mode 100644 doc/install/fromsource/comment_8_738c108f131e3aab0d720bc4fd6a81fd._comment create mode 100644 doc/install/fromsource/comment_9_5ddbba419d96a7411f7edddaa4d7b739._comment create mode 100644 doc/install/openSUSE.mdwn create mode 100644 doc/install/openSUSE/comment_1_a5aea1ef644d0402d3caf593fef2456f._comment create mode 100644 doc/install/openSUSE/comment_2_095d48e7dffe57421b2d3384a83d7183._comment create mode 100644 doc/install/rpm_standalone.mdwn create mode 100644 doc/install/rpm_standalone/comment_1_7d234e64f3b6e97cd6d91c339ebb0025._comment create mode 100644 doc/install/rpm_standalone/comment_2_11f0fdc5be4fd6620732867070c53477._comment create mode 100644 doc/install/rpm_standalone/comment_3_3a38ab16ca034025476b4df0a566b4a9._comment create mode 100644 doc/install/verifying_downloads.mdwn create mode 100644 doc/internals.mdwn create mode 100644 doc/internals/comment_10_c4298babd96b2596bd4f6ad828212c92._comment create mode 100644 doc/internals/comment_11_9758bb3a17f63b4dcf51742ea482dbe9._comment create mode 100644 doc/internals/comment_12_f0325cefa5cd53a5a897046606137cef._comment create mode 100644 doc/internals/comment_13_e45b6fa035a30703618448a0f764f935._comment create mode 100644 doc/internals/comment_14_3f62751c2dd041f4ead1c6580ea5eec1._comment create mode 100644 doc/internals/comment_15_c3d12d14e4d044f39829c5d92f523655._comment create mode 100644 doc/internals/comment_16_2455c898d6c77a5437a2c1532144bb8a._comment create mode 100644 doc/internals/comment_17_df13b7e66963a6d2673e49f52afb978a._comment create mode 100644 doc/internals/comment_18_1adce7945940b9c384c2383261388dd9._comment create mode 100644 doc/internals/comment_1_4b8ed353dca4f484b3b6eb463fa02fd8._comment create mode 100644 doc/internals/comment_2_c19232d5cc4976c2e5b014aef6e8d9ec._comment create mode 100644 doc/internals/comment_3_5a26ee5aab274f321a4ea6f8527f53bd._comment create mode 100644 doc/internals/comment_4_81293b180fb09105ec158fdfef73d249._comment create mode 100644 doc/internals/comment_5_354012b6a9ac11160eb926234d38051f._comment create mode 100644 doc/internals/comment_7_7e40f744f9ac7f0403df9d1a2162a516._comment create mode 100644 doc/internals/comment_7_9c82a2878f3feb1b2a95662ed25b234b._comment create mode 100644 doc/internals/comment_8_9dccdd3a9556ceef54e318cd5c8a50ad._comment create mode 100644 doc/internals/comment_9_40442b012886ad698f448c262f0d7f4c._comment create mode 100644 doc/internals/hashing.mdwn create mode 100644 doc/internals/hashing/comment_1_9153e4f4f9335e524cf1b96a51bef41f._comment create mode 100644 doc/internals/hashing/comment_2_086ea37acf15e2a8694b8386222b73f6._comment create mode 100644 doc/internals/hashing/comment_3_19b7d20ca392078f14f9f10992f288ec._comment create mode 100644 doc/internals/hashing/comment_4_7642d6ce5fd4d37d464b05d0b4f869c6._comment create mode 100644 doc/internals/hashing/comment_5_b0cb207a85cda5a0ff2ea71caca22c0d._comment create mode 100644 doc/internals/hashing/comment_6_edb5c3388b5ac3481403c7accf9bb3f2._comment create mode 100644 doc/internals/hashing/comment_7_843592cf125be06fb316be43b85b0524._comment create mode 100644 doc/internals/key_format.mdwn create mode 100644 doc/internals/key_format/comment_1_4ec126bffafc81fae04e183874ffce39._comment create mode 100644 doc/internals/key_format/comment_2_1e46521ab48805c36233dbb69b11e389._comment create mode 100644 doc/internals/lockdown.mdwn create mode 100644 doc/internals/lockdown/comment_1_caa8b378e8c35177083e6cc2f6937180._comment create mode 100644 doc/internals/lockdown/comment_2_7bf74adb5556b7fc74a94e751c5fd3d6._comment create mode 100644 doc/internals/lockdown/comment_3_caf6d5318703d188a2135737093d8323._comment create mode 100644 doc/internals/lockdown/comment_4_0253bf642148ea853f6d1c8580e09db2._comment create mode 100644 doc/internals/lockdown/comment_5_3d7ab5c8e813b21812b5132c708aad68._comment create mode 100644 doc/internals/pointer_file.mdwn create mode 100644 doc/license.mdwn create mode 100644 doc/license/AGPL create mode 100644 doc/license/GPL create mode 100644 doc/links/key_concepts.mdwn create mode 100644 doc/links/other_stuff.mdwn create mode 100644 doc/links/the_details.mdwn create mode 100644 doc/location_tracking.mdwn create mode 100644 doc/logo-old-bw.svg create mode 100644 doc/logo-old.png create mode 100644 doc/logo-old.svg create mode 100644 doc/logo-old_small.png create mode 100644 doc/logo-with-cli.png create mode 100644 doc/logo-with-cli.svg create mode 100644 doc/logo.mdwn create mode 100644 doc/logo.svg create mode 100644 doc/logo_16x16.png create mode 100644 doc/logo_32x32.png create mode 100644 doc/logo_small.png create mode 100644 doc/meta.mdwn create mode 100644 doc/metadata.mdwn create mode 100644 doc/metadata/comment_1_d367fdaf0425b59d694bf16059d47192._comment create mode 100644 doc/metadata/comment_2_e15d2b5a405db4ccdb91d6aad4a22983._comment create mode 100644 doc/metadata/comment_3_50b17af1cf75ce88c4aef59dcd971b82._comment create mode 100644 doc/metadata/comment_4_237721c5e8f66f303a1828810573a23d._comment create mode 100644 doc/metadata/comment_5_fd30444aecfc4792eb4dbfdebc230786._comment create mode 100644 doc/news.mdwn create mode 100644 doc/news/2013_git-annex_user_survey.mdwn create mode 100644 doc/news/2015_git-annex_user_survey.mdwn create mode 100644 doc/news/2018_git-annex_user_survey.mdwn create mode 100644 doc/news/Distribits_meeting.mdwn create mode 100644 doc/news/Distribits_meeting/comment_1_774494da38afecc425aceca21d047b5e._comment create mode 100644 doc/news/Distribits_meeting/comment_2_bbdde32c4bd9c7a1a62450d59a1e879b._comment create mode 100644 doc/news/LWN_article.mdwn create mode 100644 doc/news/Presentation_at_FOSDEM.mdwn create mode 100644 doc/news/git-annex_shirts_now_available_at_hellotux.com.mdwn create mode 100644 doc/news/git_annex_fall_of_code.mdwn create mode 100644 doc/news/security_fix_release.mdwn create mode 100644 doc/news/sharebox_a_FUSE_filesystem_for_git-annex.mdwn create mode 100644 doc/news/sharebox_a_FUSE_filesystem_for_git-annex/comment_1_e238d1734238e37bb55ff952b32e06b8._comment create mode 100644 doc/news/sharebox_a_FUSE_filesystem_for_git-annex/comment_2_341b567722797eb02bd96ffada431b0c._comment create mode 100644 doc/news/sharebox_a_FUSE_filesystem_for_git-annex/comment_3_d6f6e7181f30094339a49ab420bee380._comment create mode 100644 doc/news/sharebox_a_FUSE_filesystem_for_git-annex/comment_4_ab0d45c5058595a71656035c962c1143._comment create mode 100644 doc/news/sharebox_a_FUSE_filesystem_for_git-annex/comment_5_b92045c91d92da7db794aed2c67dde0d._comment create mode 100644 doc/news/sharebox_a_FUSE_filesystem_for_git-annex/comment_6_6f3b5d5a5781b3a570f46481dc2ebca2._comment create mode 100644 doc/news/sharebox_a_FUSE_filesystem_for_git-annex/comment_7_6202ae898f24b3e02bc343d0fd2ac35a._comment create mode 100644 doc/news/sharebox_a_FUSE_filesystem_for_git-annex/comment_8_884a0b9571544a95fad55cb5fc5963d8._comment create mode 100644 doc/news/sharebox_a_FUSE_filesystem_for_git-annex/comment_9_32b5d0fb9c328fbcd8105dfa31f032d3._comment create mode 100644 doc/news/version_10.20230926.mdwn create mode 100644 doc/news/version_10.20230926/comment_1_6edf64272975935ac4874d7e8dd44390._comment create mode 100644 doc/news/version_10.20230926/comment_2_b1bb446c48a4abc4df73354980f9f7cf._comment create mode 100644 doc/news/version_10.20231129.mdwn create mode 100644 doc/news/version_10.20231227.mdwn create mode 100644 doc/news/version_10.20240129.mdwn create mode 100644 doc/news/version_10.20240227.mdwn create mode 100644 doc/not.mdwn create mode 100644 doc/not/comment_10_d8fb9add7e98dadea2a39f8827f75447._comment create mode 100644 doc/not/comment_11_6c23aba5a9c341f2d5e2007e4b43f2ea._comment create mode 100644 doc/not/comment_12_a0ef1a045257659f0f8722e4987e0ccc._comment create mode 100644 doc/not/comment_13_c5c20576388f18daba3af913b44fb001._comment create mode 100644 doc/not/comment_14_837e3699014b73e8f2bd2a668eea9eef._comment create mode 100644 doc/not/comment_15_ac7396ca125abb80a42f9aaaf61a6ab4._comment create mode 100644 doc/not/comment_16_d2ae9613ad81508dbda6ed425d441ccb._comment create mode 100644 doc/not/comment_1_ab41bec1ccc884e71780cb9458439170._comment create mode 100644 doc/not/comment_2_0e19ff7deb5ed65f2bc685d4c516d816._comment create mode 100644 doc/not/comment_3_bab9584c41a25dda934ad230e3eb732d._comment create mode 100644 doc/not/comment_4_b2a0d5a45ab8ddd66c29dde9412d7a12._comment create mode 100644 doc/not/comment_5_f2829ecbe80a61aa9a8411d2403de69e._comment create mode 100644 doc/not/comment_6_547fc59b19ad66d7280c53a7f923ea08._comment create mode 100644 doc/not/comment_7_581e23cca0219711f8a4500a8d5d20fc._comment create mode 100644 doc/not/comment_8_5c61457f117de38ef487e5cc2780d554._comment create mode 100644 doc/not/comment_9_69aa47398a3c13ce64f146de985b727d._comment create mode 100644 doc/polls.mdwn create mode 100644 doc/polls/2013.mdwn create mode 100644 doc/preferred_content.mdwn create mode 100644 doc/preferred_content/comment_10_d9eb7d8efe731cbcdb456fc56935d886._comment create mode 100644 doc/preferred_content/comment_10_f0bce3c67f293eaba97b92f0942876b6._comment create mode 100644 doc/preferred_content/comment_11_fa7249ebbd7d5b499b486311c0a8f96d._comment create mode 100644 doc/preferred_content/comment_1_7d45e21dfb016e9ffa4715346dd0c1a6._comment create mode 100644 doc/preferred_content/comment_2_1ccd90b009245667ad59f4d29d2a3a37._comment create mode 100644 doc/preferred_content/comment_4_384025b5fa23a3f175985a081438149f._comment create mode 100644 doc/preferred_content/comment_4_6a9bc657bc7415f0e118357d8c6664c6._comment create mode 100644 doc/preferred_content/comment_5_f0a957e67297c4bb5a8778c11b3c9fd4._comment create mode 100644 doc/preferred_content/comment_6_b434c0e2aaa132020fd4a01551285376._comment create mode 100644 doc/preferred_content/comment_7_c4acaa237bf1a8512c5e8ea4cdbd11b9._comment create mode 100644 doc/preferred_content/comment_9_f82538be42428691d7cab60a7add2e74._comment create mode 100644 doc/preferred_content/standard_groups.mdwn create mode 100644 doc/preferred_content/standard_groups/comment_1_026e47e425d06c4b2580238b3187a379._comment create mode 100644 doc/preferred_content/standard_groups/comment_2_460bae34ba7c05357318a202b2932d25._comment create mode 100644 doc/preferred_content/standard_groups/comment_4_f5cd38886b58917fa3c417861fd10a10._comment create mode 100644 doc/preferred_content/standard_groups/comment_5_22434bd01b2b9ce62ddc9fb64b18f8b8._comment create mode 100644 doc/preferred_content/standard_groups/comment_5_9288dfe6b89885fe287db27cf941be64._comment create mode 100644 doc/preferred_content/standard_groups/comment_6_31fa43557e7585dec5dd105531b0fc10._comment create mode 100644 doc/preferred_content/standard_groups/comment_7_258ce07e607fa8eba80d142651393a95._comment create mode 100644 doc/preferred_content/standard_groups/comment_8_2d4737488451f1376500098919652808._comment create mode 100644 doc/privacy.mdwn create mode 100644 doc/profiling.mdwn create mode 100644 doc/profiling/comment_1_c1f99493f5e5c362d5c39f048280b11b._comment create mode 100644 doc/profiling/comment_2_f4d802a28b79905da0cb24af6cb65b0a._comment create mode 100644 doc/profiling/comment_3_1af4ac0d37c876912678522895c1656b._comment create mode 100644 doc/profiling/comment_4_1ca8d9765e6e3a18ae09df74bc390a00._comment create mode 100644 doc/profiling/comment_5_1ca8d9765e6e3a18ae09df74bc390a00._comment create mode 100644 doc/profiling/comment_6_ca4ac016a0fb0132fc5c746dfb6fefb3._comment create mode 100644 doc/profiling/comment_7_95f5afb616c7eba60473cdeb85a070b0._comment create mode 100644 doc/profiling/comment_8_951c1c047ef414268295626218474677._comment create mode 100644 doc/projects.mdwn create mode 100644 doc/projects/annextimelog.mdwn create mode 100644 doc/projects/dandi.mdwn create mode 100644 doc/projects/dandi/bugs-done/addurl__58___content-disposition_field_should_be_taken_as_is_without_obfuscation_.mdwn create mode 100644 doc/projects/dandi/bugs-done/addurl__58___content-disposition_field_should_be_taken_as_is_without_obfuscation_/comment_1_6450f220a0d4252ceafdd82f0cc24486._comment create mode 100644 doc/projects/dandi/bugs-done/addurl__58___content-disposition_field_should_be_taken_as_is_without_obfuscation_/comment_2_f787daed9b02af18b81f033cc2f84d0b._comment create mode 100644 doc/projects/dandi/bugs-done/addurl__58___content-disposition_field_should_be_taken_as_is_without_obfuscation_/comment_3_a1aeed36b8317144bc5df6fe7bcfd488._comment create mode 100644 doc/projects/dandi/bugs-done/addurl__58___content-disposition_field_should_be_taken_as_is_without_obfuscation_/comment_4_a32f922bb12d6cfd96c5116b20cff828._comment create mode 100644 doc/projects/dandi/bugs-done/addurl__58___content-disposition_field_should_be_taken_as_is_without_obfuscation_/comment_5_fad1fe49c2c545aeeb388176d2f5a893._comment create mode 100644 doc/projects/dandi/bugs-done/addurl_failure_has_empty_error-messages.mdwn create mode 100644 doc/projects/dandi/bugs-done/addurl_failure_has_empty_error-messages/comment_1_86b9cb50635c8ef8cf5918ab9a76d013._comment create mode 100644 doc/projects/dandi/bugs-done/addurl_failure_has_empty_error-messages/comment_2_2a151ccc0d9ef464df1452adc6ca449a._comment create mode 100644 doc/projects/dandi/bugs-done/addurl_failure_has_empty_error-messages/comment_3_1732be4c1d48acefcf3174cf8a7c8434._comment create mode 100644 doc/projects/dandi/bugs-done/addurl_failure_has_empty_error-messages/comment_4_74e37e96d01bfb8b9521000d5faa7e53._comment create mode 100644 doc/projects/dandi/bugs-done/addurl_failure_has_empty_error-messages/comment_5_1b87390e69204b42878930cc1614437e._comment create mode 100644 doc/projects/dandi/bugs-done/be_like_git_and_ask_for_credentials_if_404.mdwn create mode 100644 doc/projects/dandi/bugs-done/be_like_git_and_ask_for_credentials_if_404/comment_1_aa0be7b60156b1b8a036081b36d120e0._comment create mode 100644 doc/projects/dandi/bugs-done/be_like_git_and_ask_for_credentials_if_404/comment_2_0bbf38af3012493cee0ada5248f32525._comment create mode 100644 doc/projects/dandi/bugs-done/be_like_git_and_ask_for_credentials_if_404/comment_3_d36533f093ced2a0fa5aa74de492b69f._comment create mode 100644 doc/projects/dandi/bugs-done/be_like_git_and_ask_for_credentials_if_404/comment_4_7f8537172df5da79bdedd66bdc5cd231._comment create mode 100644 doc/projects/dandi/bugs-done/be_like_git_and_ask_for_credentials_if_404/comment_5_1993718701b7ad180ec683f80c87003f._comment create mode 100644 doc/projects/dandi/bugs-done/be_like_git_and_ask_for_credentials_if_404/comment_6_a84145c6537ac1a81db59cdc03bc625d._comment create mode 100644 doc/projects/dandi/bugs-done/be_like_git_and_ask_for_credentials_if_404/comment_7_3fd3445beec2a6cc6e8c71bd8e90cc83._comment create mode 100644 doc/projects/dandi/bugs-done/beegfs__58___init_tests_FAIL_resource_busy.mdwn create mode 100644 doc/projects/dandi/bugs-done/beegfs__58___init_tests_FAIL_resource_busy/comment_1_0c17cba36b1feddc956e0075f73536ed._comment create mode 100644 doc/projects/dandi/bugs-done/beegfs__58___init_tests_FAIL_resource_busy/comment_2_33143a5f2467c58201496c8f59532b53._comment create mode 100644 doc/projects/dandi/bugs-done/beegfs__58___init_tests_FAIL_resource_busy/comment_3_1241df23fa4861554cf9a5d65235c8a1._comment create mode 100644 doc/projects/dandi/bugs-done/beegfs__58___init_tests_FAIL_resource_busy/comment_4_8c64d10dbfcd8189465affbf5329c63e._comment create mode 100644 doc/projects/dandi/bugs-done/fsck_--key_without___34__chunking__34___information_in_git-annex_does_not_try_chunks.mdwn create mode 100644 doc/projects/dandi/bugs-done/fsck_--key_without___34__chunking__34___information_in_git-annex_does_not_try_chunks/comment_1_5d11bb90105b4d0cf14f85e6d8795023._comment create mode 100644 doc/projects/dandi/bugs-done/fsck_--key_without___34__chunking__34___information_in_git-annex_does_not_try_chunks/comment_2_f48e4d3571a8fc2b45fbaad7a9f8fb60._comment create mode 100644 doc/projects/dandi/bugs-done/fsck_--key_without___34__chunking__34___information_in_git-annex_does_not_try_chunks/comment_3_ff3bcc2cce6e0cbbeef10a187541f5d3._comment create mode 100644 doc/projects/dandi/bugs-done/git-lfs_remote_URL_is_not_recorded__63__.mdwn create mode 100644 doc/projects/dandi/bugs-done/git-lfs_remote_URL_is_not_recorded__63__/comment_1_e2bcd52490fc04850738b72255692e32._comment create mode 100644 doc/projects/dandi/bugs-done/impossible__40____63____41___to_continuously_re-import_a_directory_while_keeping_original_files_in_place.mdwn create mode 100644 doc/projects/dandi/bugs-done/impossible__40____63____41___to_continuously_re-import_a_directory_while_keeping_original_files_in_place/comment_1_d385d0fffdd6ac18f38828f805e4daff._comment create mode 100644 doc/projects/dandi/bugs-done/impossible__40____63____41___to_continuously_re-import_a_directory_while_keeping_original_files_in_place/comment_2_0c6006b53f97515c1ed31d8d4ab464cc._comment create mode 100644 doc/projects/dandi/bugs-done/impossible__40____63____41___to_continuously_re-import_a_directory_while_keeping_original_files_in_place/comment_3_300f74178ef17e2e549fd7a04a262428._comment create mode 100644 doc/projects/dandi/bugs-done/initremote_type__61__git_is_not_working_for_unkn_reason.mdwn create mode 100644 doc/projects/dandi/bugs-done/initremote_type__61__git_is_not_working_for_unkn_reason/comment_1_182b9cc42f7287c8b022422404fc74b7._comment create mode 100644 doc/projects/dandi/bugs-done/initremote_type__61__git_is_not_working_for_unkn_reason/comment_2_0baadee49b21451a99a38306a98e3e56._comment create mode 100644 doc/projects/dandi/bugs-done/initremote_type__61__git_is_not_working_for_unkn_reason/comment_2_d51bb87dc5ed0f4ede808c5a9594240d._comment create mode 100644 doc/projects/dandi/bugs-done/initremote_type__61__git_is_not_working_for_unkn_reason/comment_4_ea413a9dec0243688cbfcaf8a5998ac5._comment create mode 100644 doc/projects/dandi/bugs-done/leaks_git_config_error_message_upon_inability_to_read_downloaded___34__config__34___file.mdwn create mode 100644 doc/projects/dandi/bugs-done/leaks_git_config_error_message_upon_inability_to_read_downloaded___34__config__34___file/comment_1_08af564539efb1b0d85905c0aa862c43._comment create mode 100644 doc/projects/dandi/bugs-done/leaks_git_config_error_message_upon_inability_to_read_downloaded___34__config__34___file/comment_2_9a63b2918f5621efbfe8cdb33b23ff21._comment create mode 100644 doc/projects/dandi/bugs-done/leaks_git_config_error_message_upon_inability_to_read_downloaded___34__config__34___file/comment_3_3df07b6c8ef25ad96ff4f198931347ad._comment create mode 100644 doc/projects/dandi/bugs-done/leaks_git_config_error_message_upon_inability_to_read_downloaded___34__config__34___file/comment_4_051d22f0bd0eb601476cd3b74a9b98b8._comment create mode 100644 doc/projects/dandi/bugs-done/many___40__2x_jobs__63____41___sleeping__hash-object__processes__63__.mdwn create mode 100644 doc/projects/dandi/bugs-done/many___40__2x_jobs__63____41___sleeping__hash-object__processes__63__/comment_1_c01d8d2e4aa2cb0d064ab223e615a75c._comment create mode 100644 doc/projects/dandi/bugs-done/metadata_cmd._vs._--json-error-messages.mdwn create mode 100644 doc/projects/dandi/bugs-done/metadata_cmd._vs._--json-error-messages/comment_1_198df45c72d0c9b4997d1342ffb666ca._comment create mode 100644 doc/projects/dandi/bugs-done/move.log__58___openFile__58___resource_busy___40__file_is_locked__41__.mdwn create mode 100644 doc/projects/dandi/bugs-done/move.log__58___openFile__58___resource_busy___40__file_is_locked__41__/comment_1_14d5ba72397406620ac0a9fb05f2862d._comment create mode 100644 doc/projects/dandi/bugs-done/move.log__58___openFile__58___resource_busy___40__file_is_locked__41__/comment_2_6216c1eb6991cec787333284463fcc9d._comment create mode 100644 doc/projects/dandi/bugs-done/reports_file___34__modified__34___whenever_it_is_not.mdwn create mode 100644 doc/projects/dandi/bugs-done/reports_file___34__modified__34___whenever_it_is_not/comment_10_43f1eec4aa317ff3b1a4fc18def96c6f._comment create mode 100644 doc/projects/dandi/bugs-done/reports_file___34__modified__34___whenever_it_is_not/comment_11_f8a54670d8eaf00624e9b8f85e803864._comment create mode 100644 doc/projects/dandi/bugs-done/reports_file___34__modified__34___whenever_it_is_not/comment_12_5cdddca4ca03216b68d443eeb49af581._comment create mode 100644 doc/projects/dandi/bugs-done/reports_file___34__modified__34___whenever_it_is_not/comment_12_68a79183b04b99d4b00b363e3cbe3f3c._comment create mode 100644 doc/projects/dandi/bugs-done/reports_file___34__modified__34___whenever_it_is_not/comment_13_5c03731700b2a025755fb06c9a96f331._comment create mode 100644 doc/projects/dandi/bugs-done/reports_file___34__modified__34___whenever_it_is_not/comment_15_df08c2530b890544d5eb2df792c8fd4b._comment create mode 100644 doc/projects/dandi/bugs-done/reports_file___34__modified__34___whenever_it_is_not/comment_16_4b8a360c38dfa4c8d22e3a96fbace0e5._comment create mode 100644 doc/projects/dandi/bugs-done/reports_file___34__modified__34___whenever_it_is_not/comment_1_5dead4bf9fe9a9c7627843c91613caf5._comment create mode 100644 doc/projects/dandi/bugs-done/reports_file___34__modified__34___whenever_it_is_not/comment_2_49e075aaa89e60fe1d35513dd4d4d755._comment create mode 100644 doc/projects/dandi/bugs-done/reports_file___34__modified__34___whenever_it_is_not/comment_3_2a08321045a8ede5c3b5a690232020b3._comment create mode 100644 doc/projects/dandi/bugs-done/reports_file___34__modified__34___whenever_it_is_not/comment_4_ac9c166c2b0c3aad8391abb56654ecf2._comment create mode 100644 doc/projects/dandi/bugs-done/reports_file___34__modified__34___whenever_it_is_not/comment_5_7d339e9a04a7c303949523b235a046ec._comment create mode 100644 doc/projects/dandi/bugs-done/reports_file___34__modified__34___whenever_it_is_not/comment_6_48819ddcb8713087c78db8941e4c1151._comment create mode 100644 doc/projects/dandi/bugs-done/reports_file___34__modified__34___whenever_it_is_not/comment_7_3186ec45f20c4d768c7682e1d42fa24c._comment create mode 100644 doc/projects/dandi/bugs-done/reports_file___34__modified__34___whenever_it_is_not/comment_8_927028d040b0e24d772b667324b1a5e1._comment create mode 100644 doc/projects/dandi/bugs-done/reports_file___34__modified__34___whenever_it_is_not/comment_9_64ba2901154b629a9697b427f3ad92e2._comment create mode 100644 doc/projects/dandi/bugs-done/standalone_needs_more_depends_-_libgcc-s1__63__.mdwn create mode 100644 doc/projects/dandi/bugs-done/standalone_needs_more_depends_-_libgcc-s1__63__/comment_1_93f4c8f86c58da7988bf1550867f8945._comment create mode 100644 doc/projects/dandi/done.mdwn create mode 100644 doc/projects/dandi/potential.mdwn create mode 100644 doc/projects/datalad.mdwn create mode 100644 doc/projects/datalad/bugs-done/--debug_is_not_in_effect_if_precedes_-c.mdwn create mode 100644 doc/projects/datalad/bugs-done/--debug_is_not_in_effect_if_precedes_-c/comment_1_0f66414e629e31c2de868f8b7eeb7af5._comment create mode 100644 doc/projects/datalad/bugs-done/1_test_failure_under_conda_on_Windows_10__58___prop__95__view__95__roundtrips.mdwn create mode 100644 doc/projects/datalad/bugs-done/1_test_failure_under_conda_on_Windows_10__58___prop__95__view__95__roundtrips/comment_1_3a2be0a1cd74c7dba3b07e1300ce2a30._comment create mode 100644 doc/projects/datalad/bugs-done/1_test_failure_under_conda_on_Windows_10__58___prop__95__view__95__roundtrips/comment_2_1945040bcdf209b9a0faecd4a77e0f35._comment create mode 100644 doc/projects/datalad/bugs-done/1_test_failure_under_conda_on_Windows_10__58___prop__95__view__95__roundtrips/comment_3_06dd9606225cf881f7681fc27fb4833d._comment create mode 100644 doc/projects/datalad/bugs-done/1_test_failure_under_conda_on_Windows_10__58___prop__95__view__95__roundtrips/comment_4_0c6b8a3b0a6fbd700b3c8934bfec199f._comment create mode 100644 doc/projects/datalad/bugs-done/1_test_failure_under_conda_on_Windows_10__58___prop__95__view__95__roundtrips/comment_4_c2f248745388b508337c5097baaa1979._comment create mode 100644 doc/projects/datalad/bugs-done/2_mac_crippled_FS__58___Unable_to_remove_all_write.mdwn create mode 100644 doc/projects/datalad/bugs-done/2_mac_crippled_FS__58___Unable_to_remove_all_write/comment_1_22a1f4b025a6046e4d11f90590a6e4bd._comment create mode 100644 doc/projects/datalad/bugs-done/2_mac_crippled_FS__58___Unable_to_remove_all_write/comment_2_71e985981c14780cc172a07beb0e9854._comment create mode 100644 doc/projects/datalad/bugs-done/2_mac_crippled_FS__58___Unable_to_remove_all_write/comment_3_ac3fe75560c020015ecca615cf0e7abe._comment create mode 100644 doc/projects/datalad/bugs-done/2_mac_crippled_FS__58___Unable_to_remove_all_write/comment_4_3bdf724f5e9203424b7cb5630fb49a46._comment create mode 100644 doc/projects/datalad/bugs-done/2_mac_crippled_FS__58___Unable_to_remove_all_write/comment_5_46acb87752c0f0574d8f3b91fdfb1697._comment create mode 100644 doc/projects/datalad/bugs-done/2_ssh_connection_prompts_for_password.mdwn create mode 100644 doc/projects/datalad/bugs-done/2_ssh_connection_prompts_for_password/comment_1_f78784304b46b77d334f74c827d0889b._comment create mode 100644 doc/projects/datalad/bugs-done/2_ssh_connection_prompts_for_password/comment_2_62a5cc7cd6b8b06850fb32b76121ad82._comment create mode 100644 doc/projects/datalad/bugs-done/2_ssh_connection_prompts_for_password/comment_3_f621e615a745910b4e28f91b27132c0e._comment create mode 100644 doc/projects/datalad/bugs-done/2_ssh_connection_prompts_for_password/comment_4_43e5a90d6215b414f4e3357ea91af663._comment create mode 100644 doc/projects/datalad/bugs-done/2_ssh_connection_prompts_for_password/comment_5_27b5669cecba4863ce296049804e82af._comment create mode 100644 doc/projects/datalad/bugs-done/A_case_where_file_tracked_by_git_unexpectedly_becomes_annex_pointer_file.mdwn create mode 100644 doc/projects/datalad/bugs-done/A_case_where_file_tracked_by_git_unexpectedly_becomes_annex_pointer_file/comment_1_ea82bf47752807531870651653160f1c._comment create mode 100644 doc/projects/datalad/bugs-done/A_case_where_file_tracked_by_git_unexpectedly_becomes_annex_pointer_file/comment_2_27faf0663265bd3855e98f7f1f382bdd._comment create mode 100644 doc/projects/datalad/bugs-done/A_case_where_file_tracked_by_git_unexpectedly_becomes_annex_pointer_file/comment_3_37fb6d6361068f57c2068270ceb72ac0._comment create mode 100644 doc/projects/datalad/bugs-done/A_case_where_file_tracked_by_git_unexpectedly_becomes_annex_pointer_file/comment_4_4c3b233aa1c6b0b6c0b0d7519b5877a1._comment create mode 100644 doc/projects/datalad/bugs-done/A_case_where_file_tracked_by_git_unexpectedly_becomes_annex_pointer_file/comment_5_d1d23d3884fcbef3c8715ebdf8791f01._comment create mode 100644 doc/projects/datalad/bugs-done/A_case_where_file_tracked_by_git_unexpectedly_becomes_annex_pointer_file/comment_6_b713bf610c4f4d9c2463b61721bce406._comment create mode 100644 doc/projects/datalad/bugs-done/Buggy_external_special_remote_stalls_after_7245a9e.mdwn create mode 100644 doc/projects/datalad/bugs-done/Buggy_external_special_remote_stalls_after_7245a9e/comment_1_c0a98d1391d4426182d3d43651ad67e5._comment create mode 100644 doc/projects/datalad/bugs-done/Buggy_external_special_remote_stalls_after_7245a9e/comment_2_952d0856b79cdf1637a84c74f396d9e8._comment create mode 100644 doc/projects/datalad/bugs-done/Buggy_external_special_remote_stalls_after_7245a9e/comment_3_ed02f45c96f7eedf2c15add673ca84f2._comment create mode 100644 doc/projects/datalad/bugs-done/Buggy_external_special_remote_stalls_after_7245a9e/comment_4_639337906e441523a610c7080f215aa8._comment create mode 100644 doc/projects/datalad/bugs-done/Buggy_external_special_remote_stalls_after_7245a9e/comment_4_746ffcf575f91bc3d156b279bcdf8ae2._comment create mode 100644 doc/projects/datalad/bugs-done/Buggy_external_special_remote_stalls_after_7245a9e/comment_4_e4f249bc78e870c91b3fcbf34596a9ed._comment create mode 100644 doc/projects/datalad/bugs-done/Buggy_external_special_remote_stalls_after_7245a9e/comment_7_a9b594ecd43c0d2f35029c934ba7e143._comment create mode 100644 doc/projects/datalad/bugs-done/Buggy_external_special_remote_stalls_after_7245a9e/comment_8_9fdcef0d78d04ce05765693fe296bb3d._comment create mode 100644 doc/projects/datalad/bugs-done/Build__47__OSXMkLibs.hs_does_not_resolve___64__loader__95__path.mdwn create mode 100644 doc/projects/datalad/bugs-done/Build__47__OSXMkLibs.hs_does_not_resolve___64__loader__95__path/comment_1_138124e29ad5a27751fcd133e9dbf6df._comment create mode 100644 doc/projects/datalad/bugs-done/Build__47__OSXMkLibs.hs_does_not_resolve___64__loader__95__path/comment_2_4f68ed79045c93831cb8b41888057f29._comment create mode 100644 doc/projects/datalad/bugs-done/Build__47__OSXMkLibs.hs_does_not_resolve___64__loader__95__path/comment_3_72d271ac0612e13b3ceaf736e9e50fd9._comment create mode 100644 doc/projects/datalad/bugs-done/Build__47__OSXMkLibs.hs_does_not_resolve___64__loader__95__path/comment_4_69ae4b847873d039d790cd2b1cfa97c0._comment create mode 100644 doc/projects/datalad/bugs-done/Build__47__OSXMkLibs.hs_does_not_resolve___64__loader__95__path/comment_5_ca662cade7153349ce644cd93c379815._comment create mode 100644 doc/projects/datalad/bugs-done/Build__47__OSXMkLibs.hs_does_not_resolve___64__loader__95__path/comment_6_c75c9bcbcc8e68c60323dfde9c0248a7._comment create mode 100644 doc/projects/datalad/bugs-done/Build_failing_because_MonadFail_is_not_in_scope.mdwn create mode 100644 doc/projects/datalad/bugs-done/Build_failing_because_MonadFail_is_not_in_scope/comment_1_3ebe2e53fd8e8ce673267ac2715d964c._comment create mode 100644 doc/projects/datalad/bugs-done/Build_failing_on_Windows_since_ef3ab0769.mdwn create mode 100644 doc/projects/datalad/bugs-done/Build_fails_on_Windows_as_of_commit_0a9a9c44e.mdwn create mode 100644 doc/projects/datalad/bugs-done/Build_fails_on_Windows_as_of_commit_4b1b9d7a8.mdwn create mode 100644 doc/projects/datalad/bugs-done/Build_fails_on_Windows_as_of_commit_a706708d1.mdwn create mode 100644 doc/projects/datalad/bugs-done/Build_fails_on_Windows_as_of_commit_ddd7d1d11.mdwn create mode 100644 doc/projects/datalad/bugs-done/Change_to_annex.largefiles_leaves_repo_modified.mdwn create mode 100644 doc/projects/datalad/bugs-done/Change_to_annex.largefiles_leaves_repo_modified/comment_1_7cd205f8f5560420d117d5a2bde48532._comment create mode 100644 doc/projects/datalad/bugs-done/Change_to_annex.largefiles_leaves_repo_modified/comment_2_725d46358366ea79e375fd47beac6acd._comment create mode 100644 doc/projects/datalad/bugs-done/Deleted_files_not_considered_with_wanted__61____34__anything__34__.mdwn create mode 100644 doc/projects/datalad/bugs-done/Deleted_files_not_considered_with_wanted__61____34__anything__34__/comment_1_03eebb6527c364552b8f81c12616e926._comment create mode 100644 doc/projects/datalad/bugs-done/Deleted_files_not_considered_with_wanted__61____34__anything__34__/comment_2_fded8e94841cb23a9d2715b00f63ae98._comment create mode 100644 doc/projects/datalad/bugs-done/Exclude_submodules_from_export_to_WEBDAV.mdwn create mode 100644 doc/projects/datalad/bugs-done/Exclude_submodules_from_export_to_WEBDAV/comment_1_43cde828704e54cad344c066ba1e2821._comment create mode 100644 doc/projects/datalad/bugs-done/Exclude_submodules_from_export_to_WEBDAV/comment_2_f1d89a826b5a2847328f6eec36b9f452._comment create mode 100644 doc/projects/datalad/bugs-done/Exclude_submodules_from_export_to_WEBDAV/comment_3_38d687454c618c3321ad6d9b3c4e7a38._comment create mode 100644 doc/projects/datalad/bugs-done/Exclude_submodules_from_export_to_WEBDAV/comment_4_8f31a065f5f97285adeb3f9614c1f3c9._comment create mode 100644 doc/projects/datalad/bugs-done/FTBFS__58___Couldn__39__t_match_type___96__Annex.AnnexState__39___..._.mdwn create mode 100644 doc/projects/datalad/bugs-done/Git_LFS_as_a_special_remote_on_GitLab_not_working.mdwn create mode 100644 doc/projects/datalad/bugs-done/Git_LFS_as_a_special_remote_on_GitLab_not_working/comment_1_e821d8666ace3a760a2a335220844b29._comment create mode 100644 doc/projects/datalad/bugs-done/Git_LFS_as_a_special_remote_on_GitLab_not_working/comment_2_3cdbe5b9b7150f9ad9fd5d7af01b247b._comment create mode 100644 doc/projects/datalad/bugs-done/Git_LFS_as_a_special_remote_on_GitLab_not_working/comment_3_1dcf8d6a37bec46a7e7c2d9a65becf28._comment create mode 100644 doc/projects/datalad/bugs-done/Guard_against_previously_annexed_dotfiles_being_converted_to_git_files__63__.mdwn create mode 100644 doc/projects/datalad/bugs-done/Guard_against_previously_annexed_dotfiles_being_converted_to_git_files__63__/comment_1_e9f5fdf1078c87718fb6ca2559323b1e._comment create mode 100644 doc/projects/datalad/bugs-done/Guard_against_previously_annexed_dotfiles_being_converted_to_git_files__63__/comment_2_5d0e1468f7ab2e8cd42452812d9ce49b._comment create mode 100644 doc/projects/datalad/bugs-done/Guard_against_previously_annexed_dotfiles_being_converted_to_git_files__63__/comment_3_a9837edeacdf55c74d8fed2b8d7bf1f9._comment create mode 100644 doc/projects/datalad/bugs-done/JSON_results_for___96__export__96___have_file__58__null_property.mdwn create mode 100644 doc/projects/datalad/bugs-done/JSON_results_for___96__export__96___have_file__58__null_property/comment_1_bf743f047b8063b8ecbd8c87d12fa475._comment create mode 100644 doc/projects/datalad/bugs-done/JSON_results_for___96__export__96___have_file__58__null_property/comment_2_d6e28d84238cb79c1df927da491f50db._comment create mode 100644 doc/projects/datalad/bugs-done/OSX__58___addurl_--batch_--json_spits_out_shortened_output_string__dies_off_with_4.mdwn create mode 100644 doc/projects/datalad/bugs-done/Patch_for_compilation_errors_on_Windows.mdwn create mode 100644 doc/projects/datalad/bugs-done/Patch_for_compilation_errors_on_Windows/comment_1_eb8d464da14af1fead372b4b61b20f17._comment create mode 100644 doc/projects/datalad/bugs-done/R__47__O_permissions_are_stalking_me_somehow.mdwn create mode 100644 doc/projects/datalad/bugs-done/R__47__O_permissions_are_stalking_me_somehow/comment_1_9e4ba1e03a89c219c5e62280757311ba._comment create mode 100644 doc/projects/datalad/bugs-done/Recent_hang_with_rsync_remote_with_older_systems___40__Xenial__44___Jessie__41__.mdwn create mode 100644 doc/projects/datalad/bugs-done/Recent_hang_with_rsync_remote_with_older_systems___40__Xenial__44___Jessie__41__/comment_10_d9dc3550012a618ba674119dd1163642._comment create mode 100644 doc/projects/datalad/bugs-done/Recent_hang_with_rsync_remote_with_older_systems___40__Xenial__44___Jessie__41__/comment_11_5dc1d7c54fc4768849d39affac51fcae._comment create mode 100644 doc/projects/datalad/bugs-done/Recent_hang_with_rsync_remote_with_older_systems___40__Xenial__44___Jessie__41__/comment_12_7cb4c4e1bc100e8f3241ece74ce463e3._comment create mode 100644 doc/projects/datalad/bugs-done/Recent_hang_with_rsync_remote_with_older_systems___40__Xenial__44___Jessie__41__/comment_13_a1bce716987b0d8d00a4a9aa07e9ac65._comment create mode 100644 doc/projects/datalad/bugs-done/Recent_hang_with_rsync_remote_with_older_systems___40__Xenial__44___Jessie__41__/comment_13_dd51471ec6a8f380663c62d6f9edb176._comment create mode 100644 doc/projects/datalad/bugs-done/Recent_hang_with_rsync_remote_with_older_systems___40__Xenial__44___Jessie__41__/comment_15_93e2dd2b30cdeddd5e273eae78a422e0._comment create mode 100644 doc/projects/datalad/bugs-done/Recent_hang_with_rsync_remote_with_older_systems___40__Xenial__44___Jessie__41__/comment_16_b2d1550e20e8c4cc07dbd0ebba64c603._comment create mode 100644 doc/projects/datalad/bugs-done/Recent_hang_with_rsync_remote_with_older_systems___40__Xenial__44___Jessie__41__/comment_1_5274e7f715ef060383046e8f5da08164._comment create mode 100644 doc/projects/datalad/bugs-done/Recent_hang_with_rsync_remote_with_older_systems___40__Xenial__44___Jessie__41__/comment_2_8976d014def1910f5140b1e5cdd37fb0._comment create mode 100644 doc/projects/datalad/bugs-done/Recent_hang_with_rsync_remote_with_older_systems___40__Xenial__44___Jessie__41__/comment_3_efccd6c930ea37f782cbd3b029f4fa71._comment create mode 100644 doc/projects/datalad/bugs-done/Recent_hang_with_rsync_remote_with_older_systems___40__Xenial__44___Jessie__41__/comment_4_282d1a5a2942820785b9cdacc1126545._comment create mode 100644 doc/projects/datalad/bugs-done/Recent_hang_with_rsync_remote_with_older_systems___40__Xenial__44___Jessie__41__/comment_5_34d7c2fb1b46f61e348a92f86a3d732c._comment create mode 100644 doc/projects/datalad/bugs-done/Recent_hang_with_rsync_remote_with_older_systems___40__Xenial__44___Jessie__41__/comment_6_279dfc4d611e2dbcb2523b9756f13a9d._comment create mode 100644 doc/projects/datalad/bugs-done/Recent_hang_with_rsync_remote_with_older_systems___40__Xenial__44___Jessie__41__/comment_7_815bf1b8985a49a0fafbcddc7c96f9d6._comment create mode 100644 doc/projects/datalad/bugs-done/Recent_hang_with_rsync_remote_with_older_systems___40__Xenial__44___Jessie__41__/comment_8_6f5e18dec962aba505ed15bed328f11f._comment create mode 100644 doc/projects/datalad/bugs-done/Recent_hang_with_rsync_remote_with_older_systems___40__Xenial__44___Jessie__41__/comment_9_bcc64259541b35eed34a63f4955884e5._comment create mode 100644 doc/projects/datalad/bugs-done/Repo_contains_invalid_Windows_paths_again.mdwn create mode 100644 doc/projects/datalad/bugs-done/SSH-based_git-annex-init_hang_on_older_systems___40__Xenial__44___Jessie__41__.mdwn create mode 100644 doc/projects/datalad/bugs-done/SSH-based_git-annex-init_hang_on_older_systems___40__Xenial__44___Jessie__41__/comment_1_ce71734986fe4c86a43a5805628dd3de._comment create mode 100644 doc/projects/datalad/bugs-done/SSH-based_git-annex-init_hang_on_older_systems___40__Xenial__44___Jessie__41__/comment_2_8e7487f2f093e79dcce0be34274d7fa2._comment create mode 100644 doc/projects/datalad/bugs-done/SSH-based_git-annex-init_hang_on_older_systems___40__Xenial__44___Jessie__41__/comment_3_4ddca3bdc573ed3c7f6d846c4309ac2e._comment create mode 100644 doc/projects/datalad/bugs-done/SSH-based_git-annex-init_hang_on_older_systems___40__Xenial__44___Jessie__41__/comment_4_c480f7fad76759742bbdc4837d8c0c36._comment create mode 100644 doc/projects/datalad/bugs-done/SSH-based_git-annex-init_hang_on_older_systems___40__Xenial__44___Jessie__41__/comment_5_8a5b1e1cb4482fb787bde97a6066de59._comment create mode 100644 doc/projects/datalad/bugs-done/Some_calls_to_git_repeat_--config_values.mdwn create mode 100644 doc/projects/datalad/bugs-done/Submodule_deletion_not_synced_from_adjusted_branch.mdwn create mode 100644 doc/projects/datalad/bugs-done/Submodule_deletion_not_synced_from_adjusted_branch/comment_1_6473d7eceae5141e36c87156044b9d06._comment create mode 100644 doc/projects/datalad/bugs-done/Sync_of_adjusted_branch_does_not_propagate_changed_submodule_commit.mdwn create mode 100644 doc/projects/datalad/bugs-done/Sync_of_adjusted_branch_does_not_propagate_changed_submodule_commit/comment_1_5b56b989145a8ef6a6203e4df38e2288._comment create mode 100644 doc/projects/datalad/bugs-done/Sync_of_adjusted_branch_does_not_propagate_changed_submodule_commit/comment_2_e37aaf6d440b6c2a7567b3df1c344ff7._comment create mode 100644 doc/projects/datalad/bugs-done/Sync_of_adjusted_branch_does_not_propagate_changed_submodule_commit/comment_3_9e1cc48bb2125cc8fd375e3ff2f3310f._comment create mode 100644 doc/projects/datalad/bugs-done/Syntax_error_in_comit_f29d49d47.mdwn create mode 100644 doc/projects/datalad/bugs-done/Tests_failing_on_Windows.mdwn create mode 100644 doc/projects/datalad/bugs-done/Tests_failing_on_Windows/comment_1_69e29a9c9b6690684ce1f4f8df3f3a2a._comment create mode 100644 doc/projects/datalad/bugs-done/Tests_failing_on_Windows/comment_2_e95cf7f151ba51fd4324dc212afd5467._comment create mode 100644 doc/projects/datalad/bugs-done/Too_difficult_if_not_impossible_to_explicitly_add__47__keep_file_under_git___40__not_annex__41___in_v6_without_employing_.gitattributes.mdwn create mode 100644 doc/projects/datalad/bugs-done/Too_difficult_if_not_impossible_to_explicitly_add__47__keep_file_under_git___40__not_annex__41___in_v6_without_employing_.gitattributes/comment_10_5eb0622b326a8094b06f5f0de627e288._comment create mode 100644 doc/projects/datalad/bugs-done/Too_difficult_if_not_impossible_to_explicitly_add__47__keep_file_under_git___40__not_annex__41___in_v6_without_employing_.gitattributes/comment_11_a3b5e2047185bbd3972ada07ddb79172._comment create mode 100644 doc/projects/datalad/bugs-done/Too_difficult_if_not_impossible_to_explicitly_add__47__keep_file_under_git___40__not_annex__41___in_v6_without_employing_.gitattributes/comment_12_db64ae67b8aa974bd6d00aad005058ac._comment create mode 100644 doc/projects/datalad/bugs-done/Too_difficult_if_not_impossible_to_explicitly_add__47__keep_file_under_git___40__not_annex__41___in_v6_without_employing_.gitattributes/comment_13_5f11262639d60ef63a44de09b191e0b6._comment create mode 100644 doc/projects/datalad/bugs-done/Too_difficult_if_not_impossible_to_explicitly_add__47__keep_file_under_git___40__not_annex__41___in_v6_without_employing_.gitattributes/comment_14_cfab68df294195498fe71daa376e9f68._comment create mode 100644 doc/projects/datalad/bugs-done/Too_difficult_if_not_impossible_to_explicitly_add__47__keep_file_under_git___40__not_annex__41___in_v6_without_employing_.gitattributes/comment_15_e42f03c3e880dcd71d57bc2f6292d95d._comment create mode 100644 doc/projects/datalad/bugs-done/Too_difficult_if_not_impossible_to_explicitly_add__47__keep_file_under_git___40__not_annex__41___in_v6_without_employing_.gitattributes/comment_1_045f90b5693de55958c6ad1b825cbc9e._comment create mode 100644 doc/projects/datalad/bugs-done/Too_difficult_if_not_impossible_to_explicitly_add__47__keep_file_under_git___40__not_annex__41___in_v6_without_employing_.gitattributes/comment_2_ead7e348547da0598a82be8d064c0c08._comment create mode 100644 doc/projects/datalad/bugs-done/Too_difficult_if_not_impossible_to_explicitly_add__47__keep_file_under_git___40__not_annex__41___in_v6_without_employing_.gitattributes/comment_3_ff0746f08600fb9729b8e1773317a52d._comment create mode 100644 doc/projects/datalad/bugs-done/Too_difficult_if_not_impossible_to_explicitly_add__47__keep_file_under_git___40__not_annex__41___in_v6_without_employing_.gitattributes/comment_4_598622df322c56da71320d1b15e0348f._comment create mode 100644 doc/projects/datalad/bugs-done/Too_difficult_if_not_impossible_to_explicitly_add__47__keep_file_under_git___40__not_annex__41___in_v6_without_employing_.gitattributes/comment_5_9707d9dda7ebb2c94c71f1ea2f99064d._comment create mode 100644 doc/projects/datalad/bugs-done/Too_difficult_if_not_impossible_to_explicitly_add__47__keep_file_under_git___40__not_annex__41___in_v6_without_employing_.gitattributes/comment_6_56c8ddb604b54b8a5cfd077225971582._comment create mode 100644 doc/projects/datalad/bugs-done/Too_difficult_if_not_impossible_to_explicitly_add__47__keep_file_under_git___40__not_annex__41___in_v6_without_employing_.gitattributes/comment_7_6b2a763f3d07f0cdc035008638e08194._comment create mode 100644 doc/projects/datalad/bugs-done/Too_difficult_if_not_impossible_to_explicitly_add__47__keep_file_under_git___40__not_annex__41___in_v6_without_employing_.gitattributes/comment_8_5aa63bf0d8e4145974702a86b36bd435._comment create mode 100644 doc/projects/datalad/bugs-done/Too_difficult_if_not_impossible_to_explicitly_add__47__keep_file_under_git___40__not_annex__41___in_v6_without_employing_.gitattributes/comment_9_5a22839b8dc11965a879dd2654bd5d60._comment create mode 100644 doc/projects/datalad/bugs-done/WEBDAV_export_has_wrong_subdirectory_content.mdwn create mode 100644 doc/projects/datalad/bugs-done/WEBDAV_export_has_wrong_subdirectory_content/comment_10_0598b1ccc9d7002d6b7fa08f29f8edc9._comment create mode 100644 doc/projects/datalad/bugs-done/WEBDAV_export_has_wrong_subdirectory_content/comment_11_03ea7014854be4fa9f40a8815616b81d._comment create mode 100644 doc/projects/datalad/bugs-done/WEBDAV_export_has_wrong_subdirectory_content/comment_1_e4b3597a6be74b10f03af3cdbc9ab4b2._comment create mode 100644 doc/projects/datalad/bugs-done/WEBDAV_export_has_wrong_subdirectory_content/comment_2_aa11bebaa9ca341434fbc1382bbbbee4._comment create mode 100644 doc/projects/datalad/bugs-done/WEBDAV_export_has_wrong_subdirectory_content/comment_3_22290ea94d5e547a199411d696657708._comment create mode 100644 doc/projects/datalad/bugs-done/WEBDAV_export_has_wrong_subdirectory_content/comment_4_b6c36a9f466cbd0a09ae83ada7bc728c._comment create mode 100644 doc/projects/datalad/bugs-done/WEBDAV_export_has_wrong_subdirectory_content/comment_5_201fb2f59e3143145f9f0b07a5f3ac30._comment create mode 100644 doc/projects/datalad/bugs-done/WEBDAV_export_has_wrong_subdirectory_content/comment_6_e1051429a09bf5d7e5887d0eb378d72f._comment create mode 100644 doc/projects/datalad/bugs-done/WEBDAV_export_has_wrong_subdirectory_content/comment_7_e50ed095c335c616b8e27fe20dae00d9._comment create mode 100644 doc/projects/datalad/bugs-done/WEBDAV_export_has_wrong_subdirectory_content/comment_8_c1f5a71c217b965ece29fe8d9a01e6b2._comment create mode 100644 doc/projects/datalad/bugs-done/WEBDAV_export_has_wrong_subdirectory_content/comment_9_b25f2c71675f4d8f6a6e22bb5cd98b23._comment create mode 100644 doc/projects/datalad/bugs-done/W__58__prop__95__relPathDirToFileAbs__95__basics_started_to_fail.mdwn create mode 100644 doc/projects/datalad/bugs-done/Windows__58___drop_claims_that___34__content_is_locked__34__.mdwn create mode 100644 doc/projects/datalad/bugs-done/Windows__58___drop_claims_that___34__content_is_locked__34__/comment_1_ddf822288da76a16eaaade2da51c5b43._comment create mode 100644 doc/projects/datalad/bugs-done/Windows__58___drop_claims_that___34__content_is_locked__34__/comment_2_00fa93b8a064bd1e6ca6c35b1a10d5aa._comment create mode 100644 doc/projects/datalad/bugs-done/Windows__58___drop_claims_that___34__content_is_locked__34__/comment_3_26e80ddbcb3f0c149e6565552558f6c7._comment create mode 100644 doc/projects/datalad/bugs-done/Windows__58___drop_claims_that___34__content_is_locked__34__/comment_4_5f9a1e4468a4531a7676d1b749ba0b9e._comment create mode 100644 doc/projects/datalad/bugs-done/Windows__58___substantial_per-file_cost_for___96__add__96__.mdwn create mode 100644 doc/projects/datalad/bugs-done/Windows__58___substantial_per-file_cost_for___96__add__96__/comment_10_4e3cec5a4ce33dadfd0ce7a8d17bfaa0._comment create mode 100644 doc/projects/datalad/bugs-done/Windows__58___substantial_per-file_cost_for___96__add__96__/comment_12_f1a92680ab7874aa0c102cbf4b8a445a._comment create mode 100644 doc/projects/datalad/bugs-done/Windows__58___substantial_per-file_cost_for___96__add__96__/comment_13_e38a372b6d9f498160369a9c3071939a._comment create mode 100644 doc/projects/datalad/bugs-done/Windows__58___substantial_per-file_cost_for___96__add__96__/comment_14_26472db382e75e03cf10c6e5770ef42b._comment create mode 100644 doc/projects/datalad/bugs-done/Windows__58___substantial_per-file_cost_for___96__add__96__/comment_15_94d2048dcd33712e08f2206a5182b23f._comment create mode 100644 doc/projects/datalad/bugs-done/Windows__58___substantial_per-file_cost_for___96__add__96__/comment_16_0a170534b266ca55afbfcfe191ff18fc._comment create mode 100644 doc/projects/datalad/bugs-done/Windows__58___substantial_per-file_cost_for___96__add__96__/comment_17_7db34973cb362bee271545c3c58690b4._comment create mode 100644 doc/projects/datalad/bugs-done/Windows__58___substantial_per-file_cost_for___96__add__96__/comment_18_2e8e840cabbc547ef758568bb2779f9a._comment create mode 100644 doc/projects/datalad/bugs-done/Windows__58___substantial_per-file_cost_for___96__add__96__/comment_19_c89853eca5c16e9dfa4a4acc982ab526._comment create mode 100644 doc/projects/datalad/bugs-done/Windows__58___substantial_per-file_cost_for___96__add__96__/comment_1_8623b98bf21427ae5734d74e2576af5b._comment create mode 100644 doc/projects/datalad/bugs-done/Windows__58___substantial_per-file_cost_for___96__add__96__/comment_20_281ded4caa0dd407431b205ce6746c05._comment create mode 100644 doc/projects/datalad/bugs-done/Windows__58___substantial_per-file_cost_for___96__add__96__/comment_21_cc08c222cc36e3a0462f370df12eb129._comment create mode 100644 doc/projects/datalad/bugs-done/Windows__58___substantial_per-file_cost_for___96__add__96__/comment_22_1c001d885bd4d7f60b3260d494406e5c._comment create mode 100644 doc/projects/datalad/bugs-done/Windows__58___substantial_per-file_cost_for___96__add__96__/comment_23_cedee281d3f6f97499e70dacd0560f70._comment create mode 100644 doc/projects/datalad/bugs-done/Windows__58___substantial_per-file_cost_for___96__add__96__/comment_2_80c5ec6993e8a720fbd1841fdd21e311._comment create mode 100644 doc/projects/datalad/bugs-done/Windows__58___substantial_per-file_cost_for___96__add__96__/comment_3_85f07d906b836ac968ab877258180c0c._comment create mode 100644 doc/projects/datalad/bugs-done/Windows__58___substantial_per-file_cost_for___96__add__96__/comment_4_0d2ab75208877136534040b726c7f97b._comment create mode 100644 doc/projects/datalad/bugs-done/Windows__58___substantial_per-file_cost_for___96__add__96__/comment_5_891b532bd662b1198351803b82ed634e._comment create mode 100644 doc/projects/datalad/bugs-done/Windows__58___substantial_per-file_cost_for___96__add__96__/comment_6_3947b44c88820da49d8a2d1afd3595ff._comment create mode 100644 doc/projects/datalad/bugs-done/Windows__58___substantial_per-file_cost_for___96__add__96__/comment_7_1c867ba26de03f921dd347c14b8ec402._comment create mode 100644 doc/projects/datalad/bugs-done/Windows__58___substantial_per-file_cost_for___96__add__96__/comment_8_4ee757b45706816c3296dd4b29f05fbf._comment create mode 100644 doc/projects/datalad/bugs-done/Windows__58___substantial_per-file_cost_for___96__add__96__/comment_8_b46545c78628379dd50d306c87550b9d._comment create mode 100644 doc/projects/datalad/bugs-done/Windows__58___substantial_per-file_cost_for___96__add__96__/comment_9_409a95cb01a4b26d46d7aaff042026a0._comment create mode 100644 doc/projects/datalad/bugs-done/Windows_build_failing_as_of_commit_cb7bb3e.mdwn create mode 100644 doc/projects/datalad/bugs-done/__34__357_out_of_984_tests_failed__34___on_NFS_lustre_mount.mdwn create mode 100644 doc/projects/datalad/bugs-done/__34__357_out_of_984_tests_failed__34___on_NFS_lustre_mount/comment_10_61c1fe6f14a30082a325c0efea9632f6._comment create mode 100644 doc/projects/datalad/bugs-done/__34__357_out_of_984_tests_failed__34___on_NFS_lustre_mount/comment_11_541e257ea04d6a7647a337998d79232c._comment create mode 100644 doc/projects/datalad/bugs-done/__34__357_out_of_984_tests_failed__34___on_NFS_lustre_mount/comment_12_80b15bc4e0c8c9ed4680da9408c1d559._comment create mode 100644 doc/projects/datalad/bugs-done/__34__357_out_of_984_tests_failed__34___on_NFS_lustre_mount/comment_13_8f305fa196210899d2215324849a8fab._comment create mode 100644 doc/projects/datalad/bugs-done/__34__357_out_of_984_tests_failed__34___on_NFS_lustre_mount/comment_14_66d72d1d214124eaa57681df21b9b121._comment create mode 100644 doc/projects/datalad/bugs-done/__34__357_out_of_984_tests_failed__34___on_NFS_lustre_mount/comment_15_6354d1e144830bea5a0d7872f698ccc0._comment create mode 100644 doc/projects/datalad/bugs-done/__34__357_out_of_984_tests_failed__34___on_NFS_lustre_mount/comment_1_945d45b37b0548deacddab19568dd5b3._comment create mode 100644 doc/projects/datalad/bugs-done/__34__357_out_of_984_tests_failed__34___on_NFS_lustre_mount/comment_2_4e89c558748c370e8bbb1ef50f4cdcf7._comment create mode 100644 doc/projects/datalad/bugs-done/__34__357_out_of_984_tests_failed__34___on_NFS_lustre_mount/comment_3_1c0abfb39eafb73527c99dd56b41c0bd._comment create mode 100644 doc/projects/datalad/bugs-done/__34__357_out_of_984_tests_failed__34___on_NFS_lustre_mount/comment_4_ff06b532b0ec6edc17ae26a7a80233af._comment create mode 100644 doc/projects/datalad/bugs-done/__34__357_out_of_984_tests_failed__34___on_NFS_lustre_mount/comment_5_86eed28bf04fd293851afcbea5312271._comment create mode 100644 doc/projects/datalad/bugs-done/__34__357_out_of_984_tests_failed__34___on_NFS_lustre_mount/comment_6_71f5f1704b97cf4e809a55a71e9da3eb._comment create mode 100644 doc/projects/datalad/bugs-done/__34__357_out_of_984_tests_failed__34___on_NFS_lustre_mount/comment_7_78258166fed7a555e59ed2b78143fad1._comment create mode 100644 doc/projects/datalad/bugs-done/__34__357_out_of_984_tests_failed__34___on_NFS_lustre_mount/comment_8_1219295230f196c00744058ed3441a98._comment create mode 100644 doc/projects/datalad/bugs-done/__34__357_out_of_984_tests_failed__34___on_NFS_lustre_mount/comment_9_640a2685ca0efb7367da6bc502354735._comment create mode 100644 doc/projects/datalad/bugs-done/__34__failed_to_send_content_to_remote__34__.mdwn create mode 100644 doc/projects/datalad/bugs-done/__34__failed_to_send_content_to_remote__34__/comment_10_755703a901687283f1a9b3bfcdf1ea68._comment create mode 100644 doc/projects/datalad/bugs-done/__34__failed_to_send_content_to_remote__34__/comment_11_539c272450ceb56badde88702afb4e4d._comment create mode 100644 doc/projects/datalad/bugs-done/__34__failed_to_send_content_to_remote__34__/comment_12_67567cf57d9b7d57fb5e10ff7a54a99f._comment create mode 100644 doc/projects/datalad/bugs-done/__34__failed_to_send_content_to_remote__34__/comment_13_a4643d9f91947714b6105ca81164cb26._comment create mode 100644 doc/projects/datalad/bugs-done/__34__failed_to_send_content_to_remote__34__/comment_14_41f1271bdc7a4d62b30f6254a0f6ffd6._comment create mode 100644 doc/projects/datalad/bugs-done/__34__failed_to_send_content_to_remote__34__/comment_15_0d6bfbc5539ef2083e0bc2e32762a9c0._comment create mode 100644 doc/projects/datalad/bugs-done/__34__failed_to_send_content_to_remote__34__/comment_16_6ef33d110d709e46768549c59b02841a._comment create mode 100644 doc/projects/datalad/bugs-done/__34__failed_to_send_content_to_remote__34__/comment_17_7c7b953b2366fbfc1b95cc6048473ddb._comment create mode 100644 doc/projects/datalad/bugs-done/__34__failed_to_send_content_to_remote__34__/comment_18_eb8b597167a6708a27ac03ef4fbf3632._comment create mode 100644 doc/projects/datalad/bugs-done/__34__failed_to_send_content_to_remote__34__/comment_19_9a1c92462a5393155298d70ef90d3019._comment create mode 100644 doc/projects/datalad/bugs-done/__34__failed_to_send_content_to_remote__34__/comment_1_c36b1968c69e9794c723ff29d1738759._comment create mode 100644 doc/projects/datalad/bugs-done/__34__failed_to_send_content_to_remote__34__/comment_20_e6ed93310ad694f6c52b52530c63f8f5._comment create mode 100644 doc/projects/datalad/bugs-done/__34__failed_to_send_content_to_remote__34__/comment_21_79ccde86a33f486b77857720d97185f3._comment create mode 100644 doc/projects/datalad/bugs-done/__34__failed_to_send_content_to_remote__34__/comment_22_4b6cf4221ff9d4f106d595f2897ea85f._comment create mode 100644 doc/projects/datalad/bugs-done/__34__failed_to_send_content_to_remote__34__/comment_23_503d0507c55412ca8c625b32feb7f80e._comment create mode 100644 doc/projects/datalad/bugs-done/__34__failed_to_send_content_to_remote__34__/comment_24_4345e2d7f30318dc7565e90ac8578086._comment create mode 100644 doc/projects/datalad/bugs-done/__34__failed_to_send_content_to_remote__34__/comment_2_5b1148d1d771b71f6af654f974dbf427._comment create mode 100644 doc/projects/datalad/bugs-done/__34__failed_to_send_content_to_remote__34__/comment_3_ac650ab647f5fda2623a958b30b40c18._comment create mode 100644 doc/projects/datalad/bugs-done/__34__failed_to_send_content_to_remote__34__/comment_4_af8d80956d3ccedfe9aeb0fe22b2592a._comment create mode 100644 doc/projects/datalad/bugs-done/__34__failed_to_send_content_to_remote__34__/comment_5_93cb28a06189d349a59d8d79c44d3b51._comment create mode 100644 doc/projects/datalad/bugs-done/__34__failed_to_send_content_to_remote__34__/comment_6_d76a32758b58695dcef7d4ec83abb1ea._comment create mode 100644 doc/projects/datalad/bugs-done/__34__failed_to_send_content_to_remote__34__/comment_7_40094333a89de09f7e64ca715ba20f16._comment create mode 100644 doc/projects/datalad/bugs-done/__34__failed_to_send_content_to_remote__34__/comment_7_4da389b802a114dc18e0264a4df36dee._comment create mode 100644 doc/projects/datalad/bugs-done/__34__failed_to_send_content_to_remote__34__/comment_9_c43d7b153cc8b68f31ea007922326ee8._comment create mode 100644 doc/projects/datalad/bugs-done/__39__Beyond_symbolic__39___link_error_when_link_is_upstream_of_repo.mdwn create mode 100644 doc/projects/datalad/bugs-done/__39__Beyond_symbolic__39___link_error_when_link_is_upstream_of_repo/comment_1_a2d1112b0a9338b7c093546a985a5f90._comment create mode 100644 doc/projects/datalad/bugs-done/__39__Beyond_symbolic__39___link_error_when_link_is_upstream_of_repo/comment_2_c6e30af134a73bc8b3faee83c7c3b378._comment create mode 100644 doc/projects/datalad/bugs-done/__39__Beyond_symbolic__39___link_error_when_link_is_upstream_of_repo/comment_3_9ac6e3436ab4866993ebf4e469b13636._comment create mode 100644 doc/projects/datalad/bugs-done/__39__Beyond_symbolic__39___link_error_when_link_is_upstream_of_repo/comment_3_efe4490c33e874bd78fd567c70874088._comment create mode 100644 doc/projects/datalad/bugs-done/__39__git_annex_test__39___failures_introduced_by_75aab72d2.mdwn create mode 100644 doc/projects/datalad/bugs-done/__39__init_--version__61__N__39___can_land_on_unsupported_N+1.mdwn create mode 100644 doc/projects/datalad/bugs-done/__39__init_--version__61__N__39___can_land_on_unsupported_N+1/comment_1_c67521dc54f12efbbf7e13c828775e30._comment create mode 100644 doc/projects/datalad/bugs-done/__39__init_--version__61__N__39___can_land_on_unsupported_N+1/comment_2_d65fc129524c92fa1c783d8dbc516f5f._comment create mode 100644 doc/projects/datalad/bugs-done/add_--dry-run_seems_have_introduced_a___34__regression__34__.mdwn create mode 100644 doc/projects/datalad/bugs-done/add_--dry-run_seems_have_introduced_a___34__regression__34__/comment_1_0bc5a3d36900d9bd8c978a08383d409d._comment create mode 100644 doc/projects/datalad/bugs-done/add_--dry-run_seems_have_introduced_a___34__regression__34__/comment_2_ecc658185b485a5ccaf592ab8a255241._comment create mode 100644 doc/projects/datalad/bugs-done/add_--dry-run_seems_have_introduced_a___34__regression__34__/comment_3_38baec012d7ebc95f92df59c85c6d525._comment create mode 100644 doc/projects/datalad/bugs-done/add_--dry-run_seems_have_introduced_a___34__regression__34__/comment_4_ee9f695290b1bcaf2c9320d8042047cc._comment create mode 100644 doc/projects/datalad/bugs-done/add_--dry-run_seems_have_introduced_a___34__regression__34__/comment_5_3fb410419608d725ea15a4849266396e._comment create mode 100644 doc/projects/datalad/bugs-done/add_--dry-run_seems_have_introduced_a___34__regression__34__/comment_6_2455f440750a285768746e764fbfb9cd._comment create mode 100644 doc/projects/datalad/bugs-done/add_--dry-run_seems_have_introduced_a___34__regression__34__/comment_7_c8f6ee2cb993b22b2531d1a4b7c3da8e._comment create mode 100644 doc/projects/datalad/bugs-done/add_--force-small_fails_on_modified_submodules.mdwn create mode 100644 doc/projects/datalad/bugs-done/add_--force-small_fails_on_modified_submodules/comment_1_95e4a43684338e28a74b6df8d2e5281a._comment create mode 100644 doc/projects/datalad/bugs-done/adds_file_destined_for_annex_into_git_in___39__addurl__39__.mdwn create mode 100644 doc/projects/datalad/bugs-done/addurl_--batch__--with-files_doesn__39__t_add_file_into_git_until_pipe_is_closed.mdwn create mode 100644 doc/projects/datalad/bugs-done/addurl_--batch___40__--json_or_not__41___doesn__39__t_report_failure_correctly_if_non-annexed_file_exists.mdwn create mode 100644 doc/projects/datalad/bugs-done/addurl_--batch_decides_to_talk_to_ssh_remotes_for_some_reason.mdwn create mode 100644 doc/projects/datalad/bugs-done/addurl_--file__causes_file_redownload_even_if_it_already_present.mdwn create mode 100644 doc/projects/datalad/bugs-done/annex-ssh-options_dropped_since_8.20200330.mdwn create mode 100644 doc/projects/datalad/bugs-done/annex-ssh-options_dropped_since_8.20200330/comment_1_2ba303f406a0be7c3bb4a8466ce4b9c3._comment create mode 100644 doc/projects/datalad/bugs-done/annex-ssh-options_dropped_since_8.20200330/comment_2_d3fdcfe9e75f2fa6a7c4d12e318455db._comment create mode 100644 doc/projects/datalad/bugs-done/annex.hardlink_is_not___34__in_effect__34___in_thin_mode_.mdwn create mode 100644 doc/projects/datalad/bugs-done/annex.hardlink_is_not___34__in_effect__34___in_thin_mode_/comment_1_cc1417bb8173e3b2636d465967a704d9._comment create mode 100644 doc/projects/datalad/bugs-done/annex.hardlink_is_not___34__in_effect__34___in_thin_mode_/comment_2_60ab40449991dbb3f64d08f01c5458c4._comment create mode 100644 doc/projects/datalad/bugs-done/annex.hardlink_is_not___34__in_effect__34___in_thin_mode_/comment_3_86e8f44191a004da20db8e97577744a9._comment create mode 100644 doc/projects/datalad/bugs-done/annex.hardlink_is_not___34__in_effect__34___in_thin_mode_/comment_4_d6039a6d2df740600e98b50fe90fbdfb._comment create mode 100644 doc/projects/datalad/bugs-done/annex_add_ignores_.-prefixed_directories.mdwn create mode 100644 doc/projects/datalad/bugs-done/annex_doesn__39__t_fixup_symlinks_when___34__git_commit_path__95__to__95__repo__34___is_used.mdwn create mode 100644 doc/projects/datalad/bugs-done/annex_doesn__39__t_fixup_symlinks_when___34__git_commit_path__95__to__95__repo__34___is_used/comment_1_b90f22ce0ab931658856e949ac227985._comment create mode 100644 doc/projects/datalad/bugs-done/annex_drop_fails_to_determine_availability_on_a_http_url_redirecting_to_ftp.mdwn create mode 100644 doc/projects/datalad/bugs-done/annex_drop_is_not___34__in_effect__34___for_load_which_was___34__addurl_--batch__34__ed_but_not_yet_committed.mdwn create mode 100644 doc/projects/datalad/bugs-done/annex_get_-J_16_via_ssh_stalls_.mdwn create mode 100644 doc/projects/datalad/bugs-done/annex_get_-J_16_via_ssh_stalls_/comment_10_4b053c393627e2efb746a2b81838e518._comment create mode 100644 doc/projects/datalad/bugs-done/annex_get_-J_16_via_ssh_stalls_/comment_11_e8ff5342533744617248104b04aa227f._comment create mode 100644 doc/projects/datalad/bugs-done/annex_get_-J_16_via_ssh_stalls_/comment_12_7b5857e8415f386813b1b174e39e899f._comment create mode 100644 doc/projects/datalad/bugs-done/annex_get_-J_16_via_ssh_stalls_/comment_13_552c0283748b64d84e84f5117f697d3b._comment create mode 100644 doc/projects/datalad/bugs-done/annex_get_-J_16_via_ssh_stalls_/comment_14_7e3f849312d824cfbd10cce1f024c80b._comment create mode 100644 doc/projects/datalad/bugs-done/annex_get_-J_16_via_ssh_stalls_/comment_15_666dcda30f5a34588c4357c3fa43e8d8._comment create mode 100644 doc/projects/datalad/bugs-done/annex_get_-J_16_via_ssh_stalls_/comment_16_39227b7dc49d141556680980aa558318._comment create mode 100644 doc/projects/datalad/bugs-done/annex_get_-J_16_via_ssh_stalls_/comment_17_c39c3b0978777987dcd8c86906aa6532._comment create mode 100644 doc/projects/datalad/bugs-done/annex_get_-J_16_via_ssh_stalls_/comment_18_bffd59a35ae162f4141b6de7efcc7422._comment create mode 100644 doc/projects/datalad/bugs-done/annex_get_-J_16_via_ssh_stalls_/comment_19_b3fc7c5f6acfa23b6bfd0f709d2f6b96._comment create mode 100644 doc/projects/datalad/bugs-done/annex_get_-J_16_via_ssh_stalls_/comment_1_4916bb94a700e72d42302d2938693daa._comment create mode 100644 doc/projects/datalad/bugs-done/annex_get_-J_16_via_ssh_stalls_/comment_20_3070880ace124795e07c4f8d1f47e81b._comment create mode 100644 doc/projects/datalad/bugs-done/annex_get_-J_16_via_ssh_stalls_/comment_20_797c40af56ddb435db3d4affa86d49a2._comment create mode 100644 doc/projects/datalad/bugs-done/annex_get_-J_16_via_ssh_stalls_/comment_22_35fbdb89eb658439e4125c22a04173a7._comment create mode 100644 doc/projects/datalad/bugs-done/annex_get_-J_16_via_ssh_stalls_/comment_23_301141057296da0e01fcc622b4f14dcc._comment create mode 100644 doc/projects/datalad/bugs-done/annex_get_-J_16_via_ssh_stalls_/comment_24_1c96a68c27ba09cd1f8c035dd026582b._comment create mode 100644 doc/projects/datalad/bugs-done/annex_get_-J_16_via_ssh_stalls_/comment_25_d107200df348bc2b97e2fefc4342e49a._comment create mode 100644 doc/projects/datalad/bugs-done/annex_get_-J_16_via_ssh_stalls_/comment_26_a3d803f25795365c9651d2ec023d9145._comment create mode 100644 doc/projects/datalad/bugs-done/annex_get_-J_16_via_ssh_stalls_/comment_27_0f2e6c7dbfbb3007d4e3f7faa63d16b4._comment create mode 100644 doc/projects/datalad/bugs-done/annex_get_-J_16_via_ssh_stalls_/comment_28_0812ef7942034a4ece952dd8069813a3._comment create mode 100644 doc/projects/datalad/bugs-done/annex_get_-J_16_via_ssh_stalls_/comment_29_c18ec0797bd55780a0851c3b0c71b184._comment create mode 100644 doc/projects/datalad/bugs-done/annex_get_-J_16_via_ssh_stalls_/comment_2_8d391bacf291492846d9253057653082._comment create mode 100644 doc/projects/datalad/bugs-done/annex_get_-J_16_via_ssh_stalls_/comment_30_2bee4762be30b9864083ed1d32fe942e._comment create mode 100644 doc/projects/datalad/bugs-done/annex_get_-J_16_via_ssh_stalls_/comment_3_6f228fa6770aad308d0f99647ac21347._comment create mode 100644 doc/projects/datalad/bugs-done/annex_get_-J_16_via_ssh_stalls_/comment_4_3eaebe28f2925cac21a49f30aed3fa3c._comment create mode 100644 doc/projects/datalad/bugs-done/annex_get_-J_16_via_ssh_stalls_/comment_5_c31884e8d52324c0e04cdbbee42d4d35._comment create mode 100644 doc/projects/datalad/bugs-done/annex_get_-J_16_via_ssh_stalls_/comment_6_0707380cc043d9bbb84f0232eb1c1322._comment create mode 100644 doc/projects/datalad/bugs-done/annex_get_-J_16_via_ssh_stalls_/comment_7_f7fd86a45b6d5440cdd0588ebb8753c8._comment create mode 100644 doc/projects/datalad/bugs-done/annex_get_-J_16_via_ssh_stalls_/comment_8_7eee5a23aa67cb156aa31fe9fd92dd50._comment create mode 100644 doc/projects/datalad/bugs-done/annex_get_-J_16_via_ssh_stalls_/comment_9_ee7333607930d8e3fbd4cca2b974c55b._comment create mode 100644 doc/projects/datalad/bugs-done/annex_get_should_retry_failed_downloads_from_S3.mdwn create mode 100644 doc/projects/datalad/bugs-done/annex_get_should_retry_failed_downloads_from_S3/comment_10_1cbef11391d23210230872a75f8e5414._comment create mode 100644 doc/projects/datalad/bugs-done/annex_get_should_retry_failed_downloads_from_S3/comment_1_4de90238d57de0d49b75418411135dbc._comment create mode 100644 doc/projects/datalad/bugs-done/annex_get_should_retry_failed_downloads_from_S3/comment_2_5da78a05b781029fa7f0f9d8ead7e093._comment create mode 100644 doc/projects/datalad/bugs-done/annex_get_should_retry_failed_downloads_from_S3/comment_3_b279da2a2db1ba5a24a76a9112e691aa._comment create mode 100644 doc/projects/datalad/bugs-done/annex_get_should_retry_failed_downloads_from_S3/comment_4_089f1d2d7de435a98dc1098ebf1cf3df._comment create mode 100644 doc/projects/datalad/bugs-done/annex_get_should_retry_failed_downloads_from_S3/comment_5_3b840d50a1ecc9cb6e161e3c039fe332._comment create mode 100644 doc/projects/datalad/bugs-done/annex_get_should_retry_failed_downloads_from_S3/comment_6_2c83482ead69a902c99fca3ae63dfc34._comment create mode 100644 doc/projects/datalad/bugs-done/annex_get_should_retry_failed_downloads_from_S3/comment_7_51f6745c4abce7b3cdfcf1c5998f8329._comment create mode 100644 doc/projects/datalad/bugs-done/annex_get_should_retry_failed_downloads_from_S3/comment_7_d8ccfe3fe0d5123c1065ace73b623b44._comment create mode 100644 doc/projects/datalad/bugs-done/annex_get_should_retry_failed_downloads_from_S3/comment_9_df98c47016e79f15218880a009e671ea._comment create mode 100644 doc/projects/datalad/bugs-done/annex_metadata___40__not_--batch__39__ed__41___is_not_aware_of_files_added_via_addurls_--batch.mdwn create mode 100644 doc/projects/datalad/bugs-done/annex_metadata___40__not_--batch__39__ed__41___is_not_aware_of_files_added_via_addurls_--batch/comment_1_4169fceac6ef95400ddc79652558dc13._comment create mode 100644 doc/projects/datalad/bugs-done/annex_metadata___40__not_--batch__39__ed__41___is_not_aware_of_files_added_via_addurls_--batch/comment_2_c479f19eb55dce35364eea30d0b727b7._comment create mode 100644 doc/projects/datalad/bugs-done/annex_metadata___40__not_--batch__39__ed__41___is_not_aware_of_files_added_via_addurls_--batch/comment_3_f694e35efa09aa60daf17d63270968af._comment create mode 100644 doc/projects/datalad/bugs-done/annex_sync___40__in_direct_mode_only__41___does_not_actually_update_local_branch__47__tree.mdwn create mode 100644 doc/projects/datalad/bugs-done/annex_sync___40__in_direct_mode_only__41___does_not_actually_update_local_branch__47__tree/comment_1_6fb5a4fec435eccc0528744c55b7468c._comment create mode 100644 doc/projects/datalad/bugs-done/annex_view_barfs__fatal__58___Unable_to_add___40__null__41___to_database.mdwn create mode 100644 doc/projects/datalad/bugs-done/annex_view_barfs__fatal__58___Unable_to_add___40__null__41___to_database/comment_1_9c91eef41c51737f85d4df3c737fc6c7._comment create mode 100644 doc/projects/datalad/bugs-done/annex_view_barfs__fatal__58___Unable_to_add___40__null__41___to_database/comment_2_f6759af83ddd62293593a276e089188d._comment create mode 100644 doc/projects/datalad/bugs-done/annex_view_barfs__fatal__58___Unable_to_add___40__null__41___to_database/comment_3_798629780fa04dc1a8bf1c21ca813d40._comment create mode 100644 doc/projects/datalad/bugs-done/annex_view_barfs__fatal__58___Unable_to_add___40__null__41___to_database/comment_4_b7c2abf63c9f350402b3176e028bda03._comment create mode 100644 doc/projects/datalad/bugs-done/autoenable__61__true_seems_to_not_work_any_longer.mdwn create mode 100644 doc/projects/datalad/bugs-done/autoenable__61__true_seems_to_not_work_any_longer/comment_1_457027471d09aa4ae8718c1508cfae1d._comment create mode 100644 doc/projects/datalad/bugs-done/autostart__47__git-annex.desktop_gets_resurrected.mdwn create mode 100644 doc/projects/datalad/bugs-done/autostart__47__git-annex.desktop_gets_resurrected/comment_1_020c0c7a51638cf28efc518da4ccdb9d._comment create mode 100644 doc/projects/datalad/bugs-done/autostart__47__git-annex.desktop_gets_resurrected/comment_2_0378843b9c7281d587304ac9c42d46f5._comment create mode 100644 doc/projects/datalad/bugs-done/autostart__47__git-annex.desktop_gets_resurrected/comment_3_935f2fe1f7ff1a46b1038cd4458317a4._comment create mode 100644 doc/projects/datalad/bugs-done/autostart__47__git-annex.desktop_gets_resurrected/comment_4_5bb365e15cd27002b0104d9eb9b5f28d._comment create mode 100644 doc/projects/datalad/bugs-done/awkward_error_from_annex_whenever_operating_on_a_clone_with_submodules.mdwn create mode 100644 doc/projects/datalad/bugs-done/awkward_error_from_annex_whenever_operating_on_a_clone_with_submodules/comment_1_86b409dc4b7824f601deeed0a14cc8e4._comment create mode 100644 doc/projects/datalad/bugs-done/awkward_error_from_annex_whenever_operating_on_a_clone_with_submodules/comment_2_f5bf66e8494b4ee2c6da7f3a6de8da18._comment create mode 100644 doc/projects/datalad/bugs-done/be_robust_to_additions_of_more_specific_mime_types_to_libmagic___40__e.g._application__47__json__41__.mdwn create mode 100644 doc/projects/datalad/bugs-done/be_robust_to_additions_of_more_specific_mime_types_to_libmagic___40__e.g._application__47__json__41__/comment_1_a18cfae149effed2375b3b0be021ac3a._comment create mode 100644 doc/projects/datalad/bugs-done/be_robust_to_additions_of_more_specific_mime_types_to_libmagic___40__e.g._application__47__json__41__/comment_2_08448687578634b6281ea285f18d87e7._comment create mode 100644 doc/projects/datalad/bugs-done/build_of_7.20191230+git152-gefb981388_fails_the_prop__95__read__95__write__95__transferinfo_test.mdwn create mode 100644 doc/projects/datalad/bugs-done/build_of_7.20191230+git152-gefb981388_fails_the_prop__95__read__95__write__95__transferinfo_test/comment_1_e9db58f71eedc99ccfd7a7a446843316._comment create mode 100644 doc/projects/datalad/bugs-done/can__39__t_make_annex_happy_in_freeze__47__thaw.mdwn create mode 100644 doc/projects/datalad/bugs-done/can__39__t_make_annex_happy_in_freeze__47__thaw/comment_1_07ee2e1b3e0bf8959001c22273a71afe._comment create mode 100644 doc/projects/datalad/bugs-done/can__39__t_make_annex_happy_in_freeze__47__thaw/comment_2_ad34ddcf5bd0466b66eb1b93f65297fe._comment create mode 100644 doc/projects/datalad/bugs-done/can__39__t_make_annex_happy_in_freeze__47__thaw/comment_3_223df2a9cebd99a312537137863b1781._comment create mode 100644 doc/projects/datalad/bugs-done/can__39__t_make_annex_happy_in_freeze__47__thaw/comment_4_c78b91393ca917f9d231c39702c70e14._comment create mode 100644 doc/projects/datalad/bugs-done/can__39__t_make_annex_happy_in_freeze__47__thaw/comment_5_1bf2ff8d5ddbc8121ea69a5f4042f190._comment create mode 100644 doc/projects/datalad/bugs-done/can__39__t_make_annex_happy_in_freeze__47__thaw/comment_6_e12bd42ef9690d3bb74236d55da66bff._comment create mode 100644 doc/projects/datalad/bugs-done/can__39__t_make_annex_happy_in_freeze__47__thaw/comment_7_f0a3a944479e52a7789ff9a346001a6d._comment create mode 100644 doc/projects/datalad/bugs-done/cannot___34__install__34___standalone_git_annex_within_afs_mount.mdwn create mode 100644 doc/projects/datalad/bugs-done/cannot_commit___34__annex_add__34__ed_modified_file_which_switched_its_largefile_status_to_be_committed_to_git_now.mdwn create mode 100644 doc/projects/datalad/bugs-done/cannot_commit___34__annex_add__34__ed_modified_file_which_switched_its_largefile_status_to_be_committed_to_git_now/comment_1_ad19d064dd9c175debe647a6928e4f35._comment create mode 100644 doc/projects/datalad/bugs-done/cannot_commit___34__annex_add__34__ed_modified_file_which_switched_its_largefile_status_to_be_committed_to_git_now/comment_2_19de1d89dd0a266ce43e0f25cd2b74cd._comment create mode 100644 doc/projects/datalad/bugs-done/cannot_commit___34__annex_add__34__ed_modified_file_which_switched_its_largefile_status_to_be_committed_to_git_now/comment_3_92b71940fe9d00bf58ee08b327f4a991._comment create mode 100644 doc/projects/datalad/bugs-done/cannot_commit___34__annex_add__34__ed_modified_file_which_switched_its_largefile_status_to_be_committed_to_git_now/comment_4_010b0b10ce6f9cd2b9a3f9847ff2a91a._comment create mode 100644 doc/projects/datalad/bugs-done/cannot_commit___34__annex_add__34__ed_modified_file_which_switched_its_largefile_status_to_be_committed_to_git_now/comment_4_8ab0f0852a1dc6c51a502f07faba61eb._comment create mode 100644 doc/projects/datalad/bugs-done/cannot_commit___34__annex_add__34__ed_modified_file_which_switched_its_largefile_status_to_be_committed_to_git_now/comment_6_7081b1386ca8807dff79e8613088b619._comment create mode 100644 doc/projects/datalad/bugs-done/cannot_commit___34__annex_add__34__ed_modified_file_which_switched_its_largefile_status_to_be_committed_to_git_now/comment_7_d987bcd1f589cd9f19a4df92461f9e1a._comment create mode 100644 doc/projects/datalad/bugs-done/cannot_commit___34__annex_add__34__ed_modified_file_which_switched_its_largefile_status_to_be_committed_to_git_now/comment_8_a9100e161d004729db9e3157fcb78343._comment create mode 100644 doc/projects/datalad/bugs-done/cannot_commit___34__annex_add__34__ed_modified_file_which_switched_its_largefile_status_to_be_committed_to_git_now/comment_9_220be99862a8a24263bd5f5f27988a1c._comment create mode 100644 doc/projects/datalad/bugs-done/case_where_using_pathspec_with_git-commit_leaves_s.mdwn create mode 100644 doc/projects/datalad/bugs-done/case_where_using_pathspec_with_git-commit_leaves_s/comment_1_a71ce38ec25075ac7037550094da2bf7._comment create mode 100644 doc/projects/datalad/bugs-done/change_in_behavior_after_8.20210621.mdwn create mode 100644 doc/projects/datalad/bugs-done/change_in_behavior_after_8.20210621/comment_1_ba8a5b590d2f690bcabeb63c0ef6f46c._comment create mode 100644 doc/projects/datalad/bugs-done/change_in_behavior_after_8.20210621/comment_2_28ea6b8a7addc23f2eaf5626705fc789._comment create mode 100644 doc/projects/datalad/bugs-done/change_in_behavior_after_8.20210621/comment_3_bd3faa20f746fcf4fd99a011b7453b38._comment create mode 100644 doc/projects/datalad/bugs-done/clash_of_-j__in_copy_for_--json_--json-progress.mdwn create mode 100644 doc/projects/datalad/bugs-done/commits_created_despite_alwayscommit__61__false_as_of_recent_change.mdwn create mode 100644 doc/projects/datalad/bugs-done/commits_created_despite_alwayscommit__61__false_as_of_recent_change/comment_1_793ab4d52a3a4a3a30b0e72b72ac18eb._comment create mode 100644 doc/projects/datalad/bugs-done/commits_created_despite_alwayscommit__61__false_as_of_recent_change/comment_2_1c0e6f07f1da2872455401ac97c4ccc8._comment create mode 100644 doc/projects/datalad/bugs-done/commits_created_despite_alwayscommit__61__false_as_of_recent_change/comment_3_d064cceaaded97ce52169ca176959187._comment create mode 100644 doc/projects/datalad/bugs-done/commits_created_despite_alwayscommit__61__false_as_of_recent_change/comment_4_8209bed5e7c10f74b3ac17c368c92023._comment create mode 100644 doc/projects/datalad/bugs-done/copy_does_not_reflect_some_failed_copies_in_--json_output.mdwn create mode 100644 doc/projects/datalad/bugs-done/copy_does_not_reflect_some_failed_copies_in_--json_output/comment_1_4ed0e29f0b599135b1b1c9197d58873b._comment create mode 100644 doc/projects/datalad/bugs-done/copy_does_not_reflect_some_failed_copies_in_--json_output/comment_2_cae2883d41b495a6722a7039f0ec2726._comment create mode 100644 doc/projects/datalad/bugs-done/could_standalone_copy_of_git_ship__47__deploy_hooks_samples_as_well_as_stock_git__63__.mdwn create mode 100644 doc/projects/datalad/bugs-done/crippled_filesystem__58___SQLite3_returned_ErrorBusy.mdwn create mode 100644 doc/projects/datalad/bugs-done/crippled_filesystem__58___SQLite3_returned_ErrorBusy/comment_10_b96755e44bedf262cbb32403f8edaf0b._comment create mode 100644 doc/projects/datalad/bugs-done/crippled_filesystem__58___SQLite3_returned_ErrorBusy/comment_11_9356da08c06aeae254fc84e44b0b3d14._comment create mode 100644 doc/projects/datalad/bugs-done/crippled_filesystem__58___SQLite3_returned_ErrorBusy/comment_12_918ed48f23dfdc1fc95e3df9526b489c._comment create mode 100644 doc/projects/datalad/bugs-done/crippled_filesystem__58___SQLite3_returned_ErrorBusy/comment_13_baafac7f80ff4b7cc4cf078e4ab969c3._comment create mode 100644 doc/projects/datalad/bugs-done/crippled_filesystem__58___SQLite3_returned_ErrorBusy/comment_1_ac112e35d792bdaeff268aae7ef0dc6a._comment create mode 100644 doc/projects/datalad/bugs-done/crippled_filesystem__58___SQLite3_returned_ErrorBusy/comment_2_e1c7bd12aba40c6d9e9c039fa0de8631._comment create mode 100644 doc/projects/datalad/bugs-done/crippled_filesystem__58___SQLite3_returned_ErrorBusy/comment_2_e524de262247edc4c541ce3af92c48e0._comment create mode 100644 doc/projects/datalad/bugs-done/crippled_filesystem__58___SQLite3_returned_ErrorBusy/comment_4_1e0f10f694f7d07c0ab75136daec669c._comment create mode 100644 doc/projects/datalad/bugs-done/crippled_filesystem__58___SQLite3_returned_ErrorBusy/comment_5_bc9b8c1b80a3308c997fdccbf8465f08._comment create mode 100644 doc/projects/datalad/bugs-done/crippled_filesystem__58___SQLite3_returned_ErrorBusy/comment_6_21e8b47c5f100196f3d2062001a484d8._comment create mode 100644 doc/projects/datalad/bugs-done/crippled_filesystem__58___SQLite3_returned_ErrorBusy/comment_7_36f796f2ed8cd91716ee5a083e5a5ace._comment create mode 100644 doc/projects/datalad/bugs-done/crippled_filesystem__58___SQLite3_returned_ErrorBusy/comment_8_0d34bfeab48421e35c6880bca639cbb2._comment create mode 100644 doc/projects/datalad/bugs-done/crippled_filesystem__58___SQLite3_returned_ErrorBusy/comment_9_d0d441c94af2fe63ed1b20fb031181a3._comment create mode 100644 doc/projects/datalad/bugs-done/crippledfs__58___annex-init_crash_when_remote_name_is.mdwn create mode 100644 doc/projects/datalad/bugs-done/diffdriver_does_not_workout_on_unlocked_file__63__.mdwn create mode 100644 doc/projects/datalad/bugs-done/diffdriver_does_not_workout_on_unlocked_file__63__/comment_1_f5f0bb494672fb6b959c2a72a042467d._comment create mode 100644 doc/projects/datalad/bugs-done/does_not_complain__47__fail_if_by_mistake_option_value_passed_within_arg_for__-c.mdwn create mode 100644 doc/projects/datalad/bugs-done/drop_on_NFS___40__no_pidlock_need_detected__41___leaves_annex__47__objects__47__XX__47__YY__47__KEY_dir_behind_.mdwn create mode 100644 doc/projects/datalad/bugs-done/drop_on_NFS___40__no_pidlock_need_detected__41___leaves_annex__47__objects__47__XX__47__YY__47__KEY_dir_behind_/comment_1_ef17dd348b2404000c29e7b41f1e5253._comment create mode 100644 doc/projects/datalad/bugs-done/drop_on_NFS___40__no_pidlock_need_detected__41___leaves_annex__47__objects__47__XX__47__YY__47__KEY_dir_behind_/comment_2_51a060d64f2dead1aa030596b0b34bc8._comment create mode 100644 doc/projects/datalad/bugs-done/drop_on_NFS___40__no_pidlock_need_detected__41___leaves_annex__47__objects__47__XX__47__YY__47__KEY_dir_behind_/comment_3_6c79c41676318bd976eff9988463d167._comment create mode 100644 doc/projects/datalad/bugs-done/dropkey_--batch_--json_--force_is_always_succesfull.mdwn create mode 100644 doc/projects/datalad/bugs-done/duplicate_progress_reports_in_parallel___39__get__39__.mdwn create mode 100644 doc/projects/datalad/bugs-done/enableremote_stuck_with_a_recentish_git-annex.mdwn create mode 100644 doc/projects/datalad/bugs-done/enableremote_stuck_with_a_recentish_git-annex/comment_10_1a3d3ade491f97e68a7bfcd853062875._comment create mode 100644 doc/projects/datalad/bugs-done/enableremote_stuck_with_a_recentish_git-annex/comment_11_d53e63d817a71ae88580c5b08ce28956._comment create mode 100644 doc/projects/datalad/bugs-done/enableremote_stuck_with_a_recentish_git-annex/comment_12_435c4cad7d3837aa09292642b983f041._comment create mode 100644 doc/projects/datalad/bugs-done/enableremote_stuck_with_a_recentish_git-annex/comment_13_afc2af08abebba808886464fbcd0b9d7._comment create mode 100644 doc/projects/datalad/bugs-done/enableremote_stuck_with_a_recentish_git-annex/comment_14_a532adc63a5ad97ab37a0a775cda0d0e._comment create mode 100644 doc/projects/datalad/bugs-done/enableremote_stuck_with_a_recentish_git-annex/comment_15_ba2420e2d8f41dbdafc839246b8362aa._comment create mode 100644 doc/projects/datalad/bugs-done/enableremote_stuck_with_a_recentish_git-annex/comment_16_8768afda308d5afeee2002f53f5cbf2c._comment create mode 100644 doc/projects/datalad/bugs-done/enableremote_stuck_with_a_recentish_git-annex/comment_17_06103ccf5423718b35d35d6b2e4f04d2._comment create mode 100644 doc/projects/datalad/bugs-done/enableremote_stuck_with_a_recentish_git-annex/comment_1_e47d2cae9fa224bef2433eba4d21ec7e._comment create mode 100644 doc/projects/datalad/bugs-done/enableremote_stuck_with_a_recentish_git-annex/comment_2_de71be6bdc853567ad52a05c591b3bb5._comment create mode 100644 doc/projects/datalad/bugs-done/enableremote_stuck_with_a_recentish_git-annex/comment_3_36b91cb600c0a14dedd58e91e97132d5._comment create mode 100644 doc/projects/datalad/bugs-done/enableremote_stuck_with_a_recentish_git-annex/comment_4_2a15295f0a6f907d684ca5a7134619ac._comment create mode 100644 doc/projects/datalad/bugs-done/enableremote_stuck_with_a_recentish_git-annex/comment_5_e7a571699a2e564bb8364e353d9a1245._comment create mode 100644 doc/projects/datalad/bugs-done/enableremote_stuck_with_a_recentish_git-annex/comment_6_362351708d543f1d219dfcf8d71b5a14._comment create mode 100644 doc/projects/datalad/bugs-done/enableremote_stuck_with_a_recentish_git-annex/comment_7_1fbf8751d378f4e838e7f5ba6b43a6ca._comment create mode 100644 doc/projects/datalad/bugs-done/enableremote_stuck_with_a_recentish_git-annex/comment_8_03d750b6461b965b33e1e4bed1242658._comment create mode 100644 doc/projects/datalad/bugs-done/enableremote_stuck_with_a_recentish_git-annex/comment_8_3f8ca763326523a79184192332107879._comment create mode 100644 doc/projects/datalad/bugs-done/encfs_support_--_shouldn__39__t_it_be_treated_as_crippled_already__63__.mdwn create mode 100644 doc/projects/datalad/bugs-done/encfs_support_--_shouldn__39__t_it_be_treated_as_crippled_already__63__/comment_1_a3111068628efcfe8c5dbbe653805481._comment create mode 100644 doc/projects/datalad/bugs-done/error__58___invalid_object__while_setting_metadata.mdwn create mode 100644 doc/projects/datalad/bugs-done/error__58___invalid_object__while_setting_metadata/comment_1_d027727bb0063e82ef9f92c8558e191d._comment create mode 100644 doc/projects/datalad/bugs-done/error__58___invalid_object__while_setting_metadata/comment_2_e7d11326148bf27a0233d36e26e08e6a._comment create mode 100644 doc/projects/datalad/bugs-done/error__58___invalid_object__while_setting_metadata/comment_3_3ef1310132adf09cd426e49c93503a88._comment create mode 100644 doc/projects/datalad/bugs-done/error_message_in_addurl_is_not_channeled_into_json_record_with_--json-error-messages.mdwn create mode 100644 doc/projects/datalad/bugs-done/export_-J_6__to_S3__58___transfer_already_in_progress.mdwn create mode 100644 doc/projects/datalad/bugs-done/export_-J_6__to_S3__58___transfer_already_in_progress/comment_1_f81e00b5293f2df894dc3cd1678530c1._comment create mode 100644 doc/projects/datalad/bugs-done/export_-J_6__to_S3__58___transfer_already_in_progress/comment_2_0efd2da2e467c0607d1903ada98a3f20._comment create mode 100644 doc/projects/datalad/bugs-done/export__95__import_fails_on_crippled_FS_on_ubuntu.mdwn create mode 100644 doc/projects/datalad/bugs-done/export__95__import_fails_on_crippled_FS_on_ubuntu/comment_1_fcf8372714c74e5001b5a18c7100c7a1._comment create mode 100644 doc/projects/datalad/bugs-done/export__95__import_fails_on_crippled_FS_on_ubuntu/comment_2_1fb916ff03e0b8c96c554caf1558ecab._comment create mode 100644 doc/projects/datalad/bugs-done/export__95__import_fails_on_crippled_FS_on_ubuntu/comment_3_18d4577c331bceceaffed7518902975a._comment create mode 100644 doc/projects/datalad/bugs-done/export__95__import_fails_on_crippled_FS_on_ubuntu/comment_3_d949841feb6a035e20a3d0f31634d388._comment create mode 100644 doc/projects/datalad/bugs-done/fails_to___96__get__96___in_parallel_for_a_freshly_clone_from_public_s3_bucket_where_versioning_info_was_forgotten.mdwn create mode 100644 doc/projects/datalad/bugs-done/fails_to___96__get__96___in_parallel_for_a_freshly_clone_from_public_s3_bucket_where_versioning_info_was_forgotten/comment_1_917b46d9ca69c4e8181d041d5414d373._comment create mode 100644 doc/projects/datalad/bugs-done/fails_to___96__get__96___in_parallel_for_a_freshly_clone_from_public_s3_bucket_where_versioning_info_was_forgotten/comment_2_363c4a87018de7be3286d88d0d5f8ebf._comment create mode 100644 doc/projects/datalad/bugs-done/fails_to___96__get__96___in_parallel_for_a_freshly_clone_from_public_s3_bucket_where_versioning_info_was_forgotten/comment_3_1fd43cf6dd14f50ef8087f0b22ad640f._comment create mode 100644 doc/projects/datalad/bugs-done/fails_to___96__get__96___in_parallel_for_a_freshly_clone_from_public_s3_bucket_where_versioning_info_was_forgotten/comment_4_4a4d5b62af4a42ab9072ccaa6d8bed7d._comment create mode 100644 doc/projects/datalad/bugs-done/fails_to___96__get__96___in_parallel_for_a_freshly_clone_from_public_s3_bucket_where_versioning_info_was_forgotten/comment_5_6c1e74df4c7e566c4c1ba43fbbbd3beb._comment create mode 100644 doc/projects/datalad/bugs-done/fails_to_verify_presence_via_http_while_wget_fetches_it_just_fine.mdwn create mode 100644 doc/projects/datalad/bugs-done/fails_to_verify_presence_via_http_while_wget_fetches_it_just_fine/comment_1_fa6649208f1882a6bb412ba40cf57fec._comment create mode 100644 doc/projects/datalad/bugs-done/find_--batch_reports_files_that_have_no_content.mdwn create mode 100644 doc/projects/datalad/bugs-done/find_--branch__58___no_results_with_--__123__un__44____125__locked.mdwn create mode 100644 doc/projects/datalad/bugs-done/find_--branch__58___no_results_with_--__123__un__44____125__locked/comment_1_d0dcd56a0af59bb53092c518a4e3eefd._comment create mode 100644 doc/projects/datalad/bugs-done/find_--branch__58___no_results_with_--__123__un__44____125__locked/comment_2_3f1980c96f795c30886b3decba69819d._comment create mode 100644 doc/projects/datalad/bugs-done/find_--branch__58___no_results_with_--__123__un__44____125__locked/comment_3_5299bafc9ae75788d2e7e9aa7f48d00e._comment create mode 100644 doc/projects/datalad/bugs-done/find_--branch__58___no_results_with_--__123__un__44____125__locked/comment_3_b68abf3a46bf0137c02e439c58ce0014._comment create mode 100644 doc/projects/datalad/bugs-done/fresh_test_fails_for___34__trust__58____34___-_trust_failed_.mdwn create mode 100644 doc/projects/datalad/bugs-done/fromkey__58___create_directories_for_pointer_files__63__.mdwn create mode 100644 doc/projects/datalad/bugs-done/fsck_does_not_detect__47__fix_some_key_directories_correctly.mdwn create mode 100644 doc/projects/datalad/bugs-done/fsck_does_not_detect__47__fix_some_key_directories_correctly/comment_1_1d627cb46d9ecdf0b526a9c8e9764011._comment create mode 100644 doc/projects/datalad/bugs-done/fsck_does_not_detect__47__fix_some_key_directories_correctly/comment_2_eb7c6445b1ca53d5552506d8ae93b5d4._comment create mode 100644 doc/projects/datalad/bugs-done/fsck_does_not_detect__47__fix_some_key_directories_correctly/comment_3_c7d43b06f88d2000fcf574ebab971ae1._comment create mode 100644 doc/projects/datalad/bugs-done/fsck_does_not_detect__47__fix_some_key_directories_correctly/comment_4_9d7c83cfb6154bdfc51caae00da4c4b7._comment create mode 100644 doc/projects/datalad/bugs-done/fsck_does_not_detect__47__fix_some_key_directories_correctly/comment_5_09bb754f4e7e19cd52d68f91368f57fc._comment create mode 100644 doc/projects/datalad/bugs-done/fsck_does_not_detect__47__fix_some_key_directories_correctly/comment_6_3cba6bde1e5c1e978519672bf4c2d33f._comment create mode 100644 doc/projects/datalad/bugs-done/get_--json_fails_whenever_plain_get_works___40__with_https_urls__41__.mdwn create mode 100644 doc/projects/datalad/bugs-done/get_--json_fails_whenever_plain_get_works___40__with_https_urls__41__/comment_1_a9aee679a5069dc8ee8960e975bf020b._comment create mode 100644 doc/projects/datalad/bugs-done/get_--json_fails_whenever_plain_get_works___40__with_https_urls__41__/comment_2_f1e97aa8b9927c01e3365b940061d3c2._comment create mode 100644 doc/projects/datalad/bugs-done/get_-J5___58___pidlock__58___getFileStatus__58___does_not_exist.mdwn create mode 100644 doc/projects/datalad/bugs-done/get_-J5___58___pidlock__58___getFileStatus__58___does_not_exist/comment_1_83448258af56b5872a9530cf60c72eb0._comment create mode 100644 doc/projects/datalad/bugs-done/get_-J5___58___pidlock__58___getFileStatus__58___does_not_exist/comment_2_92dec3e0c31ffbef1a70ea3038ba6ca1._comment create mode 100644 doc/projects/datalad/bugs-done/get_-J5___58___pidlock__58___getFileStatus__58___does_not_exist/comment_3_ab590b41983d84c8fe7d5dc7276689b8._comment create mode 100644 doc/projects/datalad/bugs-done/get_-J8_resource_exhausted.mdwn create mode 100644 doc/projects/datalad/bugs-done/get_-J8_resource_exhausted/comment_10_61622483d4f1962f191fb6a791c6817d._comment create mode 100644 doc/projects/datalad/bugs-done/get_-J8_resource_exhausted/comment_11_ccc6f5f1ac5743b0857f68cf21eaa6ea._comment create mode 100644 doc/projects/datalad/bugs-done/get_-J8_resource_exhausted/comment_1_5f9e9600d65c1270b479cc8910d507d0._comment create mode 100644 doc/projects/datalad/bugs-done/get_-J8_resource_exhausted/comment_2_54cf519a09cfaa0c85d60734daf58d72._comment create mode 100644 doc/projects/datalad/bugs-done/get_-J8_resource_exhausted/comment_3_132ea480f90af577e3cad67f2f01c73d._comment create mode 100644 doc/projects/datalad/bugs-done/get_-J8_resource_exhausted/comment_4_06e99c29eaa770ab96ea5fd832ee04b8._comment create mode 100644 doc/projects/datalad/bugs-done/get_-J8_resource_exhausted/comment_5_0e7b492da14e067c34693b7be02e6864._comment create mode 100644 doc/projects/datalad/bugs-done/get_-J8_resource_exhausted/comment_5_db1ae584fc803c0dbb48c7e31a540c4e._comment create mode 100644 doc/projects/datalad/bugs-done/get_-J8_resource_exhausted/comment_7_f584dc15789b371569e1925c4ee5ae36._comment create mode 100644 doc/projects/datalad/bugs-done/get_-J8_resource_exhausted/comment_8_83eccac19016c971f1b799d935a4c0bb._comment create mode 100644 doc/projects/datalad/bugs-done/get_-J8_resource_exhausted/comment_9_5db907d77c5f5490c1bdc8e51387a9e9._comment create mode 100644 doc/projects/datalad/bugs-done/get_-JX__58____transfer_already_in_progress_..._for_some_files.mdwn create mode 100644 doc/projects/datalad/bugs-done/get_-JX__58____transfer_already_in_progress_..._for_some_files/comment_1_57844bc289adacc6a53162cd224e6df3._comment create mode 100644 doc/projects/datalad/bugs-done/get_-JX__58____transfer_already_in_progress_..._for_some_files/comment_2_ea5d3efc56b70de03a5b0b5e908bf11f._comment create mode 100644 doc/projects/datalad/bugs-done/get_-JX__58____transfer_already_in_progress_..._for_some_files/comment_3_ed5fa01a2263ebb4a24bfe0e46ee820f._comment create mode 100644 doc/projects/datalad/bugs-done/get_-JX__58____transfer_already_in_progress_..._for_some_files/comment_4_5964e40963325975e5de37506a2852ca._comment create mode 100644 doc/projects/datalad/bugs-done/get_-JX__58____transfer_already_in_progress_..._for_some_files/comment_5_64705f2eddbb6fcb55edc797bbd3b22c._comment create mode 100644 doc/projects/datalad/bugs-done/get_-JX__58____transfer_already_in_progress_..._for_some_files/comment_6_e51841ae57dd9d2f48cd21fbdb90ac29._comment create mode 100644 doc/projects/datalad/bugs-done/get_-JX__58____transfer_already_in_progress_..._for_some_files/comment_7_2f7f87db7ca4d379d439ab88bdeee5b5._comment create mode 100644 doc/projects/datalad/bugs-done/get_-JX__58____transfer_already_in_progress_..._for_some_files/comment_8_36bcdc23439c4f19c5aaedff85213db0._comment create mode 100644 doc/projects/datalad/bugs-done/get_-JX__58____transfer_already_in_progress_..._for_some_files/comment_9_7ce83c16509bd42b2460ce59470f70c0._comment create mode 100644 doc/projects/datalad/bugs-done/get_-J___34__fails__34___to_get_files_with_the_same_key.mdwn create mode 100644 doc/projects/datalad/bugs-done/get_-J___34__fails__34___to_get_files_with_the_same_key/comment_1_5b3879d1bb992ddf2aafa3fcb41b968f._comment create mode 100644 doc/projects/datalad/bugs-done/get_-J___34__fails__34___to_get_files_with_the_same_key/comment_2_af7078b291d99569070f6a76579787aa._comment create mode 100644 doc/projects/datalad/bugs-done/get_-J___34__fails__34___to_get_files_with_the_same_key/comment_3_86e1be495262a7f57428e92eb27a559f._comment create mode 100644 doc/projects/datalad/bugs-done/get_-J___34__fails__34___to_get_files_with_the_same_key/comment_4_3428942e9b52091b2297cd9823f17219._comment create mode 100644 doc/projects/datalad/bugs-done/get_-J___34__fails__34___to_get_files_with_the_same_key/comment_5_525ac8695b6253fc435112f336238c41._comment create mode 100644 doc/projects/datalad/bugs-done/get_-J___34__fails__34___to_get_files_with_the_same_key/comment_6_5f2ed95bcad2e3d1c4260d1fb0440052._comment create mode 100644 doc/projects/datalad/bugs-done/get_-J_cannot_be_used_with_password-based_authentication.mdwn create mode 100644 doc/projects/datalad/bugs-done/get_-J_cannot_be_used_with_password-based_authentication/comment_1_236d2b897a550e7db4b266814d4e778d._comment create mode 100644 doc/projects/datalad/bugs-done/get_-J_cannot_be_used_with_password-based_authentication/comment_2_c877de08f959dee4ace34e66f42c8615._comment create mode 100644 doc/projects/datalad/bugs-done/get_-J_cannot_be_used_with_password-based_authentication/comment_3_daac1d424bc9e5b56772fa49707bc5a5._comment create mode 100644 doc/projects/datalad/bugs-done/get_-J_cannot_be_used_with_password-based_authentication/comment_4_05bf20db275b911e2d89311182f289f6._comment create mode 100644 doc/projects/datalad/bugs-done/get_-J_cannot_be_used_with_password-based_authentication/comment_5_b094509fe0194313666b5b1db0a68156._comment create mode 100644 doc/projects/datalad/bugs-done/get_-J_cannot_be_used_with_password-based_authentication/comment_6_f5fe8d4cecfceec5cb4a03dd054d2e0a._comment create mode 100644 doc/projects/datalad/bugs-done/get_-J_cannot_be_used_with_password-based_authentication/comment_7_0118a107147f6b94a7da907e599e58db._comment create mode 100644 doc/projects/datalad/bugs-done/get_-J_cannot_be_used_with_password-based_authentication/comment_8_5da63cf5fa93120c85b98077fba51488._comment create mode 100644 doc/projects/datalad/bugs-done/get_-J_from_ssh_remote_tries_to_lock_in_home_directory__63__.mdwn create mode 100644 doc/projects/datalad/bugs-done/get_-J_from_ssh_remote_tries_to_lock_in_home_directory__63__/comment_1_362a858ce78fa0b8d7949fb39fb247d9._comment create mode 100644 doc/projects/datalad/bugs-done/get_-J_from_ssh_remote_tries_to_lock_in_home_directory__63__/comment_2_3f985fc652c9a15b5989cc82cb5da1ad._comment create mode 100644 doc/projects/datalad/bugs-done/get_fails___40__only_in_--debug__41___with_rsync_error.mdwn create mode 100644 doc/projects/datalad/bugs-done/get_fails___40__only_in_--debug__41___with_rsync_error/comment_1_d30e7f8eecfb73f2f97ec87285966f21._comment create mode 100644 doc/projects/datalad/bugs-done/get_fails___40__only_in_--debug__41___with_rsync_error/comment_2_6ec6e02bfb94b27b8da1ed68e4f9f121._comment create mode 100644 doc/projects/datalad/bugs-done/get_from_the_web_remote_fails___40__redirect__63____41___-_lack_of_further_debug_info.mdwn create mode 100644 doc/projects/datalad/bugs-done/get_is_stuck_unless_a_clone_was_previously_explicitly___34__annex_init__34__ed.mdwn create mode 100644 doc/projects/datalad/bugs-done/get_is_stuck_unless_a_clone_was_previously_explicitly___34__annex_init__34__ed/comment_1_dee4b1e8c5cc15a5d362df3b97a886a8._comment create mode 100644 doc/projects/datalad/bugs-done/get_is_stuck_unless_a_clone_was_previously_explicitly___34__annex_init__34__ed/comment_2_16bf63e639626f5dfedd6f3809216747._comment create mode 100644 doc/projects/datalad/bugs-done/get_is_stuck_unless_a_clone_was_previously_explicitly___34__annex_init__34__ed/comment_3_3b3dc5b946e405955b68b0c4c3d7df3d._comment create mode 100644 doc/projects/datalad/bugs-done/get_is_stuck_unless_a_clone_was_previously_explicitly___34__annex_init__34__ed/comment_4_91cdb022987aa3a8852a82ace092a929._comment create mode 100644 doc/projects/datalad/bugs-done/get_is_stuck_unless_a_clone_was_previously_explicitly___34__annex_init__34__ed/comment_4_b2c7517a7482071111514a68c70ce8dc._comment create mode 100644 doc/projects/datalad/bugs-done/get_is_stuck_unless_a_clone_was_previously_explicitly___34__annex_init__34__ed/comment_6_76433ca072233f8cd24600d3e45f97c5._comment create mode 100644 doc/projects/datalad/bugs-done/get_is_stuck_unless_a_clone_was_previously_explicitly___34__annex_init__34__ed/comment_7_21dbdbf7e4e889dc7c2475a0b9d4c5d7._comment create mode 100644 doc/projects/datalad/bugs-done/get_over_ssh_fails_with___fd__58__19__58___hClose__58___resource_vanished.mdwn create mode 100644 doc/projects/datalad/bugs-done/get_over_ssh_fails_with___fd__58__19__58___hClose__58___resource_vanished/comment_10_dd7883772bb37fa85aa1332633184071._comment create mode 100644 doc/projects/datalad/bugs-done/get_over_ssh_fails_with___fd__58__19__58___hClose__58___resource_vanished/comment_11_375e6d23c43a2cc0ef8bb81b06c3bcc9._comment create mode 100644 doc/projects/datalad/bugs-done/get_over_ssh_fails_with___fd__58__19__58___hClose__58___resource_vanished/comment_1_032dfcb0dc7e5c54a0cbc6634ad77268._comment create mode 100644 doc/projects/datalad/bugs-done/get_over_ssh_fails_with___fd__58__19__58___hClose__58___resource_vanished/comment_2_1c079d165831b790676dc6bec0549773._comment create mode 100644 doc/projects/datalad/bugs-done/get_over_ssh_fails_with___fd__58__19__58___hClose__58___resource_vanished/comment_3_d83330ad40f4f2c2c55f29acf6680620._comment create mode 100644 doc/projects/datalad/bugs-done/get_over_ssh_fails_with___fd__58__19__58___hClose__58___resource_vanished/comment_4_129a1946d7c76b89ae2f45b8a804959f._comment create mode 100644 doc/projects/datalad/bugs-done/get_over_ssh_fails_with___fd__58__19__58___hClose__58___resource_vanished/comment_4_1713d56b81db533db4532f2a79250c87._comment create mode 100644 doc/projects/datalad/bugs-done/get_over_ssh_fails_with___fd__58__19__58___hClose__58___resource_vanished/comment_5_a14f999b63905c1f29999bd68ded42f2._comment create mode 100644 doc/projects/datalad/bugs-done/get_over_ssh_fails_with___fd__58__19__58___hClose__58___resource_vanished/comment_7_31ecf1c31511e6454a274e3c9a9bef75._comment create mode 100644 doc/projects/datalad/bugs-done/get_over_ssh_fails_with___fd__58__19__58___hClose__58___resource_vanished/comment_8_3aecc3467427b4ebecbd53012e111004._comment create mode 100644 doc/projects/datalad/bugs-done/get_over_ssh_fails_with___fd__58__19__58___hClose__58___resource_vanished/comment_9_dfb1b7ee4e674cf18d6f41e4f4b6c879._comment create mode 100644 doc/projects/datalad/bugs-done/git-annex__58___content_is_locked__while_trying_to_move_under_NFS_and_pidlock.mdwn create mode 100644 doc/projects/datalad/bugs-done/git-annex__58___content_is_locked__while_trying_to_move_under_NFS_and_pidlock/comment_10_d44de6a250694b25ce9c3169d62db8d1._comment create mode 100644 doc/projects/datalad/bugs-done/git-annex__58___content_is_locked__while_trying_to_move_under_NFS_and_pidlock/comment_11_56ae0f15bbdea2331df3b261b74d0b0b._comment create mode 100644 doc/projects/datalad/bugs-done/git-annex__58___content_is_locked__while_trying_to_move_under_NFS_and_pidlock/comment_12_d499a2f44e8ee2f39ee959f4d6373570._comment create mode 100644 doc/projects/datalad/bugs-done/git-annex__58___content_is_locked__while_trying_to_move_under_NFS_and_pidlock/comment_13_05687dca2462eb79872879bd7695d665._comment create mode 100644 doc/projects/datalad/bugs-done/git-annex__58___content_is_locked__while_trying_to_move_under_NFS_and_pidlock/comment_14_cb1df663b03f3ce9cb27e311e5a70198._comment create mode 100644 doc/projects/datalad/bugs-done/git-annex__58___content_is_locked__while_trying_to_move_under_NFS_and_pidlock/comment_1_a98a54c04fa4e81f35fe958e746d61cb._comment create mode 100644 doc/projects/datalad/bugs-done/git-annex__58___content_is_locked__while_trying_to_move_under_NFS_and_pidlock/comment_2_18169e7bbd2caba5ee4bb0286961ac95._comment create mode 100644 doc/projects/datalad/bugs-done/git-annex__58___content_is_locked__while_trying_to_move_under_NFS_and_pidlock/comment_3_e3b623ff6714a9fe5fa0d332c72fe32f._comment create mode 100644 doc/projects/datalad/bugs-done/git-annex__58___content_is_locked__while_trying_to_move_under_NFS_and_pidlock/comment_4_58eebd8cfd664b32ef6fd0ddc34c5e86._comment create mode 100644 doc/projects/datalad/bugs-done/git-annex__58___content_is_locked__while_trying_to_move_under_NFS_and_pidlock/comment_5_e5e24428ac02b78d38cd4f197ae3807b._comment create mode 100644 doc/projects/datalad/bugs-done/git-annex__58___content_is_locked__while_trying_to_move_under_NFS_and_pidlock/comment_6_01dc7a1ff67783ce672d72cefe7b4bb5._comment create mode 100644 doc/projects/datalad/bugs-done/git-annex__58___content_is_locked__while_trying_to_move_under_NFS_and_pidlock/comment_7_458518805b8d6613930b38b9ccc3c1bc._comment create mode 100644 doc/projects/datalad/bugs-done/git-annex__58___content_is_locked__while_trying_to_move_under_NFS_and_pidlock/comment_8_853bc273b19bd6d84ca8f5da6c3dfb56._comment create mode 100644 doc/projects/datalad/bugs-done/git-annex__58___content_is_locked__while_trying_to_move_under_NFS_and_pidlock/comment_9_86656a409ab25c7fa24de8ac3e68b254._comment create mode 100644 doc/projects/datalad/bugs-done/git-annex_get__58___createDirectory__58___does_not_exist.mdwn create mode 100644 doc/projects/datalad/bugs-done/git-annex_get__58___createDirectory__58___does_not_exist/comment_1_88439da4b9df6e07aa0300700b66d910._comment create mode 100644 doc/projects/datalad/bugs-done/git-annex_get__58___createDirectory__58___does_not_exist/comment_2_020d7c6292c2a8238a5ec891fba9eddd._comment create mode 100644 doc/projects/datalad/bugs-done/git-annex_get__58___createDirectory__58___does_not_exist/comment_3_f533ffdb2b37f98094fc7633cd686e5c._comment create mode 100644 doc/projects/datalad/bugs-done/git-annex_get__58___createDirectory__58___does_not_exist/comment_4_301ac4a37a0f2da6b9c394509a369484._comment create mode 100644 doc/projects/datalad/bugs-done/git-annex_get__58___createDirectory__58___does_not_exist/comment_5_f2a25cca5d72ce1dcecf36c2780abec2._comment create mode 100644 doc/projects/datalad/bugs-done/git-annex_get__58___createDirectory__58___does_not_exist/comment_6_b8f96a403990a125bf181f0ce8bea44e._comment create mode 100644 doc/projects/datalad/bugs-done/git-annex_get__58___createDirectory__58___does_not_exist/comment_7_2899ef72aa2a5488eb945d14f7a2d76e._comment create mode 100644 doc/projects/datalad/bugs-done/git-annex_looses_itself_on_Windows__63__.mdwn create mode 100644 doc/projects/datalad/bugs-done/git-annex_looses_itself_on_Windows__63__/comment_1_e809445ff0109d8aa98093b024b3b35c._comment create mode 100644 doc/projects/datalad/bugs-done/git-annex_no_longer_provides_remote_name_with_GETCONFIG_name.mdwn create mode 100644 doc/projects/datalad/bugs-done/git-annex_no_longer_provides_remote_name_with_GETCONFIG_name/comment_1_005fd5bb4e8a025f1b15c7bf5f22d2c5._comment create mode 100644 doc/projects/datalad/bugs-done/git_annex_adjust_--unlock_seems_to_cause_migration_of_a_file_to_another_backend.mdwn create mode 100644 doc/projects/datalad/bugs-done/git_annex_info_fails_on_NFS__58___waitToSetLock__58___resource_exhausted___40__No_locks_available__41__.mdwn create mode 100644 doc/projects/datalad/bugs-done/git_annex_info_fails_on_NFS__58___waitToSetLock__58___resource_exhausted___40__No_locks_available__41__/comment_1_6c595bec40f6bf470e9170c8ae4bb573._comment create mode 100644 doc/projects/datalad/bugs-done/git_annex_info_fails_on_NFS__58___waitToSetLock__58___resource_exhausted___40__No_locks_available__41__/comment_2_4c2e143b8b3283734963e0a6e68755ac._comment create mode 100644 doc/projects/datalad/bugs-done/git_annex_info_fails_on_NFS__58___waitToSetLock__58___resource_exhausted___40__No_locks_available__41__/comment_3_dac1401bd3661397a9388a5b6ce673a5._comment create mode 100644 doc/projects/datalad/bugs-done/graft__47__graft_cleanup_commits_--_really_needed__63__.mdwn create mode 100644 doc/projects/datalad/bugs-done/graft__47__graft_cleanup_commits_--_really_needed__63__/comment_1_7bc271ddeafc92d36d2b90fcb1481891._comment create mode 100644 doc/projects/datalad/bugs-done/graft__47__graft_cleanup_commits_--_really_needed__63__/comment_2_d0a7283aac4f3c231e20ab284a1f2253._comment create mode 100644 doc/projects/datalad/bugs-done/howto_guarantee_a_single_instance_of_a_special_remote__63__.mdwn create mode 100644 doc/projects/datalad/bugs-done/howto_guarantee_a_single_instance_of_a_special_remote__63__/comment_1_447c9cf5e9e137238fb2c662a54ee2d7._comment create mode 100644 doc/projects/datalad/bugs-done/howto_guarantee_a_single_instance_of_a_special_remote__63__/comment_2_8432a49e6af69efbfcb4d615e147f873._comment create mode 100644 doc/projects/datalad/bugs-done/howto_guarantee_a_single_instance_of_a_special_remote__63__/comment_3_f66844b716e48c5befbe99346e940962._comment create mode 100644 doc/projects/datalad/bugs-done/howto_guarantee_a_single_instance_of_a_special_remote__63__/comment_4_e90ba33f7506745582d18841ae9a9531._comment create mode 100644 doc/projects/datalad/bugs-done/howto_guarantee_a_single_instance_of_a_special_remote__63__/comment_5_098b2e2c51f70d495fe1587220173f55._comment create mode 100644 doc/projects/datalad/bugs-done/howto_guarantee_a_single_instance_of_a_special_remote__63__/comment_6_306afca0827aabc092fd99e56a5b658c._comment create mode 100644 doc/projects/datalad/bugs-done/howto_guarantee_a_single_instance_of_a_special_remote__63__/comment_7_987b2c1de4638e01c4f4feb028d47b88._comment create mode 100644 doc/projects/datalad/bugs-done/howto_guarantee_a_single_instance_of_a_special_remote__63__/comment_8_d0d8a729badb551bb8d0f77e7104c159._comment create mode 100644 doc/projects/datalad/bugs-done/howto_guarantee_a_single_instance_of_a_special_remote__63__/comment_9_7159b17d64ee147822969d79d5a1c48c._comment create mode 100644 doc/projects/datalad/bugs-done/huge_multiple_copies_of___39__.nfs__42____39___and___39__.panfs__42____39___being_created.mdwn create mode 100644 doc/projects/datalad/bugs-done/huge_multiple_copies_of___39__.nfs__42____39___and___39__.panfs__42____39___being_created/comment_1_833cf2db9881a401a3d5db6d4f3c450a._comment create mode 100644 doc/projects/datalad/bugs-done/huge_multiple_copies_of___39__.nfs__42____39___and___39__.panfs__42____39___being_created/comment_2_ae3d42be1a15dda2cfe97c99248ceacb._comment create mode 100644 doc/projects/datalad/bugs-done/huge_multiple_copies_of___39__.nfs__42____39___and___39__.panfs__42____39___being_created/comment_3_bea29c2596ddcc7f8cd7f02ff7bfd9ef._comment create mode 100644 doc/projects/datalad/bugs-done/impossible_to_login_to_the_website_at_times.mdwn create mode 100644 doc/projects/datalad/bugs-done/impossible_to_login_to_the_website_at_times/comment_1_a5824d9099dc4035e09086166b13f133._comment create mode 100644 doc/projects/datalad/bugs-done/impossible_to_login_to_the_website_at_times/comment_2_fceb64e98fb7566f7cb999e9b37914f5._comment create mode 100644 doc/projects/datalad/bugs-done/impossible_to_login_to_the_website_at_times/comment_3_49b8cf8de638190b3b29ffdca3fe0bdd._comment create mode 100644 doc/projects/datalad/bugs-done/impossible_to_login_to_the_website_at_times/comment_4_dc940fed174b32dfdb4b4ff8c10529f0._comment create mode 100644 doc/projects/datalad/bugs-done/impossible_to_login_to_the_website_at_times/comment_5_c76fddc3aab4d3580c79f105c97d6998._comment create mode 100644 doc/projects/datalad/bugs-done/impossible_to_perform___34__read-only__34___git_annex_info_without_write_permissions.mdwn create mode 100644 doc/projects/datalad/bugs-done/impossible_to_perform___34__read-only__34___git_annex_info_without_write_permissions/comment_1_8b60c52d8fe41718377d6d15a25cae97._comment create mode 100644 doc/projects/datalad/bugs-done/impossible_to_perform___34__read-only__34___git_annex_info_without_write_permissions/comment_2_066d2f95ffab1b36b69aa84643d67765._comment create mode 100644 doc/projects/datalad/bugs-done/impossible_to_perform___34__read-only__34___git_annex_info_without_write_permissions/comment_3_05f7eec04634e5b4e200cf3dca1bb1b1._comment create mode 100644 doc/projects/datalad/bugs-done/impossible_to_perform___34__read-only__34___git_annex_info_without_write_permissions/comment_4_705616c61fe7a0779df3794fa8a1d6dc._comment create mode 100644 doc/projects/datalad/bugs-done/inconsistent_output_upon_addurl_--batch_complicates_if_not_forbids_reliable_parsing_of_output.mdwn create mode 100644 doc/projects/datalad/bugs-done/info_--json_lists_backend_usage_stats_as_a_list_of_lists.mdwn create mode 100644 doc/projects/datalad/bugs-done/init__58___syntax_warnings_in_diff_driver_on_Windows.mdwn create mode 100644 doc/projects/datalad/bugs-done/init__58___syntax_warnings_in_diff_driver_on_Windows/comment_1_65fda26959f82d1f3d110e72d7aaec9a._comment create mode 100644 doc/projects/datalad/bugs-done/initremote_type__61__git_fresh___34__regression__34__.mdwn create mode 100644 doc/projects/datalad/bugs-done/initremote_type__61__git_fresh___34__regression__34__/comment_1_54456b2ce0964933db23257149b5a651._comment create mode 100644 doc/projects/datalad/bugs-done/initremote_type__61__git_fresh___34__regression__34__/comment_2_23398e5403c3a9f40d3b544139ee9915._comment create mode 100644 doc/projects/datalad/bugs-done/initremote_type__61__git_fresh___34__regression__34__/comment_3_7fd5d3decc2d6b40d6d2f2d7e6dcabdd._comment create mode 100644 doc/projects/datalad/bugs-done/initremote_type__61__git_fresh___34__regression__34__/comment_4_307e7328ca24ff386e0dd734b9ff103e._comment create mode 100644 doc/projects/datalad/bugs-done/initremote_type__61__git_fresh___34__regression__34__/comment_5_e9800d53c4f88d1555aad2e0e945b40b._comment create mode 100644 doc/projects/datalad/bugs-done/lookupkey_started_to_spit_out___34__debug__34___messages_to_stdout.mdwn create mode 100644 doc/projects/datalad/bugs-done/lookupkey_started_to_spit_out___34__debug__34___messages_to_stdout/comment_1_fc8fa8020a9e542d90dd459799d6ec6e._comment create mode 100644 doc/projects/datalad/bugs-done/lookupkey_started_to_spit_out___34__debug__34___messages_to_stdout/comment_2_dac0fc9914eff0e187d4cfe3c21348bc._comment create mode 100644 doc/projects/datalad/bugs-done/man_page_for_command_misses_actual_command_in_the_synopsis_for_git-annex-checkpresentkey.mdwn create mode 100644 doc/projects/datalad/bugs-done/merge-annex-branches__61__false_-_automate_and_extend.mdwn create mode 100644 doc/projects/datalad/bugs-done/merge-annex-branches__61__false_-_automate_and_extend/comment_10_d2242b526c7cce1084bbb63ef2bfe06a._comment create mode 100644 doc/projects/datalad/bugs-done/merge-annex-branches__61__false_-_automate_and_extend/comment_1_c3fbb6eb15a510ae9b1af13cd7df028a._comment create mode 100644 doc/projects/datalad/bugs-done/merge-annex-branches__61__false_-_automate_and_extend/comment_2_c33bf0bdf6bf85e4ee9e1286208c0b73._comment create mode 100644 doc/projects/datalad/bugs-done/merge-annex-branches__61__false_-_automate_and_extend/comment_3_4c957c33a1c8dc179e0e6cd67a5a29d9._comment create mode 100644 doc/projects/datalad/bugs-done/merge-annex-branches__61__false_-_automate_and_extend/comment_4_497bbe4e351a66731c920ca5a2048c92._comment create mode 100644 doc/projects/datalad/bugs-done/merge-annex-branches__61__false_-_automate_and_extend/comment_5_53c317adf0ef48d9ba4af0571f9ded3f._comment create mode 100644 doc/projects/datalad/bugs-done/merge-annex-branches__61__false_-_automate_and_extend/comment_6_7fac2098e6d7cce997a540592e20c97a._comment create mode 100644 doc/projects/datalad/bugs-done/merge-annex-branches__61__false_-_automate_and_extend/comment_7_05e4e6936d7b87cb21e312a7aa1731eb._comment create mode 100644 doc/projects/datalad/bugs-done/merge-annex-branches__61__false_-_automate_and_extend/comment_8_ccb6c9756a2fcf75be8049d89731a5bf._comment create mode 100644 doc/projects/datalad/bugs-done/merge-annex-branches__61__false_-_automate_and_extend/comment_9_49cda6f52fa4fb527b392f6ee6bae078._comment create mode 100644 doc/projects/datalad/bugs-done/metadata_--remove_stalls_as_of_88a7fb5cb.mdwn create mode 100644 doc/projects/datalad/bugs-done/metadata_--remove_stalls_as_of_88a7fb5cb/comment_1_5a7d8371910b27a82e479bdf3bb63d8f._comment create mode 100644 doc/projects/datalad/bugs-done/metadata_--remove_stalls_as_of_88a7fb5cb/comment_2_bdc4f86afd827beb20b3d888d96aefe9._comment create mode 100644 doc/projects/datalad/bugs-done/metadata_--remove_stalls_as_of_88a7fb5cb/comment_2_d3c6aa8c91630d4bb40b3267bfdebfbf._comment create mode 100644 doc/projects/datalad/bugs-done/mysterious_dependency_of_git_annex_status_output_of_the_added_file.mdwn create mode 100644 doc/projects/datalad/bugs-done/mysterious_dependency_of_git_annex_status_output_of_the_added_file/comment_1_4d7eb95c73eceb079a176db1957df25e._comment create mode 100644 doc/projects/datalad/bugs-done/mysterious_dependency_of_git_annex_status_output_of_the_added_file/comment_2_ef55541955a6a8840a63309aa403ecae._comment create mode 100644 doc/projects/datalad/bugs-done/new_whereis_--json_lost_information_about_web_urls_if_other_special_remotes_provide_them.mdwn create mode 100644 doc/projects/datalad/bugs-done/no_longer_non-0_exit_for___34__find_..._nonexisting__34__.mdwn create mode 100644 doc/projects/datalad/bugs-done/no_longer_non-0_exit_for___34__find_..._nonexisting__34__/comment_1_ac192db19137f8b65a13a2c3f7f454a9._comment create mode 100644 doc/projects/datalad/bugs-done/no_longer_non-0_exit_for___34__find_..._nonexisting__34__/comment_2_88d08c4b269c075e0724fa1bce70f671._comment create mode 100644 doc/projects/datalad/bugs-done/no_longer_non-0_exit_for___34__find_..._nonexisting__34__/comment_3_28060f4bb31730e3334cf3db56fc032b._comment create mode 100644 doc/projects/datalad/bugs-done/old__40__er__41___cp_from_coreutils_lacks_--reflink.mdwn create mode 100644 doc/projects/datalad/bugs-done/old__40__er__41___cp_from_coreutils_lacks_--reflink/comment_10_53714ec51d6ae4769f6c4dd9ee46ebae._comment create mode 100644 doc/projects/datalad/bugs-done/old__40__er__41___cp_from_coreutils_lacks_--reflink/comment_1_44965e93c65148f06bf4fe4cad95993c._comment create mode 100644 doc/projects/datalad/bugs-done/old__40__er__41___cp_from_coreutils_lacks_--reflink/comment_2_4a704f47a709a9de35358d6d2fb9fe20._comment create mode 100644 doc/projects/datalad/bugs-done/old__40__er__41___cp_from_coreutils_lacks_--reflink/comment_3_fea65a7f0218ccf27446ee7ce6fc017e._comment create mode 100644 doc/projects/datalad/bugs-done/old__40__er__41___cp_from_coreutils_lacks_--reflink/comment_4_c2d4485b2a49ada5ab5266e30df91b0b._comment create mode 100644 doc/projects/datalad/bugs-done/old__40__er__41___cp_from_coreutils_lacks_--reflink/comment_5_94d4cc9baf46fbc09c21abd08b441b0c._comment create mode 100644 doc/projects/datalad/bugs-done/old__40__er__41___cp_from_coreutils_lacks_--reflink/comment_6_db5de257e8cfb468bf31d46065b7d251._comment create mode 100644 doc/projects/datalad/bugs-done/old__40__er__41___cp_from_coreutils_lacks_--reflink/comment_7_644826ed86849eb4babf37bea3937a7c._comment create mode 100644 doc/projects/datalad/bugs-done/old__40__er__41___cp_from_coreutils_lacks_--reflink/comment_8_dd50ae03bc9a71e04528ac793e79a8b2._comment create mode 100644 doc/projects/datalad/bugs-done/old__40__er__41___cp_from_coreutils_lacks_--reflink/comment_9_552e36f88bc39bc68b65ccba06002082._comment create mode 100644 doc/projects/datalad/bugs-done/on_some_remotes_failing_to_detect_annex_spits_out_message_to_stderr_and_empty_lines_to_stderr__44___ignores_--json-error-messages.mdwn create mode 100644 doc/projects/datalad/bugs-done/on_some_remotes_failing_to_detect_annex_spits_out_message_to_stderr_and_empty_lines_to_stderr__44___ignores_--json-error-messages/comment_1_a7ad806ceb76f13ff8fdcce62bc0ed8a._comment create mode 100644 doc/projects/datalad/bugs-done/on_some_remotes_failing_to_detect_annex_spits_out_message_to_stderr_and_empty_lines_to_stderr__44___ignores_--json-error-messages/comment_2_495820d777c889f88466d725c11895f9._comment create mode 100644 doc/projects/datalad/bugs-done/parallel_get_can_fail_some_downloads_and_require_re-getting_.mdwn create mode 100644 doc/projects/datalad/bugs-done/parallel_get_can_fail_some_downloads_and_require_re-getting_/comment_1_1173126bd91dcb7fd13c57f06fd16c2b._comment create mode 100644 doc/projects/datalad/bugs-done/parallel_get_can_fail_some_downloads_and_require_re-getting_/comment_2_2ba8101ed0e91df7079744d1b37779fd._comment create mode 100644 doc/projects/datalad/bugs-done/parallel_get_can_fail_some_downloads_and_require_re-getting_/comment_3_6674e4dbc7437ce941bcef6272c3433b._comment create mode 100644 doc/projects/datalad/bugs-done/parallel_get_can_fail_some_downloads_and_require_re-getting_/comment_4_480df575c68bfb37b8bb4fb43737726f._comment create mode 100644 doc/projects/datalad/bugs-done/parallel_get_can_fail_some_downloads_and_require_re-getting_/comment_5_03e474b00b1cb2a5b8244d9161857b9b._comment create mode 100644 doc/projects/datalad/bugs-done/parallel_get_to_the_files_for_the_same_key_would_fail_with__thread_blocked_indefinitely_in_an_STM_transaction.mdwn create mode 100644 doc/projects/datalad/bugs-done/parallel_get_to_the_files_for_the_same_key_would_fail_with__thread_blocked_indefinitely_in_an_STM_transaction/comment_1_46420a92dbd8655af9b16349da24d0fc._comment create mode 100644 doc/projects/datalad/bugs-done/parallel_get_to_the_files_for_the_same_key_would_fail_with__thread_blocked_indefinitely_in_an_STM_transaction/comment_2_b1f4dc12ad00a4aa73e5bdc7c0a8f489._comment create mode 100644 doc/projects/datalad/bugs-done/parallel_get_to_the_files_for_the_same_key_would_fail_with__thread_blocked_indefinitely_in_an_STM_transaction/comment_3_d8ba7cc5a860e9ccaab32c637cc2a7cd._comment create mode 100644 doc/projects/datalad/bugs-done/parallel_get_to_the_files_for_the_same_key_would_fail_with__thread_blocked_indefinitely_in_an_STM_transaction/comment_4_eecaa7f7b0279c56902c90ed58d1444f._comment create mode 100644 doc/projects/datalad/bugs-done/parallel_get_to_the_files_for_the_same_key_would_fail_with__thread_blocked_indefinitely_in_an_STM_transaction/comment_5_052acf169f9c2b8b0233adddabb02559._comment create mode 100644 doc/projects/datalad/bugs-done/parallel_get_to_the_files_for_the_same_key_would_fail_with__thread_blocked_indefinitely_in_an_STM_transaction/comment_6_880c962d5ca77c494c984e7f74725265._comment create mode 100644 doc/projects/datalad/bugs-done/parallel_get_to_the_files_for_the_same_key_would_fail_with__thread_blocked_indefinitely_in_an_STM_transaction/comment_6_e33df0ec76069deb069b94c944d62c76._comment create mode 100644 doc/projects/datalad/bugs-done/prematurely___40__can__39__t_check_offline__41___marks_remote_as_annex-ignore.mdwn create mode 100644 doc/projects/datalad/bugs-done/presence_of_AWS_creds_ruins_access_to_public_urls.mdwn create mode 100644 doc/projects/datalad/bugs-done/presence_of_AWS_creds_ruins_access_to_public_urls/comment_1_9222f76d21e8260327b4f127cc90782d._comment create mode 100644 doc/projects/datalad/bugs-done/presence_of_AWS_creds_ruins_access_to_public_urls/comment_2_9e694fdee4a40581a86d21b962f99f25._comment create mode 100644 doc/projects/datalad/bugs-done/presence_of_AWS_creds_ruins_access_to_public_urls/comment_3_79626c62d4ce8be2524f9ef3a1351363._comment create mode 100644 doc/projects/datalad/bugs-done/presence_of_AWS_creds_ruins_access_to_public_urls/comment_4_40d710dd89b305a64ff8df5d238778e8._comment create mode 100644 doc/projects/datalad/bugs-done/prevent_silent_data_loss_on_unlocked_files.mdwn create mode 100644 doc/projects/datalad/bugs-done/prevent_silent_data_loss_on_unlocked_files/comment_1_9b101babc7cb9e697a6195366d4a0a67._comment create mode 100644 doc/projects/datalad/bugs-done/prevent_silent_data_loss_on_unlocked_files/comment_2_9bfcb8386d5589623423f4d3f040df3c._comment create mode 100644 doc/projects/datalad/bugs-done/prevent_silent_data_loss_on_unlocked_files/comment_3_704ecfd2888a8153eaa5e4a8e6e3d011._comment create mode 100644 doc/projects/datalad/bugs-done/prevent_silent_data_loss_on_unlocked_files/comment_4_3291fcd5100fda8d41fb8714cec15b30._comment create mode 100644 doc/projects/datalad/bugs-done/prevent_silent_data_loss_on_unlocked_files/comment_5_adb69305a31cf55ff62497b6de8e2f6a._comment create mode 100644 doc/projects/datalad/bugs-done/prop__95__isomorphic__95__key__95__encode_fails_with_external_backend_changes.mdwn create mode 100644 doc/projects/datalad/bugs-done/prop__95__isomorphic__95__key__95__encode_fails_with_external_backend_changes/comment_1_7f23940cfa4451e4cd7137e2d7a46d86._comment create mode 100644 doc/projects/datalad/bugs-done/prop__95__relPathDirToFileAbs__95__basics_fail_on_crippled___126__.mdwn create mode 100644 doc/projects/datalad/bugs-done/prop__95__relPathDirToFileAbs__95__basics_fail_on_crippled___126__/comment_1_23bf4756af808d1b2cf89f7da119031f._comment create mode 100644 doc/projects/datalad/bugs-done/prop__95__relPathDirToFileAbs__95__basics_fail_on_crippled___126__/comment_2_63d3ff9c10ef530d318653bfadccab22._comment create mode 100644 doc/projects/datalad/bugs-done/prop__95__relPathDirToFileAbs__95__basics_fail_on_crippled___126__/comment_3_e8432845460fd0598f8fea5d00c70993._comment create mode 100644 doc/projects/datalad/bugs-done/regression_-_fails_to_drop_._Exit_code_11_wo_--debug__44___and_1_with_--debug.mdwn create mode 100644 doc/projects/datalad/bugs-done/regression_-_fails_to_drop_._Exit_code_11_wo_--debug__44___and_1_with_--debug/comment_1_3c2578d17ce519f80aa278a546df29cf._comment create mode 100644 doc/projects/datalad/bugs-done/regression_-_yt__58___prefix_for___34__regular__34___urls.mdwn create mode 100644 doc/projects/datalad/bugs-done/regression_-_yt__58___prefix_for___34__regular__34___urls/comment_1_56cd6e167c86f4419ac0971922f2e5d1._comment create mode 100644 doc/projects/datalad/bugs-done/regression_-_yt__58___prefix_for___34__regular__34___urls/comment_2_1cebe1385d2b8a244afc259a78f72ada._comment create mode 100644 doc/projects/datalad/bugs-done/regression_-_yt__58___prefix_for___34__regular__34___urls/comment_2_ca0bf1079acc89a4a79e55f8f58403c0._comment create mode 100644 doc/projects/datalad/bugs-done/regression_-_yt__58___prefix_for___34__regular__34___urls/comment_4_f05e1047c5d22dddba21a9faa3397f0d._comment create mode 100644 doc/projects/datalad/bugs-done/regression_-_yt__58___prefix_for___34__regular__34___urls/comment_5_811ba6ec07f6f30c701201178cdb00ac._comment create mode 100644 doc/projects/datalad/bugs-done/regression_-_yt__58___prefix_for___34__regular__34___urls/comment_6_2cd156baab77dc3b3c248a2368b59040._comment create mode 100644 doc/projects/datalad/bugs-done/regression_-_yt__58___prefix_for___34__regular__34___urls/comment_7_9f3f7c04524063960f1451c90948a41f._comment create mode 100644 doc/projects/datalad/bugs-done/regression_-_yt__58___prefix_for___34__regular__34___urls/comment_8_55b111079ecb9732a42d3486160e77b5._comment create mode 100644 doc/projects/datalad/bugs-done/regression__58___annex_add_of_moved_file_errors_out.mdwn create mode 100644 doc/projects/datalad/bugs-done/regression__58___fails_to___39__add_.__39___if_file_was_renamed.mdwn create mode 100644 doc/projects/datalad/bugs-done/regression__58___fails_to___39__add_.__39___if_file_was_renamed/comment_1_bd132d7cfa21b2ea3236b76dffaff156._comment create mode 100644 doc/projects/datalad/bugs-done/regression__58___fails_to___39__add_.__39___if_file_was_renamed/comment_2_bceb84ed261a160c4041c146372fc551._comment create mode 100644 doc/projects/datalad/bugs-done/regression__58___index.lck_in_shared-group_is_not_g+w.mdwn create mode 100644 doc/projects/datalad/bugs-done/regression__58___index.lck_in_shared-group_is_not_g+w/comment_1_7f25fd487c60f8b6fcaddd1444d898af._comment create mode 100644 doc/projects/datalad/bugs-done/regression__58___index.lck_in_shared-group_is_not_g+w/comment_2_92c7a561537e0c6628f30be233b9d7f6._comment create mode 100644 doc/projects/datalad/bugs-done/regression__58___index.lck_in_shared-group_is_not_g+w/comment_3_621beade26a1dbbdea000ca43d93a325._comment create mode 100644 doc/projects/datalad/bugs-done/regression__58___index.lck_in_shared-group_is_not_g+w/comment_4_3b19a1d3e0e13e407af476b54b725bd1._comment create mode 100644 doc/projects/datalad/bugs-done/regression__58___index.lck_in_shared-group_is_not_g+w/comment_5_0655ad5ece1ccd1892ea217aac493594._comment create mode 100644 doc/projects/datalad/bugs-done/regression__58___index.lck_in_shared-group_is_not_g+w/comment_6_9dce3bf28e416dbcc08b314dbc08c8a4._comment create mode 100644 doc/projects/datalad/bugs-done/regression__58___standalone_build_is_deficient_on_linux_after_7.20190819+git2-g908476a9b-1__126__ndall+1_some_time.mdwn create mode 100644 doc/projects/datalad/bugs-done/regression__58___standalone_build_is_deficient_on_linux_after_7.20190819+git2-g908476a9b-1__126__ndall+1_some_time/comment_1_1735409e62ce82f7ba7258b0167fda06._comment create mode 100644 doc/projects/datalad/bugs-done/reinject__58___silent_failure_with_absolute_path_to_poi.mdwn create mode 100644 doc/projects/datalad/bugs-done/reinject__58___silent_failure_with_absolute_path_to_poi/comment_1_10590563da0f80fa8326a90977966509._comment create mode 100644 doc/projects/datalad/bugs-done/reinject__58___silent_failure_with_absolute_path_to_poi/comment_2_1b9b2ebc78949c7b39a255c291d11891._comment create mode 100644 doc/projects/datalad/bugs-done/reinject__58___silent_failure_with_absolute_path_to_poi/comment_3_0ec752dbe8ef55a9884c1c5e83887505._comment create mode 100644 doc/projects/datalad/bugs-done/remote_repository_must_be_version_6_as_well_to_have_copied_files_appear_correctly.mdwn create mode 100644 doc/projects/datalad/bugs-done/reports_success_when_addurl_--batch__a_file_which_is_.gitignore__39__d.mdwn create mode 100644 doc/projects/datalad/bugs-done/return_--backend_for_addurl___63___.mdwn create mode 100644 doc/projects/datalad/bugs-done/running_tests_on_NFS_HOME_does_not_exit_cleanly__58___gpgtmp.mdwn create mode 100644 doc/projects/datalad/bugs-done/running_tests_on_NFS_HOME_does_not_exit_cleanly__58___gpgtmp/comment_1_84a2d253843903f9811652b78d0fa7ba._comment create mode 100644 doc/projects/datalad/bugs-done/set_metadata_leaks_from_one___40__staged__41___key_to_another_during_rename_of_file.mdwn create mode 100644 doc/projects/datalad/bugs-done/set_metadata_leaks_from_one___40__staged__41___key_to_another_during_rename_of_file/comment_1_cd7043b66977b2a668bbd52f4d8e31ff._comment create mode 100644 doc/projects/datalad/bugs-done/set_metadata_leaks_from_one___40__staged__41___key_to_another_during_rename_of_file/comment_2_e5b43f5733181fba9f79ae0035b354ef._comment create mode 100644 doc/projects/datalad/bugs-done/set_metadata_leaks_from_one___40__staged__41___key_to_another_during_rename_of_file/comment_3_10d6135ad4b0c9706ff7b932323118d3._comment create mode 100644 doc/projects/datalad/bugs-done/set_metadata_leaks_from_one___40__staged__41___key_to_another_during_rename_of_file/comment_4_fda77062452ac619a23298007bc0148a._comment create mode 100644 doc/projects/datalad/bugs-done/set_metadata_leaks_from_one___40__staged__41___key_to_another_during_rename_of_file/comment_5_fa6d5d0afdc00824da0e04d9bf23d6f4._comment create mode 100644 doc/projects/datalad/bugs-done/shared_setting_of_git_causes_annex__39__ed_files_to_be_writeable__33__.mdwn create mode 100644 doc/projects/datalad/bugs-done/shared_setting_of_git_causes_annex__39__ed_files_to_be_writeable__33__/comment_10_2e61ccc41839b8da70ad26d31e40ad74._comment create mode 100644 doc/projects/datalad/bugs-done/shared_setting_of_git_causes_annex__39__ed_files_to_be_writeable__33__/comment_11_e9af4784ffb84b49b6faaa21aa7c8efc._comment create mode 100644 doc/projects/datalad/bugs-done/shared_setting_of_git_causes_annex__39__ed_files_to_be_writeable__33__/comment_12_fc10e403f35f47a6c4464f3f68d01eca._comment create mode 100644 doc/projects/datalad/bugs-done/shared_setting_of_git_causes_annex__39__ed_files_to_be_writeable__33__/comment_13_43a09de767ed9060dd91d6eca5e0b3a3._comment create mode 100644 doc/projects/datalad/bugs-done/shared_setting_of_git_causes_annex__39__ed_files_to_be_writeable__33__/comment_1_df04a6bd62a60789d8a59cce4b62728e._comment create mode 100644 doc/projects/datalad/bugs-done/shared_setting_of_git_causes_annex__39__ed_files_to_be_writeable__33__/comment_2_0619eec44cddf3d3b1aae27c7bd1389a._comment create mode 100644 doc/projects/datalad/bugs-done/shared_setting_of_git_causes_annex__39__ed_files_to_be_writeable__33__/comment_3_aae8dd8b3b0ce4647ec2d30e1d682339._comment create mode 100644 doc/projects/datalad/bugs-done/shared_setting_of_git_causes_annex__39__ed_files_to_be_writeable__33__/comment_4_c72e6646e39cc487ea52cd17925a548f._comment create mode 100644 doc/projects/datalad/bugs-done/shared_setting_of_git_causes_annex__39__ed_files_to_be_writeable__33__/comment_5_d8c8b725ee91a899a131bf505bd9a2e3._comment create mode 100644 doc/projects/datalad/bugs-done/shared_setting_of_git_causes_annex__39__ed_files_to_be_writeable__33__/comment_6_d0d8065b78c22e62ef780c27e4d5952c._comment create mode 100644 doc/projects/datalad/bugs-done/shared_setting_of_git_causes_annex__39__ed_files_to_be_writeable__33__/comment_7_a82064795fdbdb0187763aeee4a308ff._comment create mode 100644 doc/projects/datalad/bugs-done/shared_setting_of_git_causes_annex__39__ed_files_to_be_writeable__33__/comment_8_c3d447a8f4e63f6a28a02ccb4eed1ad4._comment create mode 100644 doc/projects/datalad/bugs-done/shared_setting_of_git_causes_annex__39__ed_files_to_be_writeable__33__/comment_9_f74642e1dfc4e533b9582e5a13a16898._comment create mode 100644 doc/projects/datalad/bugs-done/should_not_assume_entire_name_to_be_an_extension__63__.mdwn create mode 100644 doc/projects/datalad/bugs-done/shouldn__39__t_keep_permissions_of_the_ssh_remote__63__.mdwn create mode 100644 doc/projects/datalad/bugs-done/shouldn__39__t_keep_permissions_of_the_ssh_remote__63__/comment_1_35eeb15c0031c18ba6d0922bb7ae8ed3._comment create mode 100644 doc/projects/datalad/bugs-done/shouldn__39__t_keep_permissions_of_the_ssh_remote__63__/comment_2_65232a9c2bbba075d325ce00b7c5e13f._comment create mode 100644 doc/projects/datalad/bugs-done/significant_performance_regression_impacting_datal.mdwn create mode 100644 doc/projects/datalad/bugs-done/significant_performance_regression_impacting_datal/comment_10_37d5186dfa2da31526c4eafbbbfdbc33._comment create mode 100644 doc/projects/datalad/bugs-done/significant_performance_regression_impacting_datal/comment_11_51a3a86a290b0e3994507f3f64e7c72a._comment create mode 100644 doc/projects/datalad/bugs-done/significant_performance_regression_impacting_datal/comment_12_c841c9db2000c65c56ce8e26e58a3f62._comment create mode 100644 doc/projects/datalad/bugs-done/significant_performance_regression_impacting_datal/comment_13_f6bec279f43603719694e44d99309fc7._comment create mode 100644 doc/projects/datalad/bugs-done/significant_performance_regression_impacting_datal/comment_14_4d2998ea843dd8adee8b7b066d97d942._comment create mode 100644 doc/projects/datalad/bugs-done/significant_performance_regression_impacting_datal/comment_15_c9488d6180e741dfec0793f546c9eb29._comment create mode 100644 doc/projects/datalad/bugs-done/significant_performance_regression_impacting_datal/comment_16_65aaf8e15cd15187cd63863634f25091._comment create mode 100644 doc/projects/datalad/bugs-done/significant_performance_regression_impacting_datal/comment_17_045fd8ebe1f9441e42c9c6fbf5c06563._comment create mode 100644 doc/projects/datalad/bugs-done/significant_performance_regression_impacting_datal/comment_17_8df0e346ed85e52ec94763d11c174ab3._comment create mode 100644 doc/projects/datalad/bugs-done/significant_performance_regression_impacting_datal/comment_18_3e57d7d4640de95a059b2ab3d1e9d54e._comment create mode 100644 doc/projects/datalad/bugs-done/significant_performance_regression_impacting_datal/comment_19_80372cd15a6a8812072a446c41fed4e7._comment create mode 100644 doc/projects/datalad/bugs-done/significant_performance_regression_impacting_datal/comment_1_3eb1b092f41dc5c04d74f7a03249aa0f._comment create mode 100644 doc/projects/datalad/bugs-done/significant_performance_regression_impacting_datal/comment_21_0119751108d8d9fe6848269594bec273._comment create mode 100644 doc/projects/datalad/bugs-done/significant_performance_regression_impacting_datal/comment_22_192f2055345f1156a06d93b4c25e6722._comment create mode 100644 doc/projects/datalad/bugs-done/significant_performance_regression_impacting_datal/comment_23_8693e7e9c800f25cbd274b6781d834d6._comment create mode 100644 doc/projects/datalad/bugs-done/significant_performance_regression_impacting_datal/comment_24_6d11f6aa4b1a435bdf6d165eb8e6db8a._comment create mode 100644 doc/projects/datalad/bugs-done/significant_performance_regression_impacting_datal/comment_25_5525b58ec94084a926c71f749d1f4233._comment create mode 100644 doc/projects/datalad/bugs-done/significant_performance_regression_impacting_datal/comment_26_cb64b1798af6ad507ce4a4196e9c5b1d._comment create mode 100644 doc/projects/datalad/bugs-done/significant_performance_regression_impacting_datal/comment_27_db91e10d0bea246686ba2241b348e67d._comment create mode 100644 doc/projects/datalad/bugs-done/significant_performance_regression_impacting_datal/comment_28_0d6a37f823cd9cb3ed1e6e90066ebd2c._comment create mode 100644 doc/projects/datalad/bugs-done/significant_performance_regression_impacting_datal/comment_29_0f3c8949ae362b43ac7db02eb4e11890._comment create mode 100644 doc/projects/datalad/bugs-done/significant_performance_regression_impacting_datal/comment_2_521f784d686fcaeb5e081599fbdf9903._comment create mode 100644 doc/projects/datalad/bugs-done/significant_performance_regression_impacting_datal/comment_30_386c0cfe688effb1543ffd01a54717e0._comment create mode 100644 doc/projects/datalad/bugs-done/significant_performance_regression_impacting_datal/comment_31_97fa9b7729805704a6a22cf18082e203._comment create mode 100644 doc/projects/datalad/bugs-done/significant_performance_regression_impacting_datal/comment_32_0ab5e774dad1e6e74a5c72b95e40d659._comment create mode 100644 doc/projects/datalad/bugs-done/significant_performance_regression_impacting_datal/comment_33_6e5121e066998a303cf68ebc53e9fc15._comment create mode 100644 doc/projects/datalad/bugs-done/significant_performance_regression_impacting_datal/comment_34_86d07025980e0b50d1a52f73c049944a._comment create mode 100644 doc/projects/datalad/bugs-done/significant_performance_regression_impacting_datal/comment_35_d3437076c759eedc0c8d5d15db035455._comment create mode 100644 doc/projects/datalad/bugs-done/significant_performance_regression_impacting_datal/comment_36_25fa8b726e06dc69e3a0d9ed675da1d1._comment create mode 100644 doc/projects/datalad/bugs-done/significant_performance_regression_impacting_datal/comment_3_d30a515103d04fd966aadee7f141aeee._comment create mode 100644 doc/projects/datalad/bugs-done/significant_performance_regression_impacting_datal/comment_4_4011786784a140442dd7ecd1cefe559b._comment create mode 100644 doc/projects/datalad/bugs-done/significant_performance_regression_impacting_datal/comment_4_85d1031d2b51c0fc1271c283d8ee7888._comment create mode 100644 doc/projects/datalad/bugs-done/significant_performance_regression_impacting_datal/comment_5_b0f1e94e96cf8fe992425cf81f8d1105._comment create mode 100644 doc/projects/datalad/bugs-done/significant_performance_regression_impacting_datal/comment_7_35217e61ccf6936e105df8de7e1775d0._comment create mode 100644 doc/projects/datalad/bugs-done/significant_performance_regression_impacting_datal/comment_8_29bde900ef625702b49cf020118f940f._comment create mode 100644 doc/projects/datalad/bugs-done/significant_performance_regression_impacting_datal/comment_9_431582f1c218f27e50849df1444dc845._comment create mode 100644 doc/projects/datalad/bugs-done/some_annex_addurl_--fast_--with-files_--json_--json-error-messages_--batch__do_not_quit.mdwn create mode 100644 doc/projects/datalad/bugs-done/some_annex_addurl_--fast_--with-files_--json_--json-error-messages_--batch__do_not_quit/comment_1_4123b5b93a220c1ba46126a5d97b6ff9._comment create mode 100644 doc/projects/datalad/bugs-done/some_annex_addurl_--fast_--with-files_--json_--json-error-messages_--batch__do_not_quit/comment_2_7d37b8d79fcb6a0edd99e0bd6f2b0515._comment create mode 100644 doc/projects/datalad/bugs-done/some_annex_addurl_--fast_--with-files_--json_--json-error-messages_--batch__do_not_quit/comment_3_7ec51c8996c7cc4b555313e84634e406._comment create mode 100644 doc/projects/datalad/bugs-done/some_annex_addurl_--fast_--with-files_--json_--json-error-messages_--batch__do_not_quit/comment_4_7bd5a28d5ba1eefd5a96483b5f00a89e._comment create mode 100644 doc/projects/datalad/bugs-done/some_annex_addurl_--fast_--with-files_--json_--json-error-messages_--batch__do_not_quit/comment_5_3c407c1924e21aa1ec300875680dc3b3._comment create mode 100644 doc/projects/datalad/bugs-done/some_annex_addurl_--fast_--with-files_--json_--json-error-messages_--batch__do_not_quit/comment_6_58997665e5aa0a237a3ec90efca92891._comment create mode 100644 doc/projects/datalad/bugs-done/some_test__40__s__63____41___regularly_fail_starting_recently.mdwn create mode 100644 doc/projects/datalad/bugs-done/some_test__40__s__63____41___regularly_fail_starting_recently/comment_1_d4c417df9a8e6c13c06ccfc21853de02._comment create mode 100644 doc/projects/datalad/bugs-done/some_test__40__s__63____41___regularly_fail_starting_recently/comment_2_16a96277aecccfa32cd918ac662ce6f8._comment create mode 100644 doc/projects/datalad/bugs-done/some_tests_fail_while_running_under_NFS.mdwn create mode 100644 doc/projects/datalad/bugs-done/some_tests_fail_while_running_under_NFS/comment_1_8e0f72f633ec79bd373b009046ab66b7._comment create mode 100644 doc/projects/datalad/bugs-done/some_tests_fail_while_running_under_NFS/comment_2_ee9cc13cf34432be00a906bf65cebafd._comment create mode 100644 doc/projects/datalad/bugs-done/some_transfers_for_get_-J4_fail_over_ssh__47__rsync_and_require_retry.mdwn create mode 100644 doc/projects/datalad/bugs-done/some_transfers_for_get_-J4_fail_over_ssh__47__rsync_and_require_retry/comment_1_b762aa4a31f2153c00988d185ce5efbe._comment create mode 100644 doc/projects/datalad/bugs-done/some_transfers_for_get_-J4_fail_over_ssh__47__rsync_and_require_retry/comment_2_7d5c57bf17659769d9cf4d56774ba67e._comment create mode 100644 doc/projects/datalad/bugs-done/some_transfers_for_get_-J4_fail_over_ssh__47__rsync_and_require_retry/comment_3_8a5ceb261338ab55b5c8c2daa56d04ce._comment create mode 100644 doc/projects/datalad/bugs-done/some_transfers_for_get_-J4_fail_over_ssh__47__rsync_and_require_retry/comment_4_bedf66f7257511d1d245ff0c6bcfe5f6._comment create mode 100644 doc/projects/datalad/bugs-done/sporadic___40____63____41___fail_of_crypto_test__63__.mdwn create mode 100644 doc/projects/datalad/bugs-done/sporadic___40____63____41___fail_of_crypto_test__63__/comment_1_9909507b034e25db04e5407717fab315._comment create mode 100644 doc/projects/datalad/bugs-done/sporadic___40____63____41___fail_of_crypto_test__63__/comment_2_a254c4de61a74bf314eb33e301c199f0._comment create mode 100644 doc/projects/datalad/bugs-done/sporadic___40____63____41___fail_of_crypto_test__63__/comment_3_89e9d65073a58188024290a2b32fda2e._comment create mode 100644 doc/projects/datalad/bugs-done/standalone_build_is_slightly_out_of_date.mdwn create mode 100644 doc/projects/datalad/bugs-done/standalone_build_is_slightly_out_of_date/comment_1_349f2d8f6ef0fddcfe576fc08b3cccb6._comment create mode 100644 doc/projects/datalad/bugs-done/standalone_builds_shouldn__39__t_pollute___126____47__.ssh_with_helpers_merely_upon_annex_init.mdwn create mode 100644 doc/projects/datalad/bugs-done/standalone_runshell_can_race_and_fail_to_remove___96____126____47__.cache__47__git-annex__47__locales__47____96___dirs.mdwn create mode 100644 doc/projects/datalad/bugs-done/standalone_runshell_can_race_and_fail_to_remove___96____126____47__.cache__47__git-annex__47__locales__47____96___dirs/comment_1_343ac13424b0b65db2094c595bcabd7f._comment create mode 100644 doc/projects/datalad/bugs-done/standalone_runshell_can_race_and_fail_to_remove___96____126____47__.cache__47__git-annex__47__locales__47____96___dirs/comment_2_c43bb7ffa7b900f5824b4495a6a82d0e._comment create mode 100644 doc/projects/datalad/bugs-done/standalone_runshell_can_race_and_fail_to_remove___96____126____47__.cache__47__git-annex__47__locales__47____96___dirs/comment_3_57681d5959095d9a3e6ea9e4d0679c85._comment create mode 100644 doc/projects/datalad/bugs-done/standalone_runshell_can_race_and_fail_to_remove___96____126____47__.cache__47__git-annex__47__locales__47____96___dirs/comment_4_5c2c6003b45d78b9e0bee95f5a12c48c._comment create mode 100644 doc/projects/datalad/bugs-done/standalone_runshell_can_race_and_fail_to_remove___96____126____47__.cache__47__git-annex__47__locales__47____96___dirs/comment_5_57834ef04f206e1b351b36ba32ce447f._comment create mode 100644 doc/projects/datalad/bugs-done/standalone_runshell_can_race_and_fail_to_remove___96____126____47__.cache__47__git-annex__47__locales__47____96___dirs/comment_6_9ee31c8d92178b38bbc920df395ee284._comment create mode 100644 doc/projects/datalad/bugs-done/standalone_runshell_can_race_and_fail_to_remove___96____126____47__.cache__47__git-annex__47__locales__47____96___dirs/comment_7_2abc6e368033bc636debbcd83dd2b4ed._comment create mode 100644 doc/projects/datalad/bugs-done/standalone_shim_is_segfaulting_if_IFS__61____36____39____92__013__39__.mdwn create mode 100644 doc/projects/datalad/bugs-done/standalone_shim_is_segfaulting_if_IFS__61____36____39____92__013__39__/comment_1_ab8017246c0075b731c7d31235672c01._comment create mode 100644 doc/projects/datalad/bugs-done/standalone_shim_is_segfaulting_if_IFS__61____36____39____92__013__39__/comment_2_2b7afff24ba025fe3e272ff6f607eadf._comment create mode 100644 doc/projects/datalad/bugs-done/standalone_shim_is_segfaulting_if_IFS__61____36____39____92__013__39__/comment_3_ba1b34111d47d58517ea64f537214e98._comment create mode 100644 doc/projects/datalad/bugs-done/standalone_shim_is_segfaulting_if_IFS__61____36____39____92__013__39__/comment_4_297b462c0344b8c7e5e113fdda3642f4._comment create mode 100644 doc/projects/datalad/bugs-done/storeKey_when_already_present_failures_on_Windows.mdwn create mode 100644 doc/projects/datalad/bugs-done/storeKey_when_already_present_failures_on_Windows/comment_1_7e089c436af03ffd8ad00dba45156a14._comment create mode 100644 doc/projects/datalad/bugs-done/storeKey_when_already_present_failures_on_Windows/comment_2_07f7881be6b0d29cdf64a7839b669b3e._comment create mode 100644 doc/projects/datalad/bugs-done/storeKey_when_already_present_failures_on_Windows/comment_3_c570246b0484ed3694efff62feff968c._comment create mode 100644 doc/projects/datalad/bugs-done/storeKey_when_already_present_failures_on_Windows/comment_4_2f701f39286c3a75a88407dcc6947081._comment create mode 100644 doc/projects/datalad/bugs-done/storeKey_when_already_present_failures_on_Windows/comment_5_096b3af691987ef20281c87519a31935._comment create mode 100644 doc/projects/datalad/bugs-done/strips___95___from_extensions_in_E_backends__63__.mdwn create mode 100644 doc/projects/datalad/bugs-done/test_fail_on_windows__58___permission_denied_.mdwn create mode 100644 doc/projects/datalad/bugs-done/test_fail_on_windows__58___permission_denied_/comment_1_9f46a99e5f570de2313a5521b58640b3._comment create mode 100644 doc/projects/datalad/bugs-done/testremote_breeds_way_too_many_instances_of_the_externals_remote.mdwn create mode 100644 doc/projects/datalad/bugs-done/testremote_breeds_way_too_many_instances_of_the_externals_remote/comment_1_6c4afa18ad31f46ff8c0b827415373e4._comment create mode 100644 doc/projects/datalad/bugs-done/testremote_breeds_way_too_many_instances_of_the_externals_remote/comment_2_daa09ac406dea6cd3ab74fe19d89d956._comment create mode 100644 doc/projects/datalad/bugs-done/testremote_failures_starting_with_aeca7c220.mdwn create mode 100644 doc/projects/datalad/bugs-done/testremote_failures_starting_with_aeca7c220/comment_1_d779827a6cc3d3d7bb6edfa410170e09._comment create mode 100644 doc/projects/datalad/bugs-done/testremote_failures_starting_with_aeca7c220/comment_2_4cfb0979773618a0bc18d52bf0f274e4._comment create mode 100644 doc/projects/datalad/bugs-done/testremote_failures_starting_with_aeca7c220/comment_2_d53b98bca623d4d25bab58563e7577b3._comment create mode 100644 doc/projects/datalad/bugs-done/testremote_failures_starting_with_aeca7c220/comment_4_a80f9277eb6f6c49710d5008bc2c2c42._comment create mode 100644 doc/projects/datalad/bugs-done/testremote_with_external_remote_hangs_after_asyncexternal_merge.mdwn create mode 100644 doc/projects/datalad/bugs-done/testremote_with_external_remote_hangs_after_asyncexternal_merge/comment_1_854aecbc440dc3a5aa15f9de5f36c9e8._comment create mode 100644 doc/projects/datalad/bugs-done/tests_fail___40__gpg-agent_related__63____41___when_running_build_inside_singularity_container.mdwn create mode 100644 doc/projects/datalad/bugs-done/tests_fail___40__gpg-agent_related__63____41___when_running_build_inside_singularity_container/comment_1_d36c27dca4d266d1e6639e3435198016._comment create mode 100644 doc/projects/datalad/bugs-done/tests_fail___40__gpg-agent_related__63____41___when_running_build_inside_singularity_container/comment_2_c61b14b76cf06c0b10257c1a84d9478a._comment create mode 100644 doc/projects/datalad/bugs-done/tests_fail___40__gpg-agent_related__63____41___when_running_build_inside_singularity_container/comment_3_ea210a22073919be434884f006212e6a._comment create mode 100644 doc/projects/datalad/bugs-done/tests_fail___40__gpg-agent_related__63____41___when_running_build_inside_singularity_container/comment_4_0cfd7d0d93d0747d42d20f13b788fe43._comment create mode 100644 doc/projects/datalad/bugs-done/tests_fail___40__gpg-agent_related__63____41___when_running_build_inside_singularity_container/comment_5_944a4474401b2fa0b4f3631bac63a07d._comment create mode 100644 doc/projects/datalad/bugs-done/tests_fail___40__gpg-agent_related__63____41___when_running_build_inside_singularity_container/comment_5_fa8c65c2223d2be21aa95e5889c1f352._comment create mode 100644 doc/projects/datalad/bugs-done/tests_fail___40__gpg-agent_related__63____41___when_running_build_inside_singularity_container/comment_6_d358bf55d89f5d0609d792a26757d0f4._comment create mode 100644 doc/projects/datalad/bugs-done/tests_fail_on_Linux_build.mdwn create mode 100644 doc/projects/datalad/bugs-done/tests_fail_on_Linux_build/comment_1_9932a7c60bb369fbffba52092e03bce3._comment create mode 100644 doc/projects/datalad/bugs-done/tests_fail_on_Linux_build/comment_2_c042d95b58500933e5932176037ead8f._comment create mode 100644 doc/projects/datalad/bugs-done/thread_blocked_indefinitely_in_an_STM_transaction__while_moving_within__a_local_clone.mdwn create mode 100644 doc/projects/datalad/bugs-done/treatment_of_largefiles_is_not_working_for_addurl_--fast___40__or_--relaxed__41__.mdwn create mode 100644 doc/projects/datalad/bugs-done/unable_to_get_content_via_ssh_without_write_perms.mdwn create mode 100644 doc/projects/datalad/bugs-done/unable_to_get_content_via_ssh_without_write_perms/comment_10_2562d33a1cafb01b2cddb9a42a635616._comment create mode 100644 doc/projects/datalad/bugs-done/unable_to_get_content_via_ssh_without_write_perms/comment_1_8b4fd2331ff62c984f91a9536a3a7e2b._comment create mode 100644 doc/projects/datalad/bugs-done/unable_to_get_content_via_ssh_without_write_perms/comment_2_3889b10d60b007de72b3af87e920e74e._comment create mode 100644 doc/projects/datalad/bugs-done/unable_to_get_content_via_ssh_without_write_perms/comment_3_a4f9bb23f0682a66e951b96aed6ae214._comment create mode 100644 doc/projects/datalad/bugs-done/unable_to_get_content_via_ssh_without_write_perms/comment_4_1b01ff1b092976af137bdfc2c9e28fba._comment create mode 100644 doc/projects/datalad/bugs-done/unable_to_get_content_via_ssh_without_write_perms/comment_5_9e4b82d27ddbb42d74f10a85635590e7._comment create mode 100644 doc/projects/datalad/bugs-done/unable_to_get_content_via_ssh_without_write_perms/comment_6_11cb8251521014ef81b53090f5c78376._comment create mode 100644 doc/projects/datalad/bugs-done/unable_to_get_content_via_ssh_without_write_perms/comment_7_ba7e53135285dbf198f5aa12d7edc1cd._comment create mode 100644 doc/projects/datalad/bugs-done/unable_to_get_content_via_ssh_without_write_perms/comment_8_95ff27c621afe43abfd7403f343b612c._comment create mode 100644 doc/projects/datalad/bugs-done/unable_to_get_content_via_ssh_without_write_perms/comment_9_b70343f8cb81807a7da0da5637d8c750._comment create mode 100644 doc/projects/datalad/bugs-done/unable_to_get_from_public_S3_remote_without_clear_reasoning_why.mdwn create mode 100644 doc/projects/datalad/bugs-done/unable_to_get_from_public_S3_remote_without_clear_reasoning_why/comment_1_87983a598cacaa8800db4a01ec23ba1b._comment create mode 100644 doc/projects/datalad/bugs-done/unable_to_get_from_public_S3_remote_without_clear_reasoning_why/comment_2_b9e5b868dd5379de18ed77907d1b42a3._comment create mode 100644 doc/projects/datalad/bugs-done/unable_to_get_from_public_S3_remote_without_clear_reasoning_why/comment_3_667c5b94580e2ca0305d4ed97c2e199f._comment create mode 100644 doc/projects/datalad/bugs-done/unclear_why_annex_fails_to_get_a_file_from_a_public_S3_bucket_where_it_exported_before.mdwn create mode 100644 doc/projects/datalad/bugs-done/unclear_why_annex_fails_to_get_a_file_from_a_public_S3_bucket_where_it_exported_before/comment_1_08514c489b916b2ae8e4e0122051856f._comment create mode 100644 doc/projects/datalad/bugs-done/unclear_why_annex_fails_to_get_a_file_from_a_public_S3_bucket_where_it_exported_before/comment_2_1ae05c24612f50cfe03e2569b332a522._comment create mode 100644 doc/projects/datalad/bugs-done/unclear_why_annex_fails_to_get_a_file_from_a_public_S3_bucket_where_it_exported_before/comment_3_ae81a2ac4b2167d48c8a447811a492a2._comment create mode 100644 doc/projects/datalad/bugs-done/unclear_why_annex_fails_to_get_a_file_from_a_public_S3_bucket_where_it_exported_before/comment_4_c49e48ea12ed0a0edb675b532279a5a8._comment create mode 100644 doc/projects/datalad/bugs-done/upgrade___40__from_v5__41___fails_without_stating_any_reason__47__hints.mdwn create mode 100644 doc/projects/datalad/bugs-done/use_of_annex_in_submodule_replaces_.git_with_incorrect_symlink.mdwn create mode 100644 doc/projects/datalad/bugs-done/using_regular_magic_file__warning_pollutes_stderr.mdwn create mode 100644 doc/projects/datalad/bugs-done/v6_-_under_subdir__58___git_add___34__whines__34____44___git_commit___34__blows__34__.mdwn create mode 100644 doc/projects/datalad/bugs-done/v6_-_under_subdir__58___git_add___34__whines__34____44___git_commit___34__blows__34__/comment_1_1c86937cee067b5980852fcb066b0bfb._comment create mode 100644 doc/projects/datalad/bugs-done/v6_-_under_subdir__58___git_add___34__whines__34____44___git_commit___34__blows__34__/comment_2_bd552525b7bb2ceaad72c8fa3bf41c6b._comment create mode 100644 doc/projects/datalad/bugs-done/v6_-_under_subdir__58___git_add___34__whines__34____44___git_commit___34__blows__34__/comment_3_8cfa8fe790ff2586374f46ed10cc8fbe._comment create mode 100644 doc/projects/datalad/bugs-done/v6_-_under_subdir__58___git_add___34__whines__34____44___git_commit___34__blows__34__/comment_4_40e9a5b641200c92725df31a654b6a05._comment create mode 100644 doc/projects/datalad/bugs-done/v6_-_under_subdir__58___git_add___34__whines__34____44___git_commit___34__blows__34__/comment_5_eaafc970cce2c71ce29f136c90e04504._comment create mode 100644 doc/projects/datalad/bugs-done/v8_conflict_resolution___40__adjusted_branch__41___teststuck.mdwn create mode 100644 doc/projects/datalad/bugs-done/v8_conflict_resolution___40__adjusted_branch__41___teststuck/comment_1_d530fb679b76e995c466fe17c3aab830._comment create mode 100644 doc/projects/datalad/bugs-done/v8_conflict_resolution___40__adjusted_branch__41___teststuck/comment_2_dcc764525370338fbf9b6f2728e3e5ac._comment create mode 100644 doc/projects/datalad/bugs-done/v8_conflict_resolution___40__adjusted_branch__41___teststuck/comment_3_7c9fc177fcb76b76765cece36b4f939e._comment create mode 100644 doc/projects/datalad/bugs-done/v8_conflict_resolution___40__adjusted_branch__41___teststuck/comment_4_981d6d42f411476d1a5e38d987af6035._comment create mode 100644 doc/projects/datalad/bugs-done/wanted_on_read-only_repo_crashes_.mdwn create mode 100644 doc/projects/datalad/bugs-done/wanted_started_to_dump_debug_output_to_stdout_.mdwn create mode 100644 doc/projects/datalad/bugs-done/whereis_shouldn__39__t_just_crash_if_one_of_the_special_remotes___34__drivers__34___is_not_available.mdwn create mode 100644 doc/projects/datalad/bugs-done/whereis_shouldn__39__t_just_crash_if_one_of_the_special_remotes___34__drivers__34___is_not_available/comment_1_3f8100a4d9e6ab4302c89eeafd0f843e._comment create mode 100644 doc/projects/datalad/done.mdwn create mode 100644 doc/projects/datalad/potential.mdwn create mode 100644 doc/projects/neurohub.mdwn create mode 100644 doc/projects/openneuro.mdwn create mode 100644 doc/projects/repronim.mdwn create mode 100644 doc/projects/repronim/bugs-done/3_tests_fail_while_trying_to_build_fresh_git_annex_6.20181011+git109-gff9ba1f4d.mdwn create mode 100644 doc/projects/repronim/bugs-done/3_tests_fail_while_trying_to_build_fresh_git_annex_6.20181011+git109-gff9ba1f4d/comment_1_244e138f7621c901dd7763159db84677._comment create mode 100644 doc/projects/repronim/bugs-done/3_tests_fail_while_trying_to_build_fresh_git_annex_6.20181011+git109-gff9ba1f4d/comment_2_cbdfb3dea5c125b52d53811b96b3e01e._comment create mode 100644 doc/projects/repronim/bugs-done/7.20181211+git29-gab4a1bed9_fails_tests_during_neurodebian_build.mdwn create mode 100644 doc/projects/repronim/bugs-done/7.20181211+git29-gab4a1bed9_fails_tests_during_neurodebian_build/comment_1_ddd60096d409a820358d5a57a3a449c9._comment create mode 100644 doc/projects/repronim/bugs-done/7.20181211+git29-gab4a1bed9_fails_tests_during_neurodebian_build/comment_2_b496a4967b6bcc0a4e1cc55e06ba90c8._comment create mode 100644 doc/projects/repronim/bugs-done/7.20181211+git29-gab4a1bed9_fails_tests_during_neurodebian_build/comment_3_bdadf679a2f82c2a1cae747d437add85._comment create mode 100644 doc/projects/repronim/bugs-done/7.20181211+git29-gab4a1bed9_fails_tests_during_neurodebian_build/comment_4_90bc2857c83afae250834135a5884898._comment create mode 100644 doc/projects/repronim/bugs-done/7.20181211+git29-gab4a1bed9_fails_tests_during_neurodebian_build/comment_5_d29518fef1b3b0b8937e078f9303d41c._comment create mode 100644 doc/projects/repronim/bugs-done/7.20181211+git29-gab4a1bed9_fails_tests_during_neurodebian_build/comment_6_24eca56dc972ecff0b553e93b7c649c4._comment create mode 100644 doc/projects/repronim/bugs-done/7.20181211+git29-gab4a1bed9_fails_tests_during_neurodebian_build/comment_7_3adce9695e4e3786f0c68b092d8f6400._comment create mode 100644 doc/projects/repronim/bugs-done/Please_include_version_of_used_to_build_ghc_within___34__git_annex_version__34__.mdwn create mode 100644 doc/projects/repronim/bugs-done/Regression_in___96__find_--json__96___output.mdwn create mode 100644 doc/projects/repronim/bugs-done/Regression_in___96__find_--json__96___output/comment_1_034f772098dfb9d3622c6f84976e69a2._comment create mode 100644 doc/projects/repronim/bugs-done/Unable_to_get__47__addurl_to_http_link__58___download_failed__58___InvalidHeader___34__preload__34__.mdwn create mode 100644 doc/projects/repronim/bugs-done/Unable_to_get__47__addurl_to_http_link__58___download_failed__58___InvalidHeader___34__preload__34__/comment_1_247f3c1dfea3cdb0b398c015f4c4d44b._comment create mode 100644 doc/projects/repronim/bugs-done/add_--json_should_provide_a___34__note__34___with_an_error_message_in_case_of_an_error.mdwn create mode 100644 doc/projects/repronim/bugs-done/add_--json_should_provide_a___34__note__34___with_an_error_message_in_case_of_an_error/comment_1_636a375fbd8cf8573b3806d7a815b59f._comment create mode 100644 doc/projects/repronim/bugs-done/add_--json_should_provide_a___34__note__34___with_an_error_message_in_case_of_an_error/comment_2_50d096934badd3e59756939b5c418bcb._comment create mode 100644 doc/projects/repronim/bugs-done/addurl_fails_with_non-youtube_url_with___34__This_url_is_supported_by_youtube-dl__44___but_youtube-dl_could_potentially_access_any_address__34__.mdwn create mode 100644 doc/projects/repronim/bugs-done/annex_init_no_longer_generates_default_description.mdwn create mode 100644 doc/projects/repronim/bugs-done/annex_init_no_longer_generates_default_description/comment_1_eb415152db43c02e4d474dade4a1faca._comment create mode 100644 doc/projects/repronim/bugs-done/annex_init_no_longer_generates_default_description/comment_2_c51d386f294529d6ebe7058438577ffe._comment create mode 100644 doc/projects/repronim/bugs-done/annex_init_no_longer_generates_default_description/comment_3_6edae77c6ee7e4c4f94f9c0daff375ad._comment create mode 100644 doc/projects/repronim/bugs-done/annex_init_no_longer_generates_default_description/comment_4_d92a7f2bc72b27c74cd86811c9bbf098._comment create mode 100644 doc/projects/repronim/bugs-done/annex_init_no_longer_generates_default_description/comment_5_0dd1d4e6cd16da2865c3153b61b9e282._comment create mode 100644 doc/projects/repronim/bugs-done/annex_init_no_longer_generates_default_description/comment_6_539039e237d9b0db0c97f64d877de7f7._comment create mode 100644 doc/projects/repronim/bugs-done/annex_sets_remote___40__regular_http__41___to_be_ignored_while_running_in_docker_container.mdwn create mode 100644 doc/projects/repronim/bugs-done/annex_sets_remote___40__regular_http__41___to_be_ignored_while_running_in_docker_container/comment_1_130f2600057aa5b648f7798c49b4ea60._comment create mode 100644 doc/projects/repronim/bugs-done/annex_sets_remote___40__regular_http__41___to_be_ignored_while_running_in_docker_container/comment_2_802f85441c42ac079b6ecaea39a63c81._comment create mode 100644 doc/projects/repronim/bugs-done/annex_sets_remote___40__regular_http__41___to_be_ignored_while_running_in_docker_container/comment_3_4d03d12bfba811e0a67551e10201200b._comment create mode 100644 doc/projects/repronim/bugs-done/annex_sets_remote___40__regular_http__41___to_be_ignored_while_running_in_docker_container/comment_4_1ea0f89c3c9e8bf1142b2c234cdf90c3._comment create mode 100644 doc/projects/repronim/bugs-done/annex_sets_remote___40__regular_http__41___to_be_ignored_while_running_in_docker_container/comment_5_72c67ef575c90071040cf5347d81ce01._comment create mode 100644 doc/projects/repronim/bugs-done/annex_sets_remote___40__regular_http__41___to_be_ignored_while_running_in_docker_container/comment_6_dcfb1dfb33a690a73547a5855e0ee55d._comment create mode 100644 doc/projects/repronim/bugs-done/fails_to_init_under_a_directory_with_a___34__tricky__34___name.mdwn create mode 100644 doc/projects/repronim/bugs-done/fails_to_init_under_a_directory_with_a___34__tricky__34___name/comment_1_10045d7efa652ded4c41fd8c3e089bf4._comment create mode 100644 doc/projects/repronim/bugs-done/fails_to_init_under_a_directory_with_a___34__tricky__34___name/comment_2_6d57bda8ddc603f24e16018969ac780a._comment create mode 100644 doc/projects/repronim/bugs-done/fails_to_init_under_a_directory_with_a___34__tricky__34___name/comment_3_1a982c19fc7360a2a231b5a23142bbba._comment create mode 100644 doc/projects/repronim/bugs-done/fails_to_init_under_a_directory_with_a___34__tricky__34___name/comment_4_397686077b5a63196204327c178a7064._comment create mode 100644 doc/projects/repronim/bugs-done/fails_to_init_under_a_directory_with_a___34__tricky__34___name/comment_5_b95c1da49c3a4eecca8038c03a46c709._comment create mode 100644 doc/projects/repronim/bugs-done/fails_to_init_under_a_directory_with_a___34__tricky__34___name/comment_6_d2f9a37824dd2bb49892430f9f271f1c._comment create mode 100644 doc/projects/repronim/bugs-done/fresh_build_for_neurodebian__58___test_failure.mdwn create mode 100644 doc/projects/repronim/bugs-done/fresh_build_for_neurodebian__58___test_failure/comment_1_ec7aa500a826beb813bc5313af9aa983._comment create mode 100644 doc/projects/repronim/bugs-done/fresh_build_for_neurodebian__58___test_failure/comment_2_a61ed5b8f438caf0b8c7a53e08e1986a._comment create mode 100644 doc/projects/repronim/bugs-done/fresh_build_for_neurodebian__58___test_failure/comment_3_09343b67a0c6e82203b76ef591233869._comment create mode 100644 doc/projects/repronim/bugs-done/fresh_build_for_neurodebian__58___test_failure/comment_4_8be6e27e081d4bc8c0fa178088a10a91._comment create mode 100644 doc/projects/repronim/bugs-done/fresh_build_for_neurodebian__58___test_failure/comment_5_b08d8859f873fcbdc78f938042fe0fbd._comment create mode 100644 doc/projects/repronim/bugs-done/fresh_build_for_neurodebian__58___test_failure/comment_6_357f297d1afab22a59b2bafe4b85facd._comment create mode 100644 doc/projects/repronim/bugs-done/fresh_build_for_neurodebian__58___test_failure/comment_7_2181d91c9b5b374c6102fdcc227349fc._comment create mode 100644 doc/projects/repronim/bugs-done/get_fails_to_place_v7_unlocked_file_content_into_the_file_tree_in_v7_in_repo_with_detached_HEAD.mdwn create mode 100644 doc/projects/repronim/bugs-done/get_fails_to_place_v7_unlocked_file_content_into_the_file_tree_in_v7_in_repo_with_detached_HEAD/comment_1_a377e26b2eb75956c9de9beed0534cc2._comment create mode 100644 doc/projects/repronim/bugs-done/get_fails_to_place_v7_unlocked_file_content_into_the_file_tree_in_v7_in_repo_with_detached_HEAD/comment_2_d1ae8ccbfc3a9dd90cc03e68d5a78071._comment create mode 100644 doc/projects/repronim/bugs-done/get_fails_to_place_v7_unlocked_file_content_into_the_file_tree_in_v7_in_repo_with_detached_HEAD/comment_3_cd7cc008c3d37caa76416bd2452da90d._comment create mode 100644 doc/projects/repronim/bugs-done/git-annex_precommit_.__gets_stuck_after_likely_interrupted___96__annex_add__96___call.mdwn create mode 100644 doc/projects/repronim/bugs-done/git-annex_precommit_.__gets_stuck_after_likely_interrupted___96__annex_add__96___call/comment_1_25dd2f0ba99913f26cbcbf55352bb1ab._comment create mode 100644 doc/projects/repronim/bugs-done/git-annex_precommit_.__gets_stuck_after_likely_interrupted___96__annex_add__96___call/comment_2_f5e21a674c54c5dc4c8474ce1b4ffaf1._comment create mode 100644 doc/projects/repronim/bugs-done/git-annex_precommit_.__gets_stuck_after_likely_interrupted___96__annex_add__96___call/comment_3_028eca36967a89e5f479802499232a90._comment create mode 100644 doc/projects/repronim/bugs-done/git-annex_precommit_.__gets_stuck_after_likely_interrupted___96__annex_add__96___call/comment_4_6657ceac22df80251b74c6e4b47f8ba0._comment create mode 100644 doc/projects/repronim/bugs-done/git-annex_precommit_.__gets_stuck_after_likely_interrupted___96__annex_add__96___call/comment_5_96f485e38778448804ae253f9032babc._comment create mode 100644 doc/projects/repronim/bugs-done/git-annex_precommit_.__gets_stuck_after_likely_interrupted___96__annex_add__96___call/comment_6_0e3ae1862408b6d0c5e0acd9e9fa20b5._comment create mode 100644 doc/projects/repronim/bugs-done/git-annex_precommit_.__gets_stuck_after_likely_interrupted___96__annex_add__96___call/comment_7_7fcb97b7d7f26fb6964a574ba1c8cd20._comment create mode 100644 doc/projects/repronim/bugs-done/git-annex_precommit_.__gets_stuck_after_likely_interrupted___96__annex_add__96___call/comment_8_ba2dd3b91147e2979bc90a022f6e0252._comment create mode 100644 doc/projects/repronim/bugs-done/git-annex_precommit_.__gets_stuck_after_likely_interrupted___96__annex_add__96___call/comment_9_fe629ccb023c2564dbf78402d92bef66._comment create mode 100644 doc/projects/repronim/bugs-done/git_annex_test_never_exits__63__.mdwn create mode 100644 doc/projects/repronim/bugs-done/git_annex_test_never_exits__63__/comment_10_d258114e6e8f8db28b65a39cb13f2a04._comment create mode 100644 doc/projects/repronim/bugs-done/git_annex_test_never_exits__63__/comment_11_adc040aad7d339e22fef76a2cbc4a312._comment create mode 100644 doc/projects/repronim/bugs-done/git_annex_test_never_exits__63__/comment_1_e07a5dd0abb2049b4bb0bf26fa2ebab5._comment create mode 100644 doc/projects/repronim/bugs-done/git_annex_test_never_exits__63__/comment_2_419de3fe25c490b251b8a6a7a9b24ed6._comment create mode 100644 doc/projects/repronim/bugs-done/git_annex_test_never_exits__63__/comment_3_2bb944b19503dcf90fdf55e5098a2c02._comment create mode 100644 doc/projects/repronim/bugs-done/git_annex_test_never_exits__63__/comment_4_a8847e219a57f3cf41330745e6a67b10._comment create mode 100644 doc/projects/repronim/bugs-done/git_annex_test_never_exits__63__/comment_5_4e7be0dd1eb70af4790e2bcba7bb6ea1._comment create mode 100644 doc/projects/repronim/bugs-done/git_annex_test_never_exits__63__/comment_6_d12ddfb48706454eba1bd552a681e5ba._comment create mode 100644 doc/projects/repronim/bugs-done/git_annex_test_never_exits__63__/comment_7_d897d97bfe8f13431f8c5d92e61bbd3d._comment create mode 100644 doc/projects/repronim/bugs-done/git_annex_test_never_exits__63__/comment_8_b3f282a0a0d4c5f174cf6831dbf3014c._comment create mode 100644 doc/projects/repronim/bugs-done/git_annex_test_never_exits__63__/comment_9_230038504d75704baacd4d3ac750ee95._comment create mode 100644 doc/projects/repronim/bugs-done/gpgconf__58___invalid_option___34__--kill__34_____40__gpg_2.0.22__41___.mdwn create mode 100644 doc/projects/repronim/bugs-done/gpgconf__58___invalid_option___34__--kill__34_____40__gpg_2.0.22__41___/comment_1_0351276d5eeb5d8af0cf0e72c3a213fd._comment create mode 100644 doc/projects/repronim/bugs-done/gpgconf__58___invalid_option___34__--kill__34_____40__gpg_2.0.22__41___/comment_2_a8565fb1657318092a22e8ed18ae6cbc._comment create mode 100644 doc/projects/repronim/bugs-done/gpgconf__58___invalid_option___34__--kill__34_____40__gpg_2.0.22__41___/comment_3_d3a478e3f7da91ab14c9b1e24d3e07d6._comment create mode 100644 doc/projects/repronim/bugs-done/gpgconf__58___invalid_option___34__--kill__34_____40__gpg_2.0.22__41___/comment_4_9add6c8e1d5b722eaeb2e5a0fe67cd32._comment create mode 100644 doc/projects/repronim/bugs-done/gpgconf__58___invalid_option___34__--kill__34_____40__gpg_2.0.22__41___/comment_5_b411b96c73bba30557c2f3aa9d6077e7._comment create mode 100644 doc/projects/repronim/bugs-done/gpgconf__58___invalid_option___34__--kill__34_____40__gpg_2.0.22__41___/comment_5_e3a79f9480a7123feb924f3c1e72ce62._comment create mode 100644 doc/projects/repronim/bugs-done/initial_get_-J_on_exported_S3_bucket_fails.mdwn create mode 100644 doc/projects/repronim/bugs-done/initial_get_-J_on_exported_S3_bucket_fails/comment_1_005874771ab14efb94c4a739da31b523._comment create mode 100644 doc/projects/repronim/bugs-done/multiple_ssh_prompts__44___and_thread_blocked_indefinitely_in_an___63____63____63___transaction.mdwn create mode 100644 doc/projects/repronim/bugs-done/multiple_ssh_prompts__44___and_thread_blocked_indefinitely_in_an___63____63____63___transaction/comment_10_d2a5b1eb72cf0abbd0143339ff81a92a._comment create mode 100644 doc/projects/repronim/bugs-done/multiple_ssh_prompts__44___and_thread_blocked_indefinitely_in_an___63____63____63___transaction/comment_11_5ee016343b74fac9d6235db88744734a._comment create mode 100644 doc/projects/repronim/bugs-done/multiple_ssh_prompts__44___and_thread_blocked_indefinitely_in_an___63____63____63___transaction/comment_12_c640da31be6bcd50dec6eabb2e792e07._comment create mode 100644 doc/projects/repronim/bugs-done/multiple_ssh_prompts__44___and_thread_blocked_indefinitely_in_an___63____63____63___transaction/comment_13_4bb69f0bc73b5d368cc9278b88223a5e._comment create mode 100644 doc/projects/repronim/bugs-done/multiple_ssh_prompts__44___and_thread_blocked_indefinitely_in_an___63____63____63___transaction/comment_14_2d8cf0d8b020941d143abd424729c6bc._comment create mode 100644 doc/projects/repronim/bugs-done/multiple_ssh_prompts__44___and_thread_blocked_indefinitely_in_an___63____63____63___transaction/comment_14_7cc13b150c19a3c08f2b9cdeb880cfe9._comment create mode 100644 doc/projects/repronim/bugs-done/multiple_ssh_prompts__44___and_thread_blocked_indefinitely_in_an___63____63____63___transaction/comment_16_9d1f902cc0e029b483115c3c0de5d113._comment create mode 100644 doc/projects/repronim/bugs-done/multiple_ssh_prompts__44___and_thread_blocked_indefinitely_in_an___63____63____63___transaction/comment_17_0e4efb1686564f4d8e834b1e0843d397._comment create mode 100644 doc/projects/repronim/bugs-done/multiple_ssh_prompts__44___and_thread_blocked_indefinitely_in_an___63____63____63___transaction/comment_18_01371e8b9d56d4470af5277456763d12._comment create mode 100644 doc/projects/repronim/bugs-done/multiple_ssh_prompts__44___and_thread_blocked_indefinitely_in_an___63____63____63___transaction/comment_19_a171911a9bb7a278e673e4b6905c971d._comment create mode 100644 doc/projects/repronim/bugs-done/multiple_ssh_prompts__44___and_thread_blocked_indefinitely_in_an___63____63____63___transaction/comment_1_ffcede72f600ecc98b906f0d9b6d6d0a._comment create mode 100644 doc/projects/repronim/bugs-done/multiple_ssh_prompts__44___and_thread_blocked_indefinitely_in_an___63____63____63___transaction/comment_20_2b76e74756e684a09387396fa2177d57._comment create mode 100644 doc/projects/repronim/bugs-done/multiple_ssh_prompts__44___and_thread_blocked_indefinitely_in_an___63____63____63___transaction/comment_21_8f7fd9bc58d8c2eff32f5fa200b57119._comment create mode 100644 doc/projects/repronim/bugs-done/multiple_ssh_prompts__44___and_thread_blocked_indefinitely_in_an___63____63____63___transaction/comment_22_0827ffb4beb55f6553a40c722bc2ec12._comment create mode 100644 doc/projects/repronim/bugs-done/multiple_ssh_prompts__44___and_thread_blocked_indefinitely_in_an___63____63____63___transaction/comment_23_c9102fdb9d99d2c19585e74b0dc0dff7._comment create mode 100644 doc/projects/repronim/bugs-done/multiple_ssh_prompts__44___and_thread_blocked_indefinitely_in_an___63____63____63___transaction/comment_23_d69e0931e520391551eb4c37eb2f809d._comment create mode 100644 doc/projects/repronim/bugs-done/multiple_ssh_prompts__44___and_thread_blocked_indefinitely_in_an___63____63____63___transaction/comment_25_115c584098501e16292dc6c776141074._comment create mode 100644 doc/projects/repronim/bugs-done/multiple_ssh_prompts__44___and_thread_blocked_indefinitely_in_an___63____63____63___transaction/comment_25_1adec4fa4c8af5409d2f5dc7adcaecf4._comment create mode 100644 doc/projects/repronim/bugs-done/multiple_ssh_prompts__44___and_thread_blocked_indefinitely_in_an___63____63____63___transaction/comment_27_e8b00ab555e94cf8826493ca6ce2d082._comment create mode 100644 doc/projects/repronim/bugs-done/multiple_ssh_prompts__44___and_thread_blocked_indefinitely_in_an___63____63____63___transaction/comment_28_2fb1c54c41b31698909594106cb08cd4._comment create mode 100644 doc/projects/repronim/bugs-done/multiple_ssh_prompts__44___and_thread_blocked_indefinitely_in_an___63____63____63___transaction/comment_29_750dbe3e118b1b6b8d0cca7d26ea1366._comment create mode 100644 doc/projects/repronim/bugs-done/multiple_ssh_prompts__44___and_thread_blocked_indefinitely_in_an___63____63____63___transaction/comment_2_50c0db38a664adbb0c5a2290326195a6._comment create mode 100644 doc/projects/repronim/bugs-done/multiple_ssh_prompts__44___and_thread_blocked_indefinitely_in_an___63____63____63___transaction/comment_30_cd1362901ff08323ca134fc8de914318._comment create mode 100644 doc/projects/repronim/bugs-done/multiple_ssh_prompts__44___and_thread_blocked_indefinitely_in_an___63____63____63___transaction/comment_31_e2cc841198c91709980cc2b2a8297925._comment create mode 100644 doc/projects/repronim/bugs-done/multiple_ssh_prompts__44___and_thread_blocked_indefinitely_in_an___63____63____63___transaction/comment_32_eff60d2ee47af65f18dede31cc283adb._comment create mode 100644 doc/projects/repronim/bugs-done/multiple_ssh_prompts__44___and_thread_blocked_indefinitely_in_an___63____63____63___transaction/comment_33_3338f896a983292bef576dcd369bba5a._comment create mode 100644 doc/projects/repronim/bugs-done/multiple_ssh_prompts__44___and_thread_blocked_indefinitely_in_an___63____63____63___transaction/comment_33_fe7e5c3340282f89c3393d8c5a2bc17c._comment create mode 100644 doc/projects/repronim/bugs-done/multiple_ssh_prompts__44___and_thread_blocked_indefinitely_in_an___63____63____63___transaction/comment_35_296739c184ac8d0cc453aeeeff5b6f74._comment create mode 100644 doc/projects/repronim/bugs-done/multiple_ssh_prompts__44___and_thread_blocked_indefinitely_in_an___63____63____63___transaction/comment_36_75f52900d12931b4c6172e10401f28d3._comment create mode 100644 doc/projects/repronim/bugs-done/multiple_ssh_prompts__44___and_thread_blocked_indefinitely_in_an___63____63____63___transaction/comment_3_eea08486fa9669bd197eb9e957b65ef8._comment create mode 100644 doc/projects/repronim/bugs-done/multiple_ssh_prompts__44___and_thread_blocked_indefinitely_in_an___63____63____63___transaction/comment_4_817a9d27a0b15798671f4dc5cd661164._comment create mode 100644 doc/projects/repronim/bugs-done/multiple_ssh_prompts__44___and_thread_blocked_indefinitely_in_an___63____63____63___transaction/comment_4_c2df4fa0420c0db31b38e65a8d7dbf92._comment create mode 100644 doc/projects/repronim/bugs-done/multiple_ssh_prompts__44___and_thread_blocked_indefinitely_in_an___63____63____63___transaction/comment_5_288741ae44f2dddbe53ab1dc294e2fb7._comment create mode 100644 doc/projects/repronim/bugs-done/multiple_ssh_prompts__44___and_thread_blocked_indefinitely_in_an___63____63____63___transaction/comment_7_44d25c37e26e71b2aff759a0d39c5803._comment create mode 100644 doc/projects/repronim/bugs-done/multiple_ssh_prompts__44___and_thread_blocked_indefinitely_in_an___63____63____63___transaction/comment_8_24ab22004dd25169bb9191a92f1e0ac4._comment create mode 100644 doc/projects/repronim/bugs-done/multiple_ssh_prompts__44___and_thread_blocked_indefinitely_in_an___63____63____63___transaction/comment_9_c8a52578b5d7482683443bd5d95a5265._comment create mode 100644 doc/projects/repronim/bugs-done/regression__58___fails_to_detect_need_for_pidlock_on_an_NSF_mount.mdwn create mode 100644 doc/projects/repronim/bugs-done/regression__58___fails_to_detect_need_for_pidlock_on_an_NSF_mount/comment_1_82a71d4e9656c83e2d50143cb8a31602._comment create mode 100644 doc/projects/repronim/bugs-done/regression__58___fails_to_detect_need_for_pidlock_on_an_NSF_mount/comment_2_9bd5f0acb9761dcf59ecd38092e3e14d._comment create mode 100644 doc/projects/repronim/bugs-done/regression__58___fails_to_detect_need_for_pidlock_on_an_NSF_mount/comment_3_6d2fceb790e675cb73b193bf67f7a6f4._comment create mode 100644 doc/projects/repronim/bugs-done/regression__58___fails_to_detect_need_for_pidlock_on_an_NSF_mount/comment_4_bf6487c1740f163745b7dcc41468ec4d._comment create mode 100644 doc/projects/repronim/bugs-done/regression__58___http_downloads_redirecting_to_ftp_are_no_longer_supported.mdwn create mode 100644 doc/projects/repronim/bugs-done/regression__58___http_downloads_redirecting_to_ftp_are_no_longer_supported/comment_1_5184c1b87e249f203541f610278ed08e._comment create mode 100644 doc/projects/repronim/bugs-done/regression__58___http_downloads_redirecting_to_ftp_are_no_longer_supported/comment_2_860458173cb4d745e8c9833b804398d8._comment create mode 100644 doc/projects/repronim/bugs-done/regression__58___http_downloads_redirecting_to_ftp_are_no_longer_supported/comment_3_921d2493f51ecb61b711773238c9f7e7._comment create mode 100644 doc/projects/repronim/bugs-done/regression__58___http_downloads_redirecting_to_ftp_are_no_longer_supported/comment_4_b15837921956ad166cf53a5dd23cb7dd._comment create mode 100644 doc/projects/repronim/bugs-done/regression__58___http_downloads_redirecting_to_ftp_are_no_longer_supported/comment_5_2a66b890e3c60d1102acb7cef0b86308._comment create mode 100644 doc/projects/repronim/bugs-done/regression__58___http_downloads_redirecting_to_ftp_are_no_longer_supported/comment_6_c42192a94651f34d32f6d5b91b1c09e8._comment create mode 100644 doc/projects/repronim/bugs-done/regression__58___http_downloads_redirecting_to_ftp_are_no_longer_supported/comment_7_11f4424d3b9fb6c54fa510320affac73._comment create mode 100644 doc/projects/repronim/bugs-done/rmurl_marks_url_not_available_in_wrong_remote.mdwn create mode 100644 doc/projects/repronim/bugs-done/rmurl_marks_url_not_available_in_wrong_remote/comment_1_2aa17a7067a183f5837b5a41d74fcde9._comment create mode 100644 doc/projects/repronim/bugs-done/windows__58___autostart_for_annex_64bit_looks_under_x86.mdwn create mode 100644 doc/projects/repronim/bugs-done/windows__58___autostart_for_annex_64bit_looks_under_x86/comment_1_b8a4128b08ef8dd25a8141b27531b9ae._comment create mode 100644 doc/projects/repronim/bugs-done/windows__58___autostart_for_annex_64bit_looks_under_x86/comment_2_0f23c377b22788d9c540bd480398f47b._comment create mode 100644 doc/projects/repronim/done.mdwn create mode 100644 doc/publicrepos.mdwn create mode 100644 doc/related_software.mdwn create mode 100644 doc/repomap.png create mode 100644 doc/required_content.mdwn create mode 100644 doc/required_content/comment_1_b9576aaa31258e9bdf18a4eac8d61bfb._comment create mode 100644 doc/required_content/comment_2_d475f4afc84a58afe7af6d492de3ebe5._comment create mode 100644 doc/scalability.mdwn create mode 100644 doc/scalability/comment_1_a6656ae397277719d67d0953a28fe1d8._comment create mode 100644 doc/scalability/comment_2_71c7c3aa97284602d0f64c11a98d1782._comment create mode 100644 doc/security.mdwn create mode 100644 doc/security/CVE-2014-6274.mdwn create mode 100644 doc/security/CVE-2017-12976.mdwn create mode 100644 doc/security/CVE-2018-10857_and_CVE-2018-10859.mdwn create mode 100644 doc/security/checksum_exposure_to_encrypted_special_remotes.mdwn create mode 100644 doc/security/comment_1_285da453a385bd4bd225e26377a47cd5._comment create mode 100644 doc/security/comment_2_261b1904e41f4566490b977010ce8734._comment create mode 100644 doc/security/comment_3_0cc44e032fc94f4d374fb297ca9a8f2d._comment create mode 100644 doc/security/comment_4_3822244fb9becc32385d57233fa036a4._comment create mode 100644 doc/security/comment_5_616b08553430a64beab196571c5b9cdc._comment create mode 100644 doc/shortcuts.mdwn create mode 100644 doc/sidebar.mdwn create mode 100644 doc/sitemap.mdwn create mode 100644 doc/special_remotes.mdwn create mode 100644 doc/special_remotes/S3.mdwn create mode 100644 doc/special_remotes/S3/comment_10_c366f020c9b97a365e21878a33360079._comment create mode 100644 doc/special_remotes/S3/comment_11_c1da387e082d91feec13dde91ccb111a._comment create mode 100644 doc/special_remotes/S3/comment_12_59c3ecab7dbc8be53258460473cac21c._comment create mode 100644 doc/special_remotes/S3/comment_13_0789a21d980825188bb09f7fc8bba8be._comment create mode 100644 doc/special_remotes/S3/comment_14_29574a51d5831c51e2e765eb2c06e567._comment create mode 100644 doc/special_remotes/S3/comment_15_ceb9048c743135f6beca57a23505f0a3._comment create mode 100644 doc/special_remotes/S3/comment_16_7b79f8b5ef88a2775d61b5ac5774d3e0._comment create mode 100644 doc/special_remotes/S3/comment_17_52d3510016c099d083553f9b3fa40db9._comment create mode 100644 doc/special_remotes/S3/comment_18_0dcb84048563fc9e45b66ca8f365f320._comment create mode 100644 doc/special_remotes/S3/comment_19_9d0d622b6202698f09eb06c097579fbb._comment create mode 100644 doc/special_remotes/S3/comment_1_4a1f7a230dad6caa84831685b236fd73._comment create mode 100644 doc/special_remotes/S3/comment_20_ce4ce50d51675ee4746a2528d4bea750._comment create mode 100644 doc/special_remotes/S3/comment_21_26cbfd805dd45a80121f5e2079afba37._comment create mode 100644 doc/special_remotes/S3/comment_22_55a7e513713285b8ced84c8cfd525364._comment create mode 100644 doc/special_remotes/S3/comment_23_b503ce70a4f008be580a069420361686._comment create mode 100644 doc/special_remotes/S3/comment_24_b209474b90befc79a7139d6c5703e2d8._comment create mode 100644 doc/special_remotes/S3/comment_25_29f2760e433a0e6229e46e728c380275._comment create mode 100644 doc/special_remotes/S3/comment_26_6b99242a6a681a1848041a8b8875743d._comment create mode 100644 doc/special_remotes/S3/comment_28_163d81443ca5a05138e6f570b068ac6e._comment create mode 100644 doc/special_remotes/S3/comment_28_c4dafad82a898eafd6d9e3703fad2c48._comment create mode 100644 doc/special_remotes/S3/comment_29_37430a66a9f39a635b32f04ff82db194._comment create mode 100644 doc/special_remotes/S3/comment_2_5b22d67de946f4d34a4a3c7449d32988._comment create mode 100644 doc/special_remotes/S3/comment_30_db7e1e3506cf7a912cf88ffe4caea20b._comment create mode 100644 doc/special_remotes/S3/comment_31_e46934941fca2de536f3705185098b6e._comment create mode 100644 doc/special_remotes/S3/comment_32_197d0c6d632c201a4ea9680653895c07._comment create mode 100644 doc/special_remotes/S3/comment_33_36788d742259b3b078e02d7b2a251ce5._comment create mode 100644 doc/special_remotes/S3/comment_34_cf57e8dbd9fdc7c487565b61808b6bb2._comment create mode 100644 doc/special_remotes/S3/comment_35_a141196a77d77cc6e130185dbf01e48b._comment create mode 100644 doc/special_remotes/S3/comment_36_9c900d777c9add9c277d40bd5b32bdf6._comment create mode 100644 doc/special_remotes/S3/comment_37_fef35384191078ed9ac6ee819eea4aa7._comment create mode 100644 doc/special_remotes/S3/comment_38_03ba1dcf23e04b8c54b53b10a93e1c45._comment create mode 100644 doc/special_remotes/S3/comment_3_bcab2bd0f168954243aa9bcc9671bd94._comment create mode 100644 doc/special_remotes/S3/comment_4_38c0b062997fde1ad28facc05d973e83._comment create mode 100644 doc/special_remotes/S3/comment_5_409bc2b56382417cf26bb222fb783ba7._comment create mode 100644 doc/special_remotes/S3/comment_6_78da9e233882ec0908962882ea8c4056._comment create mode 100644 doc/special_remotes/S3/comment_7_6af9781004d982d8e6b20a83ad29eead._comment create mode 100644 doc/special_remotes/S3/comment_8_0fa68d584ee7f6b5c9058fba7e911a11._comment create mode 100644 doc/special_remotes/S3/comment_9_7ad757b3865b04967c79af0a263bb3b0._comment create mode 100644 doc/special_remotes/adb.mdwn create mode 100644 doc/special_remotes/adb/comment_1_df47283c499cddd1d92a262679514531._comment create mode 100644 doc/special_remotes/adb/comment_2_f1f6c0a6f8c34c3d205988d2f69693ea._comment create mode 100644 doc/special_remotes/adb/comment_3_1d08d2ded354328461e9a7288287779e._comment create mode 100644 doc/special_remotes/adb/comment_4_9f5edeb544f6a26e9278410ef67e99ba._comment create mode 100644 doc/special_remotes/adb/comment_5_c9a3427bc8e924cd1f50246b3ec7c081._comment create mode 100644 doc/special_remotes/adb/comment_7_73ea2ada02df871b0c9795a5b769f7db._comment create mode 100644 doc/special_remotes/bittorrent.mdwn create mode 100644 doc/special_remotes/bittorrent/comment_1_4ef590d88bacd763abd5ce209e6b9640._comment create mode 100644 doc/special_remotes/bittorrent/comment_2_bccc7409111e4df4f4aab3b21fa4d321._comment create mode 100644 doc/special_remotes/bittorrent/comment_3_1e2372988e37c07b47a407f2eb979190._comment create mode 100644 doc/special_remotes/bittorrent/comment_4_aedac7a8482f710637493464b9e76fa7._comment create mode 100644 doc/special_remotes/borg.mdwn create mode 100644 doc/special_remotes/borg/comment_1_2a650af185a4eee5fd7fc350ed395e2c._comment create mode 100644 doc/special_remotes/borg/comment_2_6e6baf5467efcae70729e18975d8eb1a._comment create mode 100644 doc/special_remotes/bup.mdwn create mode 100644 doc/special_remotes/bup/comment_10_f78c1ed97d2e4c6ebffaa7482cfe0c9b._comment create mode 100644 doc/special_remotes/bup/comment_11_b53bceb0058acf4d1ab12ea4853ee443._comment create mode 100644 doc/special_remotes/bup/comment_12_65d923226cf6120349d807c5c60f640c._comment create mode 100644 doc/special_remotes/bup/comment_12_fca579678edde073716f099c767767e1._comment create mode 100644 doc/special_remotes/bup/comment_13_ce960bc69b27dfc2a233c9baa5b2cd2b._comment create mode 100644 doc/special_remotes/bup/comment_14_940b778f97377e83dc16439c0c7e5b38._comment create mode 100644 doc/special_remotes/bup/comment_15_c4665d089f2ceb2ed798cf264d490a8c._comment create mode 100644 doc/special_remotes/bup/comment_16_4787e0373eeec3c7d1d562e47217566c._comment create mode 100644 doc/special_remotes/bup/comment_17_360caa8972c2daa94044cc95188306e9._comment create mode 100644 doc/special_remotes/bup/comment_1_96179a003da4444f6fc08867872cda0a._comment create mode 100644 doc/special_remotes/bup/comment_2_612b038c15206f9f3c2e23c7104ca627._comment create mode 100644 doc/special_remotes/bup/comment_3_1186def82741ddab1ade256fb2e59e6f._comment create mode 100644 doc/special_remotes/bup/comment_4_7d22a805dd2914971e7ca628ceea69be._comment create mode 100644 doc/special_remotes/bup/comment_6_5942333cde09fd98e26c4f1d389cb76f._comment create mode 100644 doc/special_remotes/bup/comment_7_cb1a0d3076e9d06e7a24204478f6fa98._comment create mode 100644 doc/special_remotes/bup/comment_8_4cbc67e5911748d13cee3c483d7ece8a._comment create mode 100644 doc/special_remotes/bup/comment_9_ca7096a759961af375e6bd49663b45b3._comment create mode 100644 doc/special_remotes/comment_10_e9881290486a1770bd260f8650ada9c6._comment create mode 100644 doc/special_remotes/comment_11_e01b5cc5a0d81b071e93e27e7b91fe2a._comment create mode 100644 doc/special_remotes/comment_12_13237170ef5b6646e0e25d3421af3fe5._comment create mode 100644 doc/special_remotes/comment_13_1a36a0483a9db04d36e0234a192ebad8._comment create mode 100644 doc/special_remotes/comment_14_a8419963dc024b1d9eb73807596012dc._comment create mode 100644 doc/special_remotes/comment_15_95ccfdd22a2391daa99e0beb04adedd6._comment create mode 100644 doc/special_remotes/comment_16_b9d238fb15ad7628e33c90b071e07bb0._comment create mode 100644 doc/special_remotes/comment_17_cc21b81a8f809f6efa5f5b6332513fc3._comment create mode 100644 doc/special_remotes/comment_18_3fe750118ff1edbe91a110b86fb5b662._comment create mode 100644 doc/special_remotes/comment_19_6794eb52bd87c28ef1df3172aa7d5780._comment create mode 100644 doc/special_remotes/comment_1_961276c18e9353ca8e25cad53e7ec51f._comment create mode 100644 doc/special_remotes/comment_20_6b7242721f2f2c77b634568cb737e3e3._comment create mode 100644 doc/special_remotes/comment_22_308afc586b86c66bbb3437d63864d9cb._comment create mode 100644 doc/special_remotes/comment_23_0f5440e0e54cf7ac2a68b1ba115b0930._comment create mode 100644 doc/special_remotes/comment_23_96ef232e13bc2dc102a667a06c856ee7._comment create mode 100644 doc/special_remotes/comment_24_2c9eda62766c9d5000346a092fe5d0d8._comment create mode 100644 doc/special_remotes/comment_25_d9f298f284d66fb0aff029eb01f1ce23._comment create mode 100644 doc/special_remotes/comment_26_606c1bee71a265f9df3a8cf50fce9a21._comment create mode 100644 doc/special_remotes/comment_27_b37c6ed2444bd7e8b4d7937abdfcbd1c._comment create mode 100644 doc/special_remotes/comment_28_c7ab32e1e63fc114b3b2f56bab62eafa._comment create mode 100644 doc/special_remotes/comment_29_8393a14f084d022986c8245ee01f4198._comment create mode 100644 doc/special_remotes/comment_2_97543acfa7434e332ebea5672e446317._comment create mode 100644 doc/special_remotes/comment_30_8e5b17431507ee2115b992e5156b749b._comment create mode 100644 doc/special_remotes/comment_31_20ac13d009a4f451eb895ca16446ba88._comment create mode 100644 doc/special_remotes/comment_32_8dea734fed26e5d9336a2da5bd81eabc._comment create mode 100644 doc/special_remotes/comment_33_317c4d5edc9de8159c3b03a3e161e257._comment create mode 100644 doc/special_remotes/comment_34_31256dd4b74d344aa49902adec4bcf02._comment create mode 100644 doc/special_remotes/comment_35_5801755d10149f0d3971fef0b6e1b62f._comment create mode 100644 doc/special_remotes/comment_36_48859c5ea8f63e37b7531ed0e07f4a54._comment create mode 100644 doc/special_remotes/comment_37_9fa2adc324ba25428a681158e58a5300._comment create mode 100644 doc/special_remotes/comment_38_04366bcb840b7628d13546daf65650dc._comment create mode 100644 doc/special_remotes/comment_39_990a0e67fdd30680631a90231d07c611._comment create mode 100644 doc/special_remotes/comment_3_9229776623c234204c8b164edff95da0._comment create mode 100644 doc/special_remotes/comment_40_2a36f9c874b00fd5de94836e3dcde782._comment create mode 100644 doc/special_remotes/comment_41_26a29fe6169eee1c62dd10672040851c._comment create mode 100644 doc/special_remotes/comment_42_85e354eb058aea02be7b847bceb02313._comment create mode 100644 doc/special_remotes/comment_43_75a7c567db2b5256182b2cf06091dc12._comment create mode 100644 doc/special_remotes/comment_44_bc5871052d29f25eddcc0e02bb2e5a25._comment create mode 100644 doc/special_remotes/comment_45_7553ddfb96499b52ddc300a457972645._comment create mode 100644 doc/special_remotes/comment_46_f3f5348ceeffb458bcd7bfaa5c420751._comment create mode 100644 doc/special_remotes/comment_47_780e9ba56a2a83d64583521b8d987e33._comment create mode 100644 doc/special_remotes/comment_48_ee5aa6762ca9403c1a2afe1819984fef._comment create mode 100644 doc/special_remotes/comment_49_044a3d6c35fa1b522f7aeea2cec4199a._comment create mode 100644 doc/special_remotes/comment_4_3bbda479d13f6bf393dcd59ed94ddeaa._comment create mode 100644 doc/special_remotes/comment_50_4485e72f90f46beef3f216ffab82386e._comment create mode 100644 doc/special_remotes/comment_51_1a8a217dc31b0a36dfa9975f72d40b3a._comment create mode 100644 doc/special_remotes/comment_52_02172d2b81de8c5e212e5ed093a01aa1._comment create mode 100644 doc/special_remotes/comment_5_f7000975d38077828ab11a99095b39eb._comment create mode 100644 doc/special_remotes/comment_6_5d2bd7c1e1493d3c3784708a9b0bc001._comment create mode 100644 doc/special_remotes/comment_7_af01ee5ce31b1490af565cb087d65277._comment create mode 100644 doc/special_remotes/comment_8_3d4ffec566d68d601eafe8758a616756._comment create mode 100644 doc/special_remotes/comment_9_26af468952f0403171370b56e127830a._comment create mode 100644 doc/special_remotes/ddar.mdwn create mode 100644 doc/special_remotes/directory.mdwn create mode 100644 doc/special_remotes/directory/comment_11_86f8c1b09cbd82bcd76378dfa1b3ca07._comment create mode 100644 doc/special_remotes/directory/comment_12._comment create mode 100644 doc/special_remotes/directory/comment_12_311cd013fd8db47856d84161119e059d._comment create mode 100644 doc/special_remotes/directory/comment_13_019660abe79fb1a3e6dbeb9a87a4c546._comment create mode 100644 doc/special_remotes/directory/comment_14_80d962f856de7510a437437fc0ca75e1._comment create mode 100644 doc/special_remotes/directory/comment_15_3d091c87c1e4d1c086fb88ae21137a57._comment create mode 100644 doc/special_remotes/directory/comment_16_32f6695042fe1f6e40a64a785fab59b9._comment create mode 100644 doc/special_remotes/directory/comment_17_01559b914ed43c4468e0980f3f794ea7._comment create mode 100644 doc/special_remotes/directory/comment_18_1b24ac6abc99e2e4bc8c9f4687c81395._comment create mode 100644 doc/special_remotes/directory/comment_19_0a6ae6ba0d2835da21fa62b2b376bf3f._comment create mode 100644 doc/special_remotes/directory/comment_1_e8a53592adb13f7d7f212a2eb5a18a31._comment create mode 100644 doc/special_remotes/directory/comment_20_981eeeaee76f89a59e2dcbb368c14387._comment create mode 100644 doc/special_remotes/directory/comment_21_4df82f23228dd2f95353f774d9bd8173._comment create mode 100644 doc/special_remotes/directory/comment_22_2be4b4e74a41723b72ef92a28f81a4dd._comment create mode 100644 doc/special_remotes/directory/comment_2_d949edad6a330079f9e15f703f9091e3._comment create mode 100644 doc/special_remotes/directory/comment_3_49009f4e9e335c9a9d0422aa59c9a432._comment create mode 100644 doc/special_remotes/directory/comment_4_f5e9b0b477c4e521f8633fd274757fa3._comment create mode 100644 doc/special_remotes/directory/comment_5_e790718423c41f5ea8047ea5225bfacd._comment create mode 100644 doc/special_remotes/directory/comment_6_325aac80b86588912c4fd61339ccbd0b._comment create mode 100644 doc/special_remotes/directory/comment_7_4206db69d68d9917623ce02500387021._comment create mode 100644 doc/special_remotes/directory/comment_8_acd9023511fe43817718bc89430f96c3._comment create mode 100644 doc/special_remotes/directory/comment_9_d330eb808a990bb71034613c297a265e._comment create mode 100644 doc/special_remotes/external.mdwn create mode 100755 doc/special_remotes/external/example.sh create mode 100755 doc/special_remotes/external/git-annex-remote-ipfs create mode 100755 doc/special_remotes/external/git-annex-remote-torrent create mode 100644 doc/special_remotes/gcrypt.mdwn create mode 100644 doc/special_remotes/gcrypt/comment_1_16a7b4978a58284b5ab3c58f2102e9d0._comment create mode 100644 doc/special_remotes/gcrypt/comment_2_08245fd6716ee3ed5ac98fe95e7d5ca1._comment create mode 100644 doc/special_remotes/gcrypt/comment_3_2b22c692fb98be1a964430b5b1a329a9._comment create mode 100644 doc/special_remotes/git-lfs.mdwn create mode 100644 doc/special_remotes/git.mdwn create mode 100644 doc/special_remotes/git/comment_1_4c76e1f29065cfb2f8bc05c187c1cc31._comment create mode 100644 doc/special_remotes/git/comment_2_12c53dbbdb77f98f337ad60c67171337._comment create mode 100644 doc/special_remotes/glacier.mdwn create mode 100644 doc/special_remotes/glacier/comment_10_c0e841c3e305712d960e43a10e674215._comment create mode 100644 doc/special_remotes/glacier/comment_11_e062b823b4d0b365698a6488d756b85c._comment create mode 100644 doc/special_remotes/glacier/comment_12_a097d78d15e103c10f67e237c852b222._comment create mode 100644 doc/special_remotes/glacier/comment_13_6ef8735fbd357a09dafe254c8da3b1a8._comment create mode 100644 doc/special_remotes/glacier/comment_14_53c965ab49c75fe2220a04f014ba577f._comment create mode 100644 doc/special_remotes/glacier/comment_15_e9df327e60ad0e69ace7102deef1efd8._comment create mode 100644 doc/special_remotes/glacier/comment_16_ceb6a0cc74eea65fa60b58d1d000acf0._comment create mode 100644 doc/special_remotes/glacier/comment_1_fcd856b99dc6b3f9141b65fe639ef76b._comment create mode 100644 doc/special_remotes/glacier/comment_2_38fcca87074f6ea31a12569a822aa8c9._comment create mode 100644 doc/special_remotes/glacier/comment_3_cea5bcb162e4288847ba5f25464a0406._comment create mode 100644 doc/special_remotes/glacier/comment_4_0c92cc82c7ac513130f862391a02d329._comment create mode 100644 doc/special_remotes/glacier/comment_5_8d1dcb4bf48386314bfb248ea6eeeb68._comment create mode 100644 doc/special_remotes/glacier/comment_6_adb1db354dc4941e4b004e4ba34660d7._comment create mode 100644 doc/special_remotes/glacier/comment_7_747e403aac5acaba00e220931e926951._comment create mode 100644 doc/special_remotes/glacier/comment_8_a04bb5f27c1a7cfffe881903f973dbec._comment create mode 100644 doc/special_remotes/glacier/comment_9_89c4506e079c299fd098d0fe746d032a._comment create mode 100644 doc/special_remotes/hook.mdwn create mode 100644 doc/special_remotes/hook/comment_1_6a74a25891974a28a8cb42b87cb53c26._comment create mode 100644 doc/special_remotes/hook/comment_2_ee7c43b93c5b787216334f019643f6a0._comment create mode 100644 doc/special_remotes/hook/comment_3_2593291795e732994862d08bf2ed467b._comment create mode 100644 doc/special_remotes/hook/comment_4_35d79b5ffa5a19056efcdc805070bc4b._comment create mode 100644 doc/special_remotes/hook/comment_5_6fbf1e963fa3ea4b2eb8ca5a3819762d._comment create mode 100644 doc/special_remotes/hook/comment_6_e0ab48d5333e5de85f016b097e6fdac1._comment create mode 100644 doc/special_remotes/hook/comment_7_cc2b1243c2c36e63241513bcaddfea67._comment create mode 100644 doc/special_remotes/hook/comment_8_bbae315233bda48eb04662dfd48cf1ae._comment create mode 100644 doc/special_remotes/hook/comment_9_037523d1994c702239ca96791156fe65._comment create mode 100644 doc/special_remotes/httpalso.mdwn create mode 100644 doc/special_remotes/httpalso/comment_1_128e53b20a2f01bf55c83d52c4d42e93._comment create mode 100644 doc/special_remotes/httpalso/comment_2_aeeb2122814552f9cf83d950995b16ba._comment create mode 100644 doc/special_remotes/httpalso/comment_3_1c9384afe2779ab6c6ae689deea37b31._comment create mode 100644 doc/special_remotes/httpalso/comment_4_0bf4d78dec7ec997f781c5a46460b27b._comment create mode 100644 doc/special_remotes/httpalso/comment_5_500374b5826e87293dbd4e3aae570185._comment create mode 100644 doc/special_remotes/httpalso/comment_6_ee2c2a34e11bbbac835be7660830e298._comment create mode 100644 doc/special_remotes/httpalso/comment_7_cea7241b64264f3485e6759b9dc0dfaf._comment create mode 100644 doc/special_remotes/httpalso/comment_8_a5198f57b7eb6c458d5e88f8fc9776fa._comment create mode 100644 doc/special_remotes/ipfs.mdwn create mode 100644 doc/special_remotes/ipfs/comment_10_9fe1bef94c60fb47cad8b80b0cf0d722._comment create mode 100644 doc/special_remotes/ipfs/comment_12_1e38459dccd1ef3e23335e9bebca3241._comment create mode 100644 doc/special_remotes/ipfs/comment_12_5f8f72a832c8439e3769a1199dc46c4e._comment create mode 100644 doc/special_remotes/ipfs/comment_13_551c4dc55b73d6f07c4ddee546b5e938._comment create mode 100644 doc/special_remotes/ipfs/comment_14_8cfb0f54444e78089837e62502ef9f61._comment create mode 100644 doc/special_remotes/ipfs/comment_15_82b398be82a0b4ec7765606352ec0942._comment create mode 100644 doc/special_remotes/ipfs/comment_16_331655ed1b7ebb02444aa693b551e728._comment create mode 100644 doc/special_remotes/ipfs/comment_1_d1b2da148715476015716a2f866558b9._comment create mode 100644 doc/special_remotes/ipfs/comment_2_564271a8660d7bbade6e4ed396fcfb57._comment create mode 100644 doc/special_remotes/ipfs/comment_3_b8c7e402e0ee63d659ae33e3e2504ca2._comment create mode 100644 doc/special_remotes/ipfs/comment_4_06611859079239659ba7d73d655f517e._comment create mode 100644 doc/special_remotes/ipfs/comment_5_ba7d08b2bcb6614102c48b4cb3de5b1a._comment create mode 100644 doc/special_remotes/ipfs/comment_6_8621bbd87982f73cf401cfa09d95d1e4._comment create mode 100644 doc/special_remotes/ipfs/comment_7_062f266f26b5788b418de6955bff442d._comment create mode 100644 doc/special_remotes/ipfs/comment_8_eedf260df630192b49557bfc84c9ce82._comment create mode 100644 doc/special_remotes/ipfs/comment_9_630964c11465751773d1082e35737e70._comment create mode 100644 doc/special_remotes/rclone.mdwn create mode 100644 doc/special_remotes/rclone/comment_1_3fa761ad2e7a87e160b6d0e86814801c._comment create mode 100644 doc/special_remotes/rclone/comment_2_e5babe3bc4535946ee04e8339403fda4._comment create mode 100644 doc/special_remotes/rclone/comment_3_d946b28311da5e3632c651f52357a2c1._comment create mode 100644 doc/special_remotes/rsync.mdwn create mode 100644 doc/special_remotes/rsync/comment_10_43e8fa3517c1f5935f02ad06fbed63dc._comment create mode 100644 doc/special_remotes/rsync/comment_11_8cafc1a8b37e6fb056185ec058c0c3e8._comment create mode 100644 doc/special_remotes/rsync/comment_12_fa21b66a1722d226f1819646b9c45308._comment create mode 100644 doc/special_remotes/rsync/comment_13_368f90773db9522c373168e127a39ae6._comment create mode 100644 doc/special_remotes/rsync/comment_14_2261b1b7441eff9e28ec8e1f98d77980._comment create mode 100644 doc/special_remotes/rsync/comment_15_a4a0491a7dcee2e7b7786127518866af._comment create mode 100644 doc/special_remotes/rsync/comment_16_509514d6e3d790a80a2125068f499a72._comment create mode 100644 doc/special_remotes/rsync/comment_1_9e180c397486989beab21699b8e8f103._comment create mode 100644 doc/special_remotes/rsync/comment_2_25545dc0b53f09ae73b29899c8884b02._comment create mode 100644 doc/special_remotes/rsync/comment_3_960a89b1ae7e3888ffba06baa963dc21._comment create mode 100644 doc/special_remotes/rsync/comment_4_db84816c31239953dd21f23a8c557b43._comment create mode 100644 doc/special_remotes/rsync/comment_5_ccaffa4aded9dab88c76a856b96ea5b9._comment create mode 100644 doc/special_remotes/rsync/comment_6_e687b9482b177e1351c8c65ea617d3fa._comment create mode 100644 doc/special_remotes/rsync/comment_7_e122979ea811d9ef835ba05bb936190f._comment create mode 100644 doc/special_remotes/rsync/comment_8_d566113318d0aa7500d76ffe1bd46069._comment create mode 100644 doc/special_remotes/rsync/comment_9_5dcf10a502b2d4feac46b620d43e9d00._comment create mode 100644 doc/special_remotes/tahoe.mdwn create mode 100644 doc/special_remotes/tahoe/comment_10_90d6937e95301f83268e0c9190f0f8c5._comment create mode 100644 doc/special_remotes/tahoe/comment_1_d30f5958cca5dbcb93e4ea56a25586da._comment create mode 100644 doc/special_remotes/tahoe/comment_2_84d59f41949987381369ab75efc1b65e._comment create mode 100644 doc/special_remotes/tahoe/comment_3_8a425ab612c3b46efb9658ab79038661._comment create mode 100644 doc/special_remotes/tahoe/comment_4_11513056ee7de3dc8bf54c7e0948538d._comment create mode 100644 doc/special_remotes/tahoe/comment_5_588d129cc2eaf0a8df9fc2fc6de014a9._comment create mode 100644 doc/special_remotes/tahoe/comment_6_9b23112d568a7edfce05e95478c30e4f._comment create mode 100644 doc/special_remotes/tahoe/comment_7_5aa703bb3d3f7de9e78a6d831bd515dc._comment create mode 100644 doc/special_remotes/tahoe/comment_9_75eccd07ea57f44d5a198533a907225a._comment create mode 100644 doc/special_remotes/tahoe/comment_9_f5e45af55cd18af73e2d3d5911039418._comment create mode 100644 doc/special_remotes/tor.mdwn create mode 100644 doc/special_remotes/web.mdwn create mode 100644 doc/special_remotes/web/comment_1_0bd570025f6cd551349ea88a4729ac8e._comment create mode 100644 doc/special_remotes/web/comment_2_333141cc9ec6c26ffd19aa95303a91e3._comment create mode 100644 doc/special_remotes/web/comment_3_e6ce9bb92c973350852c9498b7ffb50f._comment create mode 100644 doc/special_remotes/web/comment_4_8a8369e0398a7ec6c65e493e4d836db9._comment create mode 100644 doc/special_remotes/web/comment_5_1ad36ff51dfe69256fb0c8803da4efd6._comment create mode 100644 doc/special_remotes/webdav.mdwn create mode 100644 doc/special_remotes/webdav/comment_10_2c087a132c2203ac20636800bf73dfa7._comment create mode 100644 doc/special_remotes/webdav/comment_11_cde4fccaf551ba1eab8235ebf6654316._comment create mode 100644 doc/special_remotes/webdav/comment_12_76423262fceeced32ab18fa38ed53bdb._comment create mode 100644 doc/special_remotes/webdav/comment_14_2390020fa7daac8a6d3e8b713bd3b8e7._comment create mode 100644 doc/special_remotes/webdav/comment_14_45e3b7094d0611b2e082be352f74151a._comment create mode 100644 doc/special_remotes/webdav/comment_15_d43673b8c8ed3534f31d026098ab673c._comment create mode 100644 doc/special_remotes/webdav/comment_16_2a11dfc1fd159a6b9a25cde71ffec80b._comment create mode 100644 doc/special_remotes/webdav/comment_17_cfd2786a998af5034dc707f23aa81678._comment create mode 100644 doc/special_remotes/webdav/comment_18_c0aff1c36b500ae67c6cb4b34292a54b._comment create mode 100644 doc/special_remotes/webdav/comment_19_8bf8d365c0a13f684ed9f9cb013396e7._comment create mode 100644 doc/special_remotes/webdav/comment_1_6b523eea78eae1d19fe2a9950ee33e3a._comment create mode 100644 doc/special_remotes/webdav/comment_20_a85a41709bbc0c7c138838ac94ba499f._comment create mode 100644 doc/special_remotes/webdav/comment_21_e86cfc56014df46412f08b36bc019fb6._comment create mode 100644 doc/special_remotes/webdav/comment_22_556386f26497f4075ab533e21e2077ce._comment create mode 100644 doc/special_remotes/webdav/comment_23_b57fdd5322088e9b08dca7512c7e7793._comment create mode 100644 doc/special_remotes/webdav/comment_24_6c16a7c9abb257be4d046e27e11bacdf._comment create mode 100644 doc/special_remotes/webdav/comment_2_83fc4e7d9ba7a05c8500da659f561b8f._comment create mode 100644 doc/special_remotes/webdav/comment_3_239367ad639c61ecdf87a89f7ac53efe._comment create mode 100644 doc/special_remotes/webdav/comment_4_ffa52f7776cdc8caa28667b5eadae123._comment create mode 100644 doc/special_remotes/webdav/comment_5_5b8cbdb5e9a1b90d748a5074997e1cd5._comment create mode 100644 doc/special_remotes/webdav/comment_6_d3be3e588c3a2abb2025ceb82c18b0ef._comment create mode 100644 doc/special_remotes/webdav/comment_7_6fa7e11331db5a943015bd5367eb3d73._comment create mode 100644 doc/special_remotes/webdav/comment_8_2627b41f80c7511b27464e2040b128a8._comment create mode 100644 doc/special_remotes/webdav/comment_9_b8f17efe524bb45a3e16705996df1265._comment create mode 100644 doc/special_remotes/xmpp.mdwn create mode 100644 doc/special_remotes/xmpp/comment_10_c7c2e2e81cb5b2b9a5272430c835dd39._comment create mode 100644 doc/special_remotes/xmpp/comment_11_05d9a67b9331656b4035399641cedb1b._comment create mode 100644 doc/special_remotes/xmpp/comment_1_568247938929a2934e8198fca80b7184._comment create mode 100644 doc/special_remotes/xmpp/comment_2_9fc3f512020b7eb2591d6b7b2e8de2d7._comment create mode 100644 doc/special_remotes/xmpp/comment_3_48ddbba1402d89acaea07cff747c48e0._comment create mode 100644 doc/special_remotes/xmpp/comment_4_59857879abaae22bde444a215e00bf18._comment create mode 100644 doc/special_remotes/xmpp/comment_5_583ee374bd34fcc9ae26c2fd690e8c47._comment create mode 100644 doc/special_remotes/xmpp/comment_6_8f0b5bba1271d031a67e7f0c175d67d5._comment create mode 100644 doc/special_remotes/xmpp/comment_7_ac7acbded03325b015959d82ae77faf1._comment create mode 100644 doc/special_remotes/xmpp/comment_8_81a9636a1e8a36a58185468a26f8633d._comment create mode 100644 doc/special_remotes/xmpp/comment_9_eda76b826491c96b1ce072aacf9d3adf._comment create mode 100644 doc/stickers.mdwn create mode 100644 doc/stickers/comment_1_96f9b35048793c1cc0902cced82b65c5._comment create mode 100644 doc/stickers/comment_2_39cfee29eae5e69d88d84b2c65eb83fe._comment create mode 100644 doc/stickers/hex.svg create mode 100644 doc/stickers/hexdemos.svg create mode 100644 doc/submodules.mdwn create mode 100644 doc/submodules/comment_10_936e145bbe3b6bd928571c17d3416937._comment create mode 100644 doc/submodules/comment_11_78fffae9facce1600915bc19429d81e2._comment create mode 100644 doc/submodules/comment_12_d59882712e0547c748d3b354e8607d62._comment create mode 100644 doc/submodules/comment_1_15a2633524fc376b6a6c4f76187e435b._comment create mode 100644 doc/submodules/comment_2_fb006a18240230aefb80ee8aeebdccb7._comment create mode 100644 doc/submodules/comment_3_92cdc81ccc4831f5ad493736ca87e87d._comment create mode 100644 doc/submodules/comment_4_9da0d19529dfb8a997ad469169e55895._comment create mode 100644 doc/submodules/comment_5_9ccb133a957498724188a8749359a422._comment create mode 100644 doc/submodules/comment_6_d1877da19346bbd6067ff95252974a9b._comment create mode 100644 doc/submodules/comment_7_899cf2aa74cbb8160b1e249b314e7d60._comment create mode 100644 doc/submodules/comment_8_8755b0d18c1b013ed0dc121ecfb83360._comment create mode 100644 doc/submodules/comment_9_5e3a7d5c81fb37efbfe22cbbe8b8a247._comment create mode 100644 doc/summary.mdwn create mode 100644 doc/sync.mdwn create mode 100644 doc/sync/comment_10_2cd8ab86f498d6f676f859b552f831eb._comment create mode 100644 doc/sync/comment_11_7683879f6982c0eb0aa39b66ff5a5ea9._comment create mode 100644 doc/sync/comment_12_2fea14fa314ddb7ab645a5cca5a95fd9._comment create mode 100644 doc/sync/comment_13_690f66be9cefe28844d8df653b7a0331._comment create mode 100644 doc/sync/comment_14_db342785a4dade30b5b75cb95031bed1._comment create mode 100644 doc/sync/comment_15_168e0ab10b4084e13df1a3058fa7e8a9._comment create mode 100644 doc/sync/comment_16_96096f994fc55f921f2b24b274f998f7._comment create mode 100644 doc/sync/comment_17_44a4ae4685c4bf2b4e7c61897eb3ff80._comment create mode 100644 doc/sync/comment_18_838fb249cd5be83962770d5cc394389a._comment create mode 100644 doc/sync/comment_19_d409ad20c5a6671f0d0b834232368030._comment create mode 100644 doc/sync/comment_1_59681be5568f568f5c54eb0445163dd2._comment create mode 100644 doc/sync/comment_20_537b27219871a565ae7bb7f357cd3793._comment create mode 100644 doc/sync/comment_21_9c0368eb796f1191c22c186cbb06c642._comment create mode 100644 doc/sync/comment_22_e83ed5c0034c48baed7943c596f708ae._comment create mode 100644 doc/sync/comment_23_e5e7ec9fbafe5e0429161b977e483752._comment create mode 100644 doc/sync/comment_24_1d1eb1bddc835644c7f9d6e83e09b752._comment create mode 100644 doc/sync/comment_25_7e69a963102ceaa5b691ad9ed15c5a42._comment create mode 100644 doc/sync/comment_25_ea6f4e1f5ab31cd74d67fe95e83084cb._comment create mode 100644 doc/sync/comment_27_8925805ff8902d7b2d1f47c1395aadc7._comment create mode 100644 doc/sync/comment_28_e5c5da7fc0d0d034bfae33481f1ae067._comment create mode 100644 doc/sync/comment_29_161c5d3f693de45070e037d27ee7e8aa._comment create mode 100644 doc/sync/comment_2_9301ff5e81d37475f594e74fbe32f24e._comment create mode 100644 doc/sync/comment_30_f75f5957dbd0f6fd7b2d7291f06e7489._comment create mode 100644 doc/sync/comment_31_c85edac65571caff70e87dff2317a4e5._comment create mode 100644 doc/sync/comment_3_49560003da47490e4fabd4ab0089f2d7._comment create mode 100644 doc/sync/comment_4_cf29326408e62575085d1f980087c923._comment create mode 100644 doc/sync/comment_5_18c396c59907147bb2bf713e55392b6b._comment create mode 100644 doc/sync/comment_6_012e9d4468d0b88ee3c5dad3911c3606._comment create mode 100644 doc/sync/comment_7_6276e100d1341f1a0be368f54de0ae7b._comment create mode 100644 doc/sync/comment_8_b89161c82c05634d35f6b65bf8360a96._comment create mode 100644 doc/sync/comment_9_849883b7cc05bfcb01914d8737098010._comment create mode 100644 doc/templates/bare.tmpl create mode 100644 doc/templates/blogpost.tmpl create mode 100644 doc/templates/buglist.tmpl create mode 100644 doc/templates/bugtemplate.mdwn create mode 100644 doc/templates/note.mdwn create mode 100644 doc/templates/walkthrough.tmpl create mode 100644 doc/testimonials.mdwn create mode 100644 doc/testimonials/comment_1_2bf439f7a3bc3d6fab91849017946182._comment create mode 100644 doc/thanks.mdwn create mode 100644 doc/thanks/list create mode 100644 doc/thanks/list.2018 create mode 100644 doc/thanks/list.2023 create mode 100644 doc/tips.mdwn create mode 100644 doc/tips/Accessing_files_in_bare_remotes_without_git-annex.mdwn create mode 100644 doc/tips/Accessing_files_in_bare_remotes_without_git-annex/comment_1_9243af1c87fdaf33e336ec34e99c0f74._comment create mode 100644 doc/tips/Announcing_recastex_-___40__re__41__podcast__from_your_annex.mdwn create mode 100644 doc/tips/Building_git-annex_on_Debian_OR___37____164____35____34____164____37____38____34____35___Haskell__33__.mdwn create mode 100644 doc/tips/Building_git-annex_on_Debian_OR___37____164____35____34____164____37____38____34____35___Haskell__33__/comment_1_835a3608df3e9d044cabe822d0f3e7e4._comment create mode 100644 doc/tips/Building_git-annex_on_Debian_OR___37____164____35____34____164____37____38____34____35___Haskell__33__/comment_2_080b30cba72a718e73ea715e259e1cfb._comment create mode 100644 doc/tips/Bup_repositories_in_git-annex.mdwn create mode 100644 doc/tips/Bup_repositories_in_git-annex/comment_1_738959a699755704baab6df778ecd120._comment create mode 100644 doc/tips/Crude_Windows_Sync.mdwn create mode 100644 doc/tips/Decentralized_repository_behind_a_Firewall.mdwn create mode 100644 doc/tips/Decentralized_repository_behind_a_Firewall/comment_1_78b9035234a690ca5a7c9f3cc78fa092._comment create mode 100644 doc/tips/Decrypting_files_in_special_remotes_without_git-annex.mdwn create mode 100644 doc/tips/Decrypting_files_in_special_remotes_without_git-annex/comment_1_9288805fae0710b19da6c82f9dc32f2a._comment create mode 100644 doc/tips/Delay_Assistant_Startup_on_Login.mdwn create mode 100644 doc/tips/Delay_Assistant_Startup_on_Login/comment_1_c63917150527efab4b1106183b3aa7ef._comment create mode 100644 doc/tips/Faster_bash_autocompletion_with_big_annex_repos.mdwn create mode 100644 doc/tips/Faster_bash_autocompletion_with_big_annex_repos/comment_1_a41fb1037186319bbb44f7a67df6120f._comment create mode 100644 doc/tips/Git_annex_and_Calibre.mdwn create mode 100644 doc/tips/Git_annex_and_Calibre/comment_1_b0ef346eaab9ff616aa1ba6b5f4530bc._comment create mode 100644 doc/tips/Git_annex_and_Calibre/comment_2_9e8122ea81bbd0a86bd6c5173db801f8._comment create mode 100644 doc/tips/Git_annex_and_Calibre/comment_3_ee1372977919229d17d216cfc3fb0f61._comment create mode 100644 doc/tips/How_to_retroactively_annex_a_file_already_in_a_git_repo.mdwn create mode 100644 doc/tips/How_to_retroactively_annex_a_file_already_in_a_git_repo/comment_1_7eaf73fb3355bd706ab18a43790b3c10._comment create mode 100644 doc/tips/How_to_retroactively_annex_a_file_already_in_a_git_repo/comment_2_dac1a171204f30d7c906e878eb6bd461._comment create mode 100644 doc/tips/How_to_retroactively_annex_a_file_already_in_a_git_repo/comment_3_b62ec0b848d2487d68d7032682622193._comment create mode 100644 doc/tips/How_to_retroactively_annex_a_file_already_in_a_git_repo/comment_4_2423904e41a86cd1c6bc155d7b733642._comment create mode 100644 doc/tips/How_to_retroactively_annex_a_file_already_in_a_git_repo/comment_5_3062c0794ecd7c6237efae66f4d9b62f._comment create mode 100644 doc/tips/How_to_retroactively_annex_a_file_already_in_a_git_repo/comment_6_1eceb980814f95b28caac9d4d9894f01._comment create mode 100644 doc/tips/How_to_retroactively_annex_a_file_already_in_a_git_repo/comment_7_603db6818d33663b70b917c04fd8485b._comment create mode 100644 doc/tips/How_to_retroactively_annex_a_file_already_in_a_git_repo/comment_8_834410421ccede5194bd8fbaccea8d1a._comment create mode 100644 doc/tips/Internet_Archive_via_S3.mdwn create mode 100644 doc/tips/Internet_Archive_via_S3/comment_1_d53a3848c20dce61867283fc03c2adaa._comment create mode 100644 doc/tips/Internet_Archive_via_S3/comment_2_91c1472da27b00e5d682d22bc1ef04e0._comment create mode 100644 doc/tips/Internet_Archive_via_S3/comment_3_e23cf781c532f80d47d52265f2b2c87e._comment create mode 100644 doc/tips/Repositories_with_large_number_of_files.mdwn create mode 100644 doc/tips/Repositories_with_large_number_of_files/comment_10_3fac08b817ca3dbfcac3a03ce521464e._comment create mode 100644 doc/tips/Repositories_with_large_number_of_files/comment_11_49585db4fbf9f22bf806ee08d73b7db1._comment create mode 100644 doc/tips/Repositories_with_large_number_of_files/comment_12_e1f3b19d1dd62b1c9314e1e826fec54f._comment create mode 100644 doc/tips/Repositories_with_large_number_of_files/comment_13_6b4cd0667d700c0c5ec6e0054b43f2e7._comment create mode 100644 doc/tips/Repositories_with_large_number_of_files/comment_14_f8af84e301d271e9822556f23395dde7._comment create mode 100644 doc/tips/Repositories_with_large_number_of_files/comment_15_71def7a311980e89a3b877175ea5bbe2._comment create mode 100644 doc/tips/Repositories_with_large_number_of_files/comment_1_fac49a6d3f6a18c9925c34521221307d._comment create mode 100644 doc/tips/Repositories_with_large_number_of_files/comment_2_f8417d9ebcfdcba34dfbbf76070ad95c._comment create mode 100644 doc/tips/Repositories_with_large_number_of_files/comment_3_992f2a85ce0cdcef2f97ff978560fdb8._comment create mode 100644 doc/tips/Repositories_with_large_number_of_files/comment_4_8ff3aa032fb778ff69276984152578b0._comment create mode 100644 doc/tips/Repositories_with_large_number_of_files/comment_5_8540bf807eaf1b4e927eafc03deef304._comment create mode 100644 doc/tips/Repositories_with_large_number_of_files/comment_6_9169a33c06cf8aea231cdd8f51ce17b6._comment create mode 100644 doc/tips/Repositories_with_large_number_of_files/comment_7_f56f1ffeb5e1f382d3227b4ace7f84a1._comment create mode 100644 doc/tips/Repositories_with_large_number_of_files/comment_8_25a26f5210986655808992533aa48d3d._comment create mode 100644 doc/tips/Repositories_with_large_number_of_files/comment_9_c2b44076201d8152f16e12cb23c50397._comment create mode 100644 doc/tips/Shamir_secret_sharing_and_git-annex.mdwn create mode 100644 doc/tips/Synology_NAS_and_git_annex.mdwn create mode 100644 doc/tips/Synology_NAS_and_git_annex/comment_10_ee03a12ac5ba760b038ac5b93eea4be3._comment create mode 100644 doc/tips/Synology_NAS_and_git_annex/comment_11_ab2487da061a23e14198875a00ae801e._comment create mode 100644 doc/tips/Synology_NAS_and_git_annex/comment_13_44b28cff77db57a83d9448f768695d2b._comment create mode 100644 doc/tips/Synology_NAS_and_git_annex/comment_1_ef7e19f1fd2005eb7cc74509ffb92766._comment create mode 100644 doc/tips/Synology_NAS_and_git_annex/comment_2_5e723ccf026fe970ad31207f9f036b69._comment create mode 100644 doc/tips/Synology_NAS_and_git_annex/comment_3_8beb2b4b79c7787a92689aaad3bfc452._comment create mode 100644 doc/tips/Synology_NAS_and_git_annex/comment_4_b04a1245378d3580432e85dff8eefdec._comment create mode 100644 doc/tips/Synology_NAS_and_git_annex/comment_5_7e4ec2b22fb15e653d3b2274493e460c._comment create mode 100644 doc/tips/Synology_NAS_and_git_annex/comment_6_954fc1b423208928fafdeb8cdac47c50._comment create mode 100644 doc/tips/Synology_NAS_and_git_annex/comment_7_b862cb6ad0f912cc2ffede21df10c2fe._comment create mode 100644 doc/tips/Synology_NAS_and_git_annex/comment_8_38775efe367033a9a96cf98a49f8cdde._comment create mode 100644 doc/tips/Synology_NAS_and_git_annex/comment_9_52e1684fc40d1ab487a06cf13530871b._comment create mode 100644 doc/tips/Systemd_unit.mdwn create mode 100644 doc/tips/Systemd_unit/comment_1_06399a293f08401032bef1b94f05547c._comment create mode 100644 doc/tips/Systemd_unit/comment_2_389a2b36c3115eb3342429b0b68ddef2._comment create mode 100644 doc/tips/The_perfect_preferred_content_settings_for_my_android_phone.mdwn create mode 100644 doc/tips/The_perfect_preferred_content_settings_for_my_android_phone/comment_1_393d1636bb313530be383a075bd3440a._comment create mode 100644 doc/tips/The_perfect_preferred_content_settings_for_my_android_phone/comment_2_51a013213118660bdc06ff4d6c8110ba._comment create mode 100644 doc/tips/Using_Git-annex_as_a_web_browsing_assistant.mdwn create mode 100644 doc/tips/Using_git-annex_on_NTFS_with_WSL1.mdwn create mode 100644 doc/tips/Using_git-annex_on_NTFS_with_WSL1/comment_1_426bcb5c31f6ddf078b5f7c9bba00672._comment create mode 100644 doc/tips/Using_git-annex_on_NTFS_with_WSL1/comment_2_df6e152f1291c3dc1ba2b1b03b18083e._comment create mode 100644 doc/tips/Using_git-worktree_with_annex.mdwn create mode 100644 doc/tips/Using_git-worktree_with_annex/comment_1_8e1493eae66a483ece338649c763115a._comment create mode 100644 doc/tips/ZSH_completion.mdwn create mode 100644 doc/tips/ZSH_completion/comment_1_a810be47633dc83d737a9ef6e8870431._comment create mode 100644 doc/tips/ZSH_completion/comment_4_0e6f7035350ec0c9c61eeafb02ab7af7._comment create mode 100644 doc/tips/ZSH_completion/comment_4_2bdaf6a00723b975808a52863e417321._comment create mode 100644 doc/tips/ZSH_completion/comment_5_182c13292016baf46d8f53a306cb4b05._comment create mode 100644 doc/tips/a_gui_for_metadata_operations.mdwn create mode 100644 doc/tips/a_gui_for_metadata_operations/comment_1_1ce311d8328ea370a6a3494adea0f5db._comment create mode 100644 doc/tips/android_sync_with_adb.mdwn create mode 100644 doc/tips/android_sync_with_adb/comment_1_18e0b24a2907ba8df033454315e50212._comment create mode 100644 doc/tips/android_sync_with_adb/comment_1_ae0ae08f76cce010999ec8d366f52400._comment create mode 100644 doc/tips/android_sync_with_adb/comment_2_68affd1a753abdeca0f161698cc63413._comment create mode 100644 doc/tips/android_sync_with_adb/comment_4_d3e6d777a26c6719df4fd2b4cf89763b._comment create mode 100644 doc/tips/android_sync_with_adb/comment_5_1ac315bee17c7f4cdc5de1427852d609._comment create mode 100644 doc/tips/android_sync_with_adb/comment_6_4aefa716b1d37b89c3dc002f85ab6607._comment create mode 100644 doc/tips/android_sync_with_adb/comment_7_44a985a0cbd0adfe3a2ca4ef20443083._comment create mode 100644 doc/tips/android_sync_with_adb/comment_8_036ff21f5eee0c165a41e472ffdfa341._comment create mode 100644 doc/tips/android_sync_with_adb/comment_9_af84d2eaeba2d5a8df087e097095eba5._comment create mode 100644 doc/tips/antipatterns.mdwn create mode 100644 doc/tips/assume-unstaged.mdwn create mode 100644 doc/tips/assume-unstaged/comment_1_44abd811ef79a85e557418e17a3927be._comment create mode 100644 doc/tips/assume-unstaged/comment_2_5b589f37cfc03bf7be33a51826cc4dba._comment create mode 100644 doc/tips/automatically_adding_metadata.mdwn create mode 100644 doc/tips/automatically_adding_metadata/comment_10_cf770ba8eed7963f08517877bd460d3f._comment create mode 100644 doc/tips/automatically_adding_metadata/comment_11_6eeb21b66aa3541491ddc0dd3058ddc7._comment create mode 100644 doc/tips/automatically_adding_metadata/comment_12_92c28dee004562d7085191f3b9e29fec._comment create mode 100644 doc/tips/automatically_adding_metadata/comment_13_065b018dc290549b5ef00b50c3b09fcc._comment create mode 100644 doc/tips/automatically_adding_metadata/comment_1_ffc308cc6aedabbc55820db4f401e0fb._comment create mode 100644 doc/tips/automatically_adding_metadata/comment_2_bd64a53914107bc000c887b4d4bdf6af._comment create mode 100644 doc/tips/automatically_adding_metadata/comment_3_02e5314f827d17d482343e8f22c42fd9._comment create mode 100644 doc/tips/automatically_adding_metadata/comment_4_cd3c8e2f45db93576d1b82cfbfbe601b._comment create mode 100644 doc/tips/automatically_adding_metadata/comment_5_888f0a77405d616a0d51a6176b44f605._comment create mode 100644 doc/tips/automatically_adding_metadata/comment_6_34f0c55d09ddee3de642f6b25a9f6269._comment create mode 100644 doc/tips/automatically_adding_metadata/comment_7_94877b21bf80374c2874b971f26f0e55._comment create mode 100644 doc/tips/automatically_adding_metadata/comment_8_3880fb7f13e74d33d9c4e86772cc6b0e._comment create mode 100644 doc/tips/automatically_adding_metadata/comment_9_db9c2fa8545188520d4bdda5ba545624._comment create mode 100755 doc/tips/automatically_adding_metadata/pre-commit-annex create mode 100644 doc/tips/automatically_getting_files_on_checkout.mdwn create mode 100644 doc/tips/beware_of_SSD_wear_when_doing_fsck_on_large_special_remotes.mdwn create mode 100644 doc/tips/beware_of_SSD_wear_when_doing_fsck_on_large_special_remotes/comment_1_e7c5c46112a2406b873d08bbf53c40d8._comment create mode 100644 doc/tips/beware_of_SSD_wear_when_doing_fsck_on_large_special_remotes/comment_2_daf45ce29fed986fa9aa8b173760d0b7._comment create mode 100644 doc/tips/beware_of_SSD_wear_when_doing_fsck_on_large_special_remotes/comment_3_72d222020af4a9c6c753eb1ee7e1f1cf._comment create mode 100644 doc/tips/centralised_repository__58___starting_from_nothing.mdwn create mode 100644 doc/tips/centralised_repository__58___starting_from_nothing/comment_1_b0d22822017646775869ce1292e676f4._comment create mode 100644 doc/tips/centralized_git_repository_tutorial.mdwn create mode 100644 doc/tips/centralized_git_repository_tutorial/comment_1_9072ebc0c61446d7b151fcfab616fea9._comment create mode 100644 doc/tips/centralized_git_repository_tutorial/comment_2_528e92b21f0551fde4adb956654953ae._comment create mode 100644 doc/tips/centralized_git_repository_tutorial/comment_3_8894229043935e70089caf67f0cc4ddb._comment create mode 100644 doc/tips/centralized_git_repository_tutorial/comment_4_b496622537d2491854b02884acf1672c._comment create mode 100644 doc/tips/centralized_git_repository_tutorial/comment_5_c6e3468c95bc875e17724ee4a3a283a3._comment create mode 100644 doc/tips/centralized_git_repository_tutorial/on_GitHub.mdwn create mode 100644 doc/tips/centralized_git_repository_tutorial/on_GitHub/comment_1_98a1986ff2047de981d77755c462b690._comment create mode 100644 doc/tips/centralized_git_repository_tutorial/on_GitLab.mdwn create mode 100644 doc/tips/centralized_git_repository_tutorial/on_GitLab/comment_1_9d0694204984ec96379a62f0f70ba696._comment create mode 100644 doc/tips/centralized_git_repository_tutorial/on_GitLab/comment_2_1c33d3f62ec7119c116ad02b75c91f8a._comment create mode 100644 doc/tips/centralized_git_repository_tutorial/on_GitLab/comment_3_7d3ea328a42c3a1df01f87e5233eca62._comment create mode 100644 doc/tips/centralized_git_repository_tutorial/on_GitLab/comment_4_3c40b855e9914d8987b2f89d9abc29ae._comment create mode 100644 doc/tips/centralized_git_repository_tutorial/on_your_own_server.mdwn create mode 100644 doc/tips/centralized_git_repository_tutorial/on_your_own_server/comment_1_ae5af47faf95f008f1b07dbed5181286._comment create mode 100644 doc/tips/centralized_git_repository_tutorial/on_your_own_server/comment_2_b6a70e698eb4c46e753a620716c5956c._comment create mode 100644 doc/tips/centralized_git_repository_tutorial/on_your_own_server/comment_3_371f22ec58cf953c2b8abe3af71d3f91._comment create mode 100644 doc/tips/centralized_git_repository_tutorial/on_your_own_server/comment_4_6610f58b031d587f07f05b31754e4d97._comment create mode 100644 doc/tips/centralized_git_repository_tutorial/on_your_own_server/comment_5_b18e841b77cbec354d7641f37d030f49._comment create mode 100644 doc/tips/centralized_git_repository_tutorial/on_your_own_server/comment_6_a75d657dc322e1ccb02871492bef6f12._comment create mode 100644 doc/tips/centralized_git_repository_tutorial/on_your_own_server/comment_7_e818be55d40623167ce2d0381e7168e3._comment create mode 100644 doc/tips/centralized_git_repository_tutorial/on_your_own_server/comment_8_0778c23a67f7474753fb143ced6227a5._comment create mode 100644 doc/tips/centralized_git_repository_tutorial/on_your_own_server/comment_9_915965b46b03186eec466c51131c734c._comment create mode 100644 doc/tips/cloning_a_repository_privately.mdwn create mode 100644 doc/tips/cloning_a_repository_privately/comment_1_f5490d034074ca80a712bdd41c307139._comment create mode 100644 doc/tips/cloning_a_repository_privately/comment_2_0fb78b2183932da08809d60dfc5a7374._comment create mode 100644 doc/tips/deleting_unwanted_files.mdwn create mode 100644 doc/tips/deleting_unwanted_files/comment_1_2d3cf347c754047875a26d7f73c6fbb2._comment create mode 100644 doc/tips/deleting_unwanted_files/comment_2_8471758f2e02ebcfd9c015691ba9f15f._comment create mode 100644 doc/tips/disabling_a_special_remote.mdwn create mode 100644 doc/tips/disabling_a_special_remote/comment_1_8762ffef0024a9396979fc2586965c5d._comment create mode 100644 doc/tips/disabling_a_special_remote/comment_2_325dc29b8e82595806741b0ff8dd6215._comment create mode 100644 doc/tips/disabling_a_special_remote/comment_3_6c7c92a9c5ce9cee1450117f0bab1354._comment create mode 100644 doc/tips/downloading_podcasts.mdwn create mode 100644 doc/tips/downloading_podcasts/comment_10_4d4f6c22070b58918ee8d34c5e7290ad._comment create mode 100644 doc/tips/downloading_podcasts/comment_11_d8d77048c7e2524968c188e1ad517873._comment create mode 100644 doc/tips/downloading_podcasts/comment_12_0859317471b43c88744dd3df95c879f7._comment create mode 100644 doc/tips/downloading_podcasts/comment_13_e8c3c97282d17e2a1d47fb9d5e2b2f7b._comment create mode 100644 doc/tips/downloading_podcasts/comment_14_05a3694052de36848fbbad6eeeada895._comment create mode 100644 doc/tips/downloading_podcasts/comment_15_21028bed8858c2dae1ac9c2d014fd2a1._comment create mode 100644 doc/tips/downloading_podcasts/comment_16_4869fb5c9f896acc477c44de06c36ca7._comment create mode 100644 doc/tips/downloading_podcasts/comment_17_2e278ff200c1c15efd27c46a3e0aed40._comment create mode 100644 doc/tips/downloading_podcasts/comment_18_382f2b970738d9b1af577955c3083e90._comment create mode 100644 doc/tips/downloading_podcasts/comment_19_f76fc6835e5787b0156380bf09fd81ca._comment create mode 100644 doc/tips/downloading_podcasts/comment_1_f04bc32a34baeeffcd691e9f7cce0230._comment create mode 100644 doc/tips/downloading_podcasts/comment_20_65ebf3a3bbf0a2aebd2b69640b757e16._comment create mode 100644 doc/tips/downloading_podcasts/comment_21_98a1dacc8d264ff31801e6c5c5f2612d._comment create mode 100644 doc/tips/downloading_podcasts/comment_22_00cc7a2fb936d7ea3d5d3764a1637663._comment create mode 100644 doc/tips/downloading_podcasts/comment_23_62603cda8e581a2eb2cc799dffe8a740._comment create mode 100644 doc/tips/downloading_podcasts/comment_24_e75af243654d15bc7b917fcd888bcf2f._comment create mode 100644 doc/tips/downloading_podcasts/comment_25_2ee88c3375eca23fe34cab65df1e7aeb._comment create mode 100644 doc/tips/downloading_podcasts/comment_26_a69b4c033d85406675bb70e6996590ce._comment create mode 100644 doc/tips/downloading_podcasts/comment_27_e343aeda7c16c834599fb3caab2a51a2._comment create mode 100644 doc/tips/downloading_podcasts/comment_28_f57a89a32a55dfae0dfa237a8981a667._comment create mode 100644 doc/tips/downloading_podcasts/comment_2_a9a98cad7358d16792853a2ee413fe6c._comment create mode 100644 doc/tips/downloading_podcasts/comment_3_5a8068a5cb0fd864581157a3aa5d1113._comment create mode 100644 doc/tips/downloading_podcasts/comment_4_e7072a9da30b4c4b4c526013144238d4._comment create mode 100644 doc/tips/downloading_podcasts/comment_5_79b3f8d678ac9f67df4c0cd649657283._comment create mode 100644 doc/tips/downloading_podcasts/comment_6_35106fee5458bdd5c21868fbc49d3616._comment create mode 100644 doc/tips/downloading_podcasts/comment_7_ceb16498b7aadbf04a27acd5d6561d46._comment create mode 100644 doc/tips/downloading_podcasts/comment_8_147397603f0b3fdb42ca387d1da7c5ef._comment create mode 100644 doc/tips/downloading_podcasts/comment_9_6a26a6cc7683d38fae0f23c5a52d1e23._comment create mode 100644 doc/tips/dropboxannex.mdwn create mode 100644 doc/tips/dumb_metadata_extraction_from_xbmc.mdwn create mode 100644 doc/tips/dumb_metadata_extraction_from_xbmc/git-annex-xbmc-playcount.pl create mode 100644 doc/tips/emacs_integration.mdwn create mode 100644 doc/tips/enable_tor_on_nixos.mdwn create mode 100644 doc/tips/file_manager_integration.mdwn create mode 100644 doc/tips/file_manager_integration/comment_1_0f82520f415b4715946358658e1799a8._comment create mode 100644 doc/tips/file_manager_integration/comment_2_9cb6b7fcb8e33a75efd2f92d7e40a9c5._comment create mode 100644 doc/tips/file_manager_integration/comment_3_e7096737268cf66fce2709e9e4937f51._comment create mode 100644 doc/tips/finding_duplicate_files.mdwn create mode 100644 doc/tips/finding_duplicate_files/comment_11_5efc6b6ee1dfec88512183e9679ca616._comment create mode 100644 doc/tips/finding_duplicate_files/comment_12_630b065f41019716a5f6848e0adcd0f0._comment create mode 100644 doc/tips/finding_duplicate_files/comment_14_21f6ff2f7c51ca148fb8836a5e325e23._comment create mode 100644 doc/tips/finding_duplicate_files/comment_15_cd191275a277aee5de80507d5b5da69b._comment create mode 100644 doc/tips/finding_duplicate_files/comment_16_05827cf95647c56c344d150564cdf01d._comment create mode 100644 doc/tips/finding_duplicate_files/comment_17_9ea2c23d6099281f55122e39655d7353._comment create mode 100644 doc/tips/finding_duplicate_files/comment_1_ddb477ca242ffeb21e0df394d8fdf5d2._comment create mode 100644 doc/tips/finding_duplicate_files/comment_2_900eafe0a781018ff44b35ac232e3ad3._comment create mode 100644 doc/tips/finding_duplicate_files/comment_3._comment create mode 100644 doc/tips/finding_duplicate_files/comment_4_1494143a74cc1e9fbe4720c14b73d42b._comment create mode 100644 doc/tips/finding_duplicate_files/comment_5_1a35ca360468bcb84a67ad8d62a2ef7d._comment create mode 100644 doc/tips/finding_duplicate_files/comment_6_a6e88c93b31f67c933523725ff61b287._comment create mode 100644 doc/tips/finding_duplicate_files/comment_7_347b0186755a809594bd42feda6363e2._comment create mode 100644 doc/tips/finding_duplicate_files/comment_8_3af51722da0980b724facb184f0f66e9._comment create mode 100644 doc/tips/finding_duplicate_files/comment_9_7b4b78a5cd253abfe4f6001049bf64f3._comment create mode 100644 doc/tips/finding_which_file_matches_a_key.mdwn create mode 100644 doc/tips/finding_which_file_matches_a_key/comment_1_0379aaad5d1dc13e90c13ddd82719ce5._comment create mode 100644 doc/tips/finding_which_file_matches_a_key/comment_2_8feecf0ed92b958c902ea2032b5d9576._comment create mode 100644 doc/tips/finding_which_file_matches_a_key/comment_3_1775ca681b8471938a0173b21019f743._comment create mode 100644 doc/tips/flickrannex.mdwn create mode 100644 doc/tips/flickrannex/comment_10_50707f259abe5829ce075dfbecd5a4ba._comment create mode 100644 doc/tips/flickrannex/comment_11_ab5bcb025381b3da4d7c6dfd0c7310dd._comment create mode 100644 doc/tips/flickrannex/comment_12_90a331275d888221bc695003c8acbe46._comment create mode 100644 doc/tips/flickrannex/comment_13_1596e70dca71c853fd1d6fc9bde02b18._comment create mode 100644 doc/tips/flickrannex/comment_14_c728f10074d194efa8b2c60e97d275e7._comment create mode 100644 doc/tips/flickrannex/comment_15_2dd75800e4db58761fcbbd1954a36f1f._comment create mode 100644 doc/tips/flickrannex/comment_16_2f65093ec9f6d67d2cfe5b5fae201123._comment create mode 100644 doc/tips/flickrannex/comment_17_5bfe0988260b7825eeec204cd8f79b98._comment create mode 100644 doc/tips/flickrannex/comment_18_ef71e2f8c48b0399d9fbc419e850dc5d._comment create mode 100644 doc/tips/flickrannex/comment_2_d74c4fc7edf8e47f7482564ce0ef4d12._comment create mode 100644 doc/tips/flickrannex/comment_2_f53d0d5520e2835e9705bea4e75556f0._comment create mode 100644 doc/tips/flickrannex/comment_4_9ebba4d61140f6c2071e988c9328cf7e._comment create mode 100644 doc/tips/flickrannex/comment_5_4470dae270613dd8712623474bc80ab0._comment create mode 100644 doc/tips/flickrannex/comment_5_d395cdcf815cb430e374ff05c1a63ff4._comment create mode 100644 doc/tips/flickrannex/comment_6_8cf730097001ffe106f2c743edce9d0a._comment create mode 100644 doc/tips/flickrannex/comment_7_a80c8087c4e1562a4c98a24edc182e5a._comment create mode 100644 doc/tips/flickrannex/comment_8_94f84254c32cf0f7dd1441b7da5d2bc6._comment create mode 100644 doc/tips/flickrannex/comment_9_5299b4cab4a4cb8e8fd4d2b39f0ea59c._comment create mode 100644 doc/tips/fully_encrypted_git_repositories_with_gcrypt.mdwn create mode 100644 doc/tips/fully_encrypted_git_repositories_with_gcrypt/comment_10_4440a80d64c60c7312d5c405d54e607a._comment create mode 100644 doc/tips/fully_encrypted_git_repositories_with_gcrypt/comment_11_28eb9d4ebf28ca310f9b357b1dad244a._comment create mode 100644 doc/tips/fully_encrypted_git_repositories_with_gcrypt/comment_12_b697b2ab10705b090a78e7717ec59b18._comment create mode 100644 doc/tips/fully_encrypted_git_repositories_with_gcrypt/comment_13_4e37146a870576f09f56d2e5ee784ed7._comment create mode 100644 doc/tips/fully_encrypted_git_repositories_with_gcrypt/comment_14_2044e821d841fcd37a51ae768fa88df2._comment create mode 100644 doc/tips/fully_encrypted_git_repositories_with_gcrypt/comment_15_de4838d82987685896d4c76dac7cdb6c._comment create mode 100644 doc/tips/fully_encrypted_git_repositories_with_gcrypt/comment_16_c1194234e9f4fd469fa4b9fea72219e1._comment create mode 100644 doc/tips/fully_encrypted_git_repositories_with_gcrypt/comment_17_098998132fb0bcf130b5bf8a16ac8b8a._comment create mode 100644 doc/tips/fully_encrypted_git_repositories_with_gcrypt/comment_18_bdcb4bace530ac8b2018916893ae7e93._comment create mode 100644 doc/tips/fully_encrypted_git_repositories_with_gcrypt/comment_1_5c54690586f2a781905ea4b25aa1147f._comment create mode 100644 doc/tips/fully_encrypted_git_repositories_with_gcrypt/comment_2_07feedb4348f8c31176cc744c19368a1._comment create mode 100644 doc/tips/fully_encrypted_git_repositories_with_gcrypt/comment_3_c2f873dffa015f1d72ad0c3921909316._comment create mode 100644 doc/tips/fully_encrypted_git_repositories_with_gcrypt/comment_4_f8a6e4415f4fe6da14f6a3b7334bc952._comment create mode 100644 doc/tips/fully_encrypted_git_repositories_with_gcrypt/comment_5_11b8e82d2a234f65b58b823e71c6d6a2._comment create mode 100644 doc/tips/fully_encrypted_git_repositories_with_gcrypt/comment_6_3e41948e1beffcf279bb05ef8e61cc07._comment create mode 100644 doc/tips/fully_encrypted_git_repositories_with_gcrypt/comment_7_4ce0b26b25b336f07b2e27246cdfba3e._comment create mode 100644 doc/tips/fully_encrypted_git_repositories_with_gcrypt/comment_8_49aa34d75d24a2066baa8a585bc9c2e9._comment create mode 100644 doc/tips/fully_encrypted_git_repositories_with_gcrypt/comment_9_3784e0c828cd60b6a9075c2d32d070cc._comment create mode 100644 doc/tips/get_git-annex-shell_into_PATH.mdwn create mode 100644 doc/tips/git-annex_extensions_for_ranger__44___the_file_manager.mdwn create mode 100644 doc/tips/git-annex_extensions_for_ranger__44___the_file_manager/comment_1_358d4041c0158c247340cd4588286df4._comment create mode 100644 doc/tips/git-annex_on_NFS.mdwn create mode 100644 doc/tips/git-annex_on_NFS/comment_1_e2e99f2c484597c0d314ae597be078c3._comment create mode 100644 doc/tips/git-annex_on_NFS/comment_2_06f2ee5095cd35063a434560375e172e._comment create mode 100644 doc/tips/hashdeep_integration.mdwn create mode 100644 doc/tips/hiding_missing_files.mdwn create mode 100644 doc/tips/hiding_missing_files/comment_1_eba2b140f9d5a9f7ee23cb3ba7da7612._comment create mode 100644 doc/tips/hiding_missing_files/comment_2_9bff461eb281f67d169d4be30129bc13._comment create mode 100644 doc/tips/imapannex.mdwn create mode 100644 doc/tips/install_on_Android_in_Termux.mdwn create mode 100644 doc/tips/install_on_Android_in_Termux/comment_1_dc277facdcfba4e175831467b0e450d5._comment create mode 100644 doc/tips/install_on_Android_in_Termux/old_comments.mdwn create mode 100644 doc/tips/install_on_Android_in_Termux/old_comments/comment_10_8c24553afc5352c8a4c9cd0555423325._comment create mode 100644 doc/tips/install_on_Android_in_Termux/old_comments/comment_11_8f5f8f47305b45dca53222ac0e3bde29._comment create mode 100644 doc/tips/install_on_Android_in_Termux/old_comments/comment_12_a7bbf9e61e2e993eca9a9222de899920._comment create mode 100644 doc/tips/install_on_Android_in_Termux/old_comments/comment_13_b46679eac8d4d86b2abe9baff1f0a609._comment create mode 100644 doc/tips/install_on_Android_in_Termux/old_comments/comment_14_20a995c941f9a3582a8913d412e3d090._comment create mode 100644 doc/tips/install_on_Android_in_Termux/old_comments/comment_15_387e69f3ed94a00c01b0a097132f989c._comment create mode 100644 doc/tips/install_on_Android_in_Termux/old_comments/comment_16_2d7181f765cdbf545f161825c4cfeca9._comment create mode 100644 doc/tips/install_on_Android_in_Termux/old_comments/comment_17_37ba50a8378b2ac3d920fc8155eea42a._comment create mode 100644 doc/tips/install_on_Android_in_Termux/old_comments/comment_18_c1b5fefdc9a654579d0ada3db7a40ad8._comment create mode 100644 doc/tips/install_on_Android_in_Termux/old_comments/comment_19_5e0aa7c4341867374a67f5fe0a242e00._comment create mode 100644 doc/tips/install_on_Android_in_Termux/old_comments/comment_1_320b1fa3328cf8b8e584e72a9cd7735a._comment create mode 100644 doc/tips/install_on_Android_in_Termux/old_comments/comment_20_9651ab0e1e43d193cca16963f5fde858._comment create mode 100644 doc/tips/install_on_Android_in_Termux/old_comments/comment_21_3d1c6a1dc4ff8f04dffa4a02ad56fef2._comment create mode 100644 doc/tips/install_on_Android_in_Termux/old_comments/comment_22_39e2f2100a49f986760db389cf10240b._comment create mode 100644 doc/tips/install_on_Android_in_Termux/old_comments/comment_2_3a8c8facaa8b2989c88ebaabb984c7de._comment create mode 100644 doc/tips/install_on_Android_in_Termux/old_comments/comment_2_663de2e553ea050dd5a00fc88aeb6412._comment create mode 100644 doc/tips/install_on_Android_in_Termux/old_comments/comment_4_338e7f1b0fdf273d5fa453fe8ed2578b._comment create mode 100644 doc/tips/install_on_Android_in_Termux/old_comments/comment_5_82c4de6ad0ff016e72133d2552b5158d._comment create mode 100644 doc/tips/install_on_Android_in_Termux/old_comments/comment_6_66bfd7ca3dd81bb7632cb91fd8637dae._comment create mode 100644 doc/tips/install_on_Android_in_Termux/old_comments/comment_7_b475d3c36cf6d52d6b4720d00a5ae245._comment create mode 100644 doc/tips/install_on_Android_in_Termux/old_comments/comment_8_35329178895fc03395f08a37044e7c94._comment create mode 100644 doc/tips/install_on_Android_in_Termux/old_comments/comment_9_7ae18460ca6201cc313215a8a03e0d57._comment create mode 100644 doc/tips/largefiles.mdwn create mode 100644 doc/tips/largefiles/comment_10_18f17926c44ea4b0c17a61a91c6bb5b5._comment create mode 100644 doc/tips/largefiles/comment_11_e7c83e38c92b8fc91bae140c1d7c007d._comment create mode 100644 doc/tips/largefiles/comment_13_16176199c4c98c66dd40b5eae95122ed._comment create mode 100644 doc/tips/largefiles/comment_13_b541d011d4c7f23227426c783a4bdc20._comment create mode 100644 doc/tips/largefiles/comment_14_2f8d8e73e4218b1e36e358770016cabe._comment create mode 100644 doc/tips/largefiles/comment_14_cd71d1c6e69a9fc7feadf9aa6a39c406._comment create mode 100644 doc/tips/largefiles/comment_15_d1f24df21ac577b89a8ae385532de6f2._comment create mode 100644 doc/tips/largefiles/comment_16_4c6f52958246757dfbedd0b410d43ffe._comment create mode 100644 doc/tips/largefiles/comment_17_066fdebc2655dd11077fda1ef6e102e4._comment create mode 100644 doc/tips/largefiles/comment_1_b84e5cb8316c30fc7b355234384a5899._comment create mode 100644 doc/tips/largefiles/comment_2_825b72391117f88062a585684cf62eeb._comment create mode 100644 doc/tips/largefiles/comment_3_f4df42fe943011cc8feb2921a59616e9._comment create mode 100644 doc/tips/largefiles/comment_4_b6380286f60c1cd46a82a2e90c7aa05f._comment create mode 100644 doc/tips/largefiles/comment_5_20c6702f83dbade1ac4d6eee30c40b4b._comment create mode 100644 doc/tips/largefiles/comment_6_639b1492271643566846b48fe13f7b8d._comment create mode 100644 doc/tips/largefiles/comment_7_35a634c5e6d780972b9e938065837988._comment create mode 100644 doc/tips/largefiles/comment_8_f036356b23a4690705a2b4df604e82ba._comment create mode 100644 doc/tips/local_caching_of_annexed_files.mdwn create mode 100644 doc/tips/local_caching_of_annexed_files/comment_10_c93895a509ab4e458043450bccf930dc._comment create mode 100644 doc/tips/local_caching_of_annexed_files/comment_11_5bf79eae24dd6b69daa1cd10e0b4d296._comment create mode 100644 doc/tips/local_caching_of_annexed_files/comment_12_cbc8fbd8a98574683008ca363d3ac6b7._comment create mode 100644 doc/tips/local_caching_of_annexed_files/comment_13_18514bbfab0ff0d8a70ce5b08436cd44._comment create mode 100644 doc/tips/local_caching_of_annexed_files/comment_14_7afa02db922ef1ad9d4031a87e4b688c._comment create mode 100644 doc/tips/local_caching_of_annexed_files/comment_15_a1ce74ef47a0512bc56ff323c2c03c75._comment create mode 100644 doc/tips/local_caching_of_annexed_files/comment_16_3f4950f7dc51472b5f0405baeac187a0._comment create mode 100644 doc/tips/local_caching_of_annexed_files/comment_17_d1f0d7ac76f704ea71c4971ee7ed0cde._comment create mode 100644 doc/tips/local_caching_of_annexed_files/comment_18_6b21f1ed5a2cbbba7c7042dcfec080a8._comment create mode 100644 doc/tips/local_caching_of_annexed_files/comment_19_490c15d7673c535e83c7f1df3082e7ed._comment create mode 100644 doc/tips/local_caching_of_annexed_files/comment_1_ad1ab9d78cc0c45fcda54bf9f03b4f8f._comment create mode 100644 doc/tips/local_caching_of_annexed_files/comment_20_af084d315d82c1bae85122939042305b._comment create mode 100644 doc/tips/local_caching_of_annexed_files/comment_21_3776a0371faccc673c868323278f3b0d._comment create mode 100644 doc/tips/local_caching_of_annexed_files/comment_22_b047ea1c6b9247a42b560a111d4fdeae._comment create mode 100644 doc/tips/local_caching_of_annexed_files/comment_23_994f408b01fa09e80599538a4ff28485._comment create mode 100644 doc/tips/local_caching_of_annexed_files/comment_2_d3ac760cfee0decfbcb4f81ddbc39a3f._comment create mode 100644 doc/tips/local_caching_of_annexed_files/comment_3_2a80533f259cde64662db7e6a1c1742c._comment create mode 100644 doc/tips/local_caching_of_annexed_files/comment_4_42906e52528907a0960ab8b08c2eedd4._comment create mode 100644 doc/tips/local_caching_of_annexed_files/comment_5_dc1e5e3d256a2618f6c2a7864b01c08e._comment create mode 100644 doc/tips/local_caching_of_annexed_files/comment_6_c0d79b07a4c83c9d081d7c8f702fa4dc._comment create mode 100644 doc/tips/local_caching_of_annexed_files/comment_7_ffdf07bac38a6c29b799281441fd32c9._comment create mode 100644 doc/tips/local_caching_of_annexed_files/comment_8_0e4571cc81ade6510b7a1ddfff9cb055._comment create mode 100644 doc/tips/local_caching_of_annexed_files/comment_9_7db7787a306c70ba3c1687c1d103608d._comment create mode 100644 doc/tips/making_a_remote_repo_update_when_changes_are_pushed_to_it.mdwn create mode 100644 doc/tips/mc_menu_integration.mdwn create mode 100644 doc/tips/megaannex.mdwn create mode 100644 doc/tips/megaannex/comment_1_eec701662debd2a78c48243dbcebf59a._comment create mode 100644 doc/tips/megaannex/comment_2_c1158b7ec15646d64cae8215ce845642._comment create mode 100644 doc/tips/metadata_driven_views.mdwn create mode 100644 doc/tips/metadata_driven_views/comment_1_1d6793701fd8a1a66bae04662cf853ce._comment create mode 100644 doc/tips/metadata_driven_views/comment_2_13ae4e3668b693c0eefaca23b88515cf._comment create mode 100644 doc/tips/metadata_driven_views/comment_3_196f55e52a5d8a8f061603ab87ad04ad._comment create mode 100644 doc/tips/migrating_data_to_a_new_backend.mdwn create mode 100644 doc/tips/migrating_two_seperate_disconnected_directories_to_git_annex.mdwn create mode 100644 doc/tips/migrating_two_seperate_disconnected_directories_to_git_annex/comment_1_d94ae69945416e57faa6e6dd5536f66e._comment create mode 100644 doc/tips/migrating_two_seperate_disconnected_directories_to_git_annex/comment_2_c6c11a9d5f9f136fa541404cdc49f45c._comment create mode 100644 doc/tips/multiple_remotes_accessing_the_same_data_store.mdwn create mode 100644 doc/tips/offline_archive_drives.mdwn create mode 100644 doc/tips/offline_archive_drives/comment_1_3d4fdf42191a9d81434d00f51c3609ff._comment create mode 100644 doc/tips/offline_archive_drives/comment_2_864c752aa8d064791a4b14dbbe2e6882._comment create mode 100644 doc/tips/offline_archive_drives/comment_3_7be2ccaf70c9ecfc9a34384e0e31f490._comment create mode 100644 doc/tips/offline_archive_drives/comment_4_f9f2f8c59818d3d48475fa3cbf339ba3._comment create mode 100644 doc/tips/offline_archive_drives/comment_5_25c92a3602a1365d68e6bab080e4a41d._comment create mode 100644 doc/tips/offline_archive_drives/comment_6_f64f48f2bb5325bf9e14e2aa96a94429._comment create mode 100644 doc/tips/offline_archive_drives/comment_7_c8b506c4b2da98be430016e219680e34._comment create mode 100644 doc/tips/owncloudannex.mdwn create mode 100644 doc/tips/owncloudannex/comment_1_129652308c3c499462828dcaf8e747a4._comment create mode 100644 doc/tips/owncloudannex/comment_2_38604990368666f654d41891ba99ac61._comment create mode 100644 doc/tips/owncloudannex/comment_3_1bfd290d00d6536da7d31818db46f8ec._comment create mode 100644 doc/tips/owncloudannex/comment_4_492b6922a7c5bb5464fedb46b0c5303b._comment create mode 100644 doc/tips/owncloudannex/comment_5_1d48ac08714fadcb06d874570d745bd8._comment create mode 100644 doc/tips/owncloudannex/comment_6_65959f49a2f56bffd6fe48670c0c8d5a._comment create mode 100644 doc/tips/owncloudannex/comment_7_7482002991672ef67836bae43b8d0be8._comment create mode 100644 doc/tips/owncloudannex/comment_8_6579203d726f4a39db02fcdda156e12c._comment create mode 100644 doc/tips/owncloudannex/comment_9_e52582d76e9b57cc11791f2730389605._comment create mode 100644 doc/tips/peer_to_peer_network_with_tor.mdwn create mode 100644 doc/tips/peer_to_peer_network_with_tor/comment_1_72d4ea5ffa23f5048c453c2e7510e2f0._comment create mode 100644 doc/tips/peer_to_peer_network_with_tor/comment_2_8180e202fc493ad07999a3367ccd9425._comment create mode 100644 doc/tips/peer_to_peer_network_with_tor/comment_3_9fc514cf5273dd4a29dfb3ab81346425._comment create mode 100644 doc/tips/peer_to_peer_network_with_tor/comment_4_917eee70600e13470f70555abe06597d._comment create mode 100644 doc/tips/peer_to_peer_network_with_tor/comment_5_6db70bb9266a92e249587bc4d095c472._comment create mode 100644 doc/tips/playlist_fetch.mdwn create mode 100644 doc/tips/playlist_fetch/comment_1_5310fd53406d35f36deff68e8c2cb599._comment create mode 100644 doc/tips/powerful_file_matching.mdwn create mode 100644 doc/tips/public_Amazon_S3_remote.mdwn create mode 100644 doc/tips/public_Amazon_S3_remote/comment_1_a2684b49dbc2de45b644523f47b3c891._comment create mode 100644 doc/tips/public_Amazon_S3_remote/comment_2_f155c3aa054a23df1ab057baaa300a62._comment create mode 100644 doc/tips/publishing_your_files_to_the_public.mdwn create mode 100644 doc/tips/publishing_your_files_to_the_public/comment_1_40f690c59de96159da96855c61bb5963._comment create mode 100644 doc/tips/publishing_your_files_to_the_public/comment_2_0287fd56eea34fcd5831768252335a7b._comment create mode 100644 doc/tips/publishing_your_files_to_the_public/comment_3_4ae6d6c5137e5f9b667417c2c77fca85._comment create mode 100644 doc/tips/publishing_your_files_to_the_public/comment_4_33b50a2de3f1268c875fc388a85c0296._comment create mode 100644 doc/tips/publishing_your_files_to_the_public/comment_5_3216edeefa99f484194d6de061283170._comment create mode 100644 doc/tips/publishing_your_files_to_the_public/comment_6_06cba66922cc382c112fdac52b98bb4d._comment create mode 100644 doc/tips/publishing_your_files_to_the_public/comment_7_caf9ad71e3805347df98f4d6df352cec._comment create mode 100644 doc/tips/publishing_your_files_to_the_public/old_method.mdwn create mode 100644 doc/tips/publishing_your_files_to_the_public/old_method/comment_1_48f545ce26dbec944f96796ed3b9204d._comment create mode 100644 doc/tips/publishing_your_files_to_the_public/old_method/comment_2_27a40806d009d617b3ad56873197bf87._comment create mode 100644 doc/tips/publishing_your_files_to_the_public/old_method/comment_3_2f5045629e40e8d881725876190c7846._comment create mode 100644 doc/tips/publishing_your_files_to_the_public/old_method/comment_4_37405f20da790141187e9f780c999448._comment create mode 100644 doc/tips/publishing_your_files_to_the_public/old_method/comment_5_29c3ee4aed6a5b53b6767a96a7b85ad9._comment create mode 100644 doc/tips/recover_data_from_lost+found.mdwn create mode 100644 doc/tips/recover_data_from_lost+found/comment_1_f0901527a4f0faf0b1fd916d5b809314._comment create mode 100644 doc/tips/recover_data_from_lost+found/comment_2_ac405575058beeac992d07c55f7c53a8._comment create mode 100644 doc/tips/recover_data_from_lost+found/comment_3_02cb9efd54d8447d0bd11e5981e7dca7._comment create mode 100644 doc/tips/recover_data_from_lost+found/comment_4_960fcfe8c5c7bcb7350f61ecfb84f36c._comment create mode 100644 doc/tips/recover_data_from_lost+found/comment_5_e887b2d2ecbce3de22c517afd500e783._comment create mode 100644 doc/tips/recovering_from_a_corrupt_git_repository.mdwn create mode 100644 doc/tips/recovering_from_a_corrupt_git_repository/comment_1_f5827be97f78dbae113a5ba0c9ced896._comment create mode 100644 doc/tips/recovering_from_a_corrupt_git_repository/comment_2_e98df7275bb032308bb87e3607bdde32._comment create mode 100644 doc/tips/recovering_from_a_corrupt_git_repository/comment_3_11bece6dfac090edbcd783b266c482a3._comment create mode 100644 doc/tips/recovering_from_a_corrupt_git_repository/comment_4_86e99017f7585ac2f76753051214637e._comment create mode 100644 doc/tips/recovering_from_a_corrupt_git_repository/comment_6_c8953732ce353cdf0c4fb81ddc98c04a._comment create mode 100644 doc/tips/recovering_from_a_corrupt_git_repository/comment_6_d0da84df0241dc6ccf0aa0c7598917df._comment create mode 100644 doc/tips/recovering_from_a_corrupt_git_repository/comment_7_addf49556e4c33d55a41c393f519d0a4._comment create mode 100644 doc/tips/recovering_from_a_corrupt_git_repository/comment_8_505a2fc2b841fe8eb419801f923ef35f._comment create mode 100644 doc/tips/redacting_history_by_converting_git_files_to_annexed.mdwn create mode 100644 doc/tips/redacting_history_by_converting_git_files_to_annexed/comment_1_aece062800c6ed78988161d40e36bba4._comment create mode 100644 doc/tips/redacting_history_by_converting_git_files_to_annexed/comment_2_6b682415956756b969767f7de267f1f0._comment create mode 100644 doc/tips/redacting_history_by_converting_git_files_to_annexed/comment_3_7e92db3d8a392e43b305fa8ecc0e39d3._comment create mode 100644 doc/tips/remote_webapp_setup.mdwn create mode 100644 doc/tips/replacing_Sparkleshare_or_dvcs-autosync_with_the_assistant.mdwn create mode 100644 doc/tips/replacing_Sparkleshare_or_dvcs-autosync_with_the_assistant/comment_10_d1bd5d6b33951f6d11185bb4a8228269._comment create mode 100644 doc/tips/replacing_Sparkleshare_or_dvcs-autosync_with_the_assistant/comment_11_54692ebf854ecbcc5314bb29c33ecc66._comment create mode 100644 doc/tips/replacing_Sparkleshare_or_dvcs-autosync_with_the_assistant/comment_1_907e4032ca4a39adb846cf16dbf447dc._comment create mode 100644 doc/tips/replacing_Sparkleshare_or_dvcs-autosync_with_the_assistant/comment_2_902d001ba86657ef0f8cca5b175f99ca._comment create mode 100644 doc/tips/replacing_Sparkleshare_or_dvcs-autosync_with_the_assistant/comment_3_a1cf93f9b29658f0f26e9e0ae6057ee3._comment create mode 100644 doc/tips/replacing_Sparkleshare_or_dvcs-autosync_with_the_assistant/comment_4_e10671908b58c554375787d0f76e2366._comment create mode 100644 doc/tips/replacing_Sparkleshare_or_dvcs-autosync_with_the_assistant/comment_5_4114380f66b6376c851e93f6876d590b._comment create mode 100644 doc/tips/replacing_Sparkleshare_or_dvcs-autosync_with_the_assistant/comment_6_6a5d6af107b297afd008b021f73d787b._comment create mode 100644 doc/tips/replacing_Sparkleshare_or_dvcs-autosync_with_the_assistant/comment_7_74d57cf503a86d8f7ace2d769dbb58be._comment create mode 100644 doc/tips/replacing_Sparkleshare_or_dvcs-autosync_with_the_assistant/comment_8_85765c0cfeb5b326c06cf60c98147cbf._comment create mode 100644 doc/tips/replacing_Sparkleshare_or_dvcs-autosync_with_the_assistant/comment_9_082b5d90ffc836e7c86e40b63a75780d._comment create mode 100644 doc/tips/semi-synchronized_remotes.mdwn create mode 100644 doc/tips/semi-synchronized_remotes/comment_1_d0459d72b7e0441fe833a5c8e1588a4f._comment create mode 100644 doc/tips/setup_a_public_repository_on_a_web_site.mdwn create mode 100644 doc/tips/setup_a_public_repository_on_a_web_site/comment_10_5554d52c568fdd5235c498ba999545cb._comment create mode 100644 doc/tips/setup_a_public_repository_on_a_web_site/comment_11_5fc7b153f1822c8ae2d415963fcb9ce2._comment create mode 100644 doc/tips/setup_a_public_repository_on_a_web_site/comment_12_eb732e9c1c44942bc313aa1ab3ff56fc._comment create mode 100644 doc/tips/setup_a_public_repository_on_a_web_site/comment_13_4332e21dcbe4fdcbab58f01aca295fc9._comment create mode 100644 doc/tips/setup_a_public_repository_on_a_web_site/comment_1_1d0fa6da33e401df1d7ff31979247fec._comment create mode 100644 doc/tips/setup_a_public_repository_on_a_web_site/comment_2_b98b761dee9d923153e3c288c1d987ee._comment create mode 100644 doc/tips/setup_a_public_repository_on_a_web_site/comment_3_a6698218f15c598c9b32e0af850133bf._comment create mode 100644 doc/tips/setup_a_public_repository_on_a_web_site/comment_4_e20ea0dc04d4d62b699271483f81a136._comment create mode 100644 doc/tips/setup_a_public_repository_on_a_web_site/comment_5_0bb7c62b71d2c9da6fbfe8f889baff38._comment create mode 100644 doc/tips/setup_a_public_repository_on_a_web_site/comment_6_89eac454cfbdffabb916355b355e1b94._comment create mode 100644 doc/tips/setup_a_public_repository_on_a_web_site/comment_7_6015b7ad6a19f412d0b50bfb3a661fe2._comment create mode 100644 doc/tips/setup_a_public_repository_on_a_web_site/comment_8_ceb528ff60b9c7544eae28292ef74ddb._comment create mode 100644 doc/tips/setup_a_public_repository_on_a_web_site/comment_9_2dfb5b225ed62c0310ddadb0d83ceb79._comment create mode 100644 doc/tips/shared_git_annex_directory_between_multiple_users.mdwn create mode 100644 doc/tips/shared_git_annex_directory_between_multiple_users/comment_1_01db8cf9dff016bd8e0498d36f325418._comment create mode 100644 doc/tips/shared_git_annex_directory_between_multiple_users/comment_2_07ad0b2f6fd2644241a605a10d8fb8d0._comment create mode 100644 doc/tips/shared_git_annex_directory_between_multiple_users/comment_3_3bfb9e0e028f71c8a47e5363dcfdbd36._comment create mode 100644 doc/tips/skydriveannex.mdwn create mode 100644 doc/tips/skydriveannex/comment_10_c3465b5587548dea56b80b32cd66d653._comment create mode 100644 doc/tips/skydriveannex/comment_11_13692d8cb9ccf10ced26d90739385a6a._comment create mode 100644 doc/tips/skydriveannex/comment_1_bf383481b2bbb962fbfe783b9f2f213a._comment create mode 100644 doc/tips/skydriveannex/comment_2_1f747018b35ab8accd2bf0905e6ad926._comment create mode 100644 doc/tips/skydriveannex/comment_3_8b9444006734262693f71e50a40eae1d._comment create mode 100644 doc/tips/skydriveannex/comment_4_8b01dc6ca1082a8c24ff65fec9d759d8._comment create mode 100644 doc/tips/skydriveannex/comment_5_1d220d96945d497f3a93b5d848eb3995._comment create mode 100644 doc/tips/skydriveannex/comment_6_a7a3afdc7eed9a0eda48dcb57f1e87c6._comment create mode 100644 doc/tips/skydriveannex/comment_7_7fcd9c6b5e2a3fc7b753eeac06164036._comment create mode 100644 doc/tips/skydriveannex/comment_8_856eaa1b167033aede91a937099c7833._comment create mode 100644 doc/tips/skydriveannex/comment_9_cfcf767a1bf07957b76d7f44ef8a9500._comment create mode 100644 doc/tips/splitting_a_repository.mdwn create mode 100644 doc/tips/splitting_a_repository/comment_1_654527ef2350fe871e2d7ff6addc6713._comment create mode 100644 doc/tips/splitting_a_repository/comment_2_2437e95397e1b06ade5360405e399591._comment create mode 100644 doc/tips/splitting_a_repository/comment_3_c0ccbf6758eabf645075d3b84188825e._comment create mode 100644 doc/tips/splitting_a_repository/comment_4_fbf9d86fd3aee4542a7cabacce9578cd._comment create mode 100644 doc/tips/splitting_a_repository/comment_5_baf4871cb78b337c627a352333c4e39d._comment create mode 100644 doc/tips/splitting_a_repository/comment_6_ce243a141a286e5e1a55af8321238b5c._comment create mode 100644 doc/tips/splitting_a_repository/comment_7_0d11c72712da0cf36b8cc91ba7501d52._comment create mode 100644 doc/tips/splitting_a_repository/comment_8_72ebd848d406190e12e3291cff824f7e._comment create mode 100644 doc/tips/storing_data_in_git-lfs.mdwn create mode 100644 doc/tips/storing_data_in_git-lfs/comment_1_e4eb406a4bf146c1f442047a4c1b1e1a._comment create mode 100644 doc/tips/transmission_integration.mdwn create mode 100644 doc/tips/transmission_integration/transmission_integration.sh create mode 100644 doc/tips/unlocked_files.mdwn create mode 100644 doc/tips/unlocked_files/comment_10_add35d419c7735571208aa5e47437f99._comment create mode 100644 doc/tips/unlocked_files/comment_11_08102655fbb13e4977e82f3f097f28db._comment create mode 100644 doc/tips/unlocked_files/comment_12_8cd7855dc6419297174a32e847e5f49a._comment create mode 100644 doc/tips/unlocked_files/comment_13_99f82c84aa9d886062aa3e3956e1acf8._comment create mode 100644 doc/tips/unlocked_files/comment_14_e3425d219001fc34470f0cd55fc7241e._comment create mode 100644 doc/tips/unlocked_files/comment_15_4be14df022612d6301442b3210a17d0a._comment create mode 100644 doc/tips/unlocked_files/comment_16_61121c6b95e1310df8132aca13924b88._comment create mode 100644 doc/tips/unlocked_files/comment_17_15c6f8db289812e76859b21d158b1b2e._comment create mode 100644 doc/tips/unlocked_files/comment_1_29cef6b8e48e722fafed3fe9b7cefe08._comment create mode 100644 doc/tips/unlocked_files/comment_2_54a1811ef2f57f0843e48572ab6713b8._comment create mode 100644 doc/tips/unlocked_files/comment_3_f5f29661bd04a6bba6158307465981d9._comment create mode 100644 doc/tips/unlocked_files/comment_4_a8139747da8cbb2510b3647ba448d72d._comment create mode 100644 doc/tips/unlocked_files/comment_5_8225cb96640697d4955badfee5b75e39._comment create mode 100644 doc/tips/unlocked_files/comment_6_666d88b862a7f6f5cd719e454a8a6469._comment create mode 100644 doc/tips/unlocked_files/comment_7_46ff6b142c4cc9ad07b0c8dc07ba9c09._comment create mode 100644 doc/tips/unlocked_files/comment_8_9e5d1a9523239cb601612951af5eb9f1._comment create mode 100644 doc/tips/unlocked_files/comment_9_1cfd5f680f2d19ea1039ff0e7324083f._comment create mode 100644 doc/tips/untrusted_repositories.mdwn create mode 100644 doc/tips/using_Amazon_Glacier.mdwn create mode 100644 doc/tips/using_Amazon_Glacier/comment_1_ccee7f4f5a483a3650270b6e09ab7293._comment create mode 100644 doc/tips/using_Amazon_Glacier/comment_2_d34e05f9244d3a4fcec87b3c360adb4e._comment create mode 100644 doc/tips/using_Amazon_Glacier/comment_3_4c504fd22775afe36296cf54d3e04a8e._comment create mode 100644 doc/tips/using_Amazon_Glacier/comment_4_e6ac76b0c20285f4f96b3d0975e8ac66._comment create mode 100644 doc/tips/using_Amazon_Glacier/comment_5_7788890f58f714b0cdf1462c718ea536._comment create mode 100644 doc/tips/using_Amazon_Glacier/comment_6_0fbe528a57552622e8128196ad80c863._comment create mode 100644 doc/tips/using_Amazon_Glacier/comment_7_a83cfe55f4c70bd8801e0c05c5be8323._comment create mode 100644 doc/tips/using_Amazon_Glacier/comment_8_ddef6cc5d1a5fd3d69cfe8cccfa58a53._comment create mode 100644 doc/tips/using_Amazon_S3.mdwn create mode 100644 doc/tips/using_Amazon_S3/comment_10_43f3f12a83e3ace1674eae395b865409._comment create mode 100644 doc/tips/using_Amazon_S3/comment_11_70b4e62aabb93d078811cbdcd3cced20._comment create mode 100644 doc/tips/using_Amazon_S3/comment_12_d00472bf4ac5f7b2212073c081ba04c2._comment create mode 100644 doc/tips/using_Amazon_S3/comment_13_30bdbd217fd2b603984cf7d3a3dce266._comment create mode 100644 doc/tips/using_Amazon_S3/comment_14_5bb12e6fa51da00ecf48f2dee1bfb050._comment create mode 100644 doc/tips/using_Amazon_S3/comment_15_d8cc20706debc17f4f738d2019577dea._comment create mode 100644 doc/tips/using_Amazon_S3/comment_16_bb2cb128d9c6a8e9176604cef1f6fc91._comment create mode 100644 doc/tips/using_Amazon_S3/comment_1_666a26f95024760c99c627eed37b1966._comment create mode 100644 doc/tips/using_Amazon_S3/comment_2_f5a0883be7dbb421b584c6dc0165f1ef._comment create mode 100644 doc/tips/using_Amazon_S3/comment_3_32acba030c2ad252e2f7027075e4303e._comment create mode 100644 doc/tips/using_Amazon_S3/comment_4_92df5a9f923beafba55a1c455728112e._comment create mode 100644 doc/tips/using_Amazon_S3/comment_5_6b288e06010bedbb71e0afed6b427704._comment create mode 100644 doc/tips/using_Amazon_S3/comment_6_3b6c74b40ea666389ac04b52ab0819a0._comment create mode 100644 doc/tips/using_Amazon_S3/comment_7_cf6755d88463878f2ea6e4c300899027._comment create mode 100644 doc/tips/using_Amazon_S3/comment_8_4f9c2f6627f8ed3423bcc8b7bf2f76cb._comment create mode 100644 doc/tips/using_Amazon_S3/comment_9_47e4ea77d0262d332d86a06d7aaeddd8._comment create mode 100644 doc/tips/using_Backblaze_B2.mdwn create mode 100644 doc/tips/using_Backblaze_B2/comment_1_b8b045d5f3d2bed1905c05b4fa00c5ca._comment create mode 100644 doc/tips/using_Backblaze_B2/comment_2_d7fd727cb38a0290de10f06539a23d27._comment create mode 100644 doc/tips/using_Google_Cloud_Storage.mdwn create mode 100644 doc/tips/using_Google_Cloud_Storage/comment_1_c576182f39563ae68767391c4227a177._comment create mode 100644 doc/tips/using_Google_Cloud_Storage/comment_2_0843bfb776b8b6d5de4de7fda4489f34._comment create mode 100644 doc/tips/using_Google_Cloud_Storage/comment_3_9738f145014d8eae1f1aae7c39e71d31._comment create mode 100644 doc/tips/using_Google_Cloud_Storage/comment_4_63f29692ef270cd4a196ec94ff97185a._comment create mode 100644 doc/tips/using_Google_Cloud_Storage/comment_5_865f27a393f24fd5723c895d4d70dde3._comment create mode 100644 doc/tips/using_Google_Cloud_Storage/comment_6_d1462d9d1d425e609bf8ad8fb8f0a9d5._comment create mode 100644 doc/tips/using_Google_Cloud_Storage/comment_7_6896ea720bb29db35db4c5e2463fa818._comment create mode 100644 doc/tips/using_Google_Cloud_Storage/comment_8_1b4eb7e0f44865cd5ff0f8ef507d99c1._comment create mode 100644 doc/tips/using_Google_Drive.mdwn create mode 100644 doc/tips/using_Hubic.mdwn create mode 100644 doc/tips/using_borg_for_efficient_storage_of_old_annexed_files.mdwn create mode 100644 doc/tips/using_box.com_as_a_special_remote.mdwn create mode 100644 doc/tips/using_box.com_as_a_special_remote/comment_1_be39f063e8a6155cc2eb71829e884a63._comment create mode 100644 doc/tips/using_git-annex_from_your_program.mdwn create mode 100644 doc/tips/using_git_annex_with_no_fixed_hostname_and_optimising_ssh.mdwn create mode 100644 doc/tips/using_git_annex_with_no_fixed_hostname_and_optimising_ssh/comment_1_c0b7682a2b6f3078457b85683c825baf._comment create mode 100644 doc/tips/using_gitolite_with_git-annex.mdwn create mode 100644 doc/tips/using_gitolite_with_git-annex/comment_10_8767bc8014b459a3cd76f275fd4fa8d6._comment create mode 100644 doc/tips/using_gitolite_with_git-annex/comment_11_00715e0b47f09130e0e536e29f7b9258._comment create mode 100644 doc/tips/using_gitolite_with_git-annex/comment_12_7027ce60265b8f24c8ab54553e544068._comment create mode 100644 doc/tips/using_gitolite_with_git-annex/comment_13_75218b7409c0e281cb01c9b2791e8cdf._comment create mode 100644 doc/tips/using_gitolite_with_git-annex/comment_14_7d4d4515218d1259d32be3baeb5ee56e._comment create mode 100644 doc/tips/using_gitolite_with_git-annex/comment_15_dc6f21b5a3d5931c8d949a9753411b9e._comment create mode 100644 doc/tips/using_gitolite_with_git-annex/comment_16_8e5039e6655fc80dc863b6cdf44ef02a._comment create mode 100644 doc/tips/using_gitolite_with_git-annex/comment_17_9c40e1da8bb44f7207e802377f5cf923._comment create mode 100644 doc/tips/using_gitolite_with_git-annex/comment_18_f1a180d5cf65b7a870a13ddb4f76d00d._comment create mode 100644 doc/tips/using_gitolite_with_git-annex/comment_19_33c19097b6f2b48dfe09ec4c8d952d06._comment create mode 100644 doc/tips/using_gitolite_with_git-annex/comment_1_9a2a2a8eac9af97e0c984ad105763a73._comment create mode 100644 doc/tips/using_gitolite_with_git-annex/comment_20_c82af00db3dd74ee9bfe12668e76e57b._comment create mode 100644 doc/tips/using_gitolite_with_git-annex/comment_21_d2feaaf22d41413048dabf706d1b267e._comment create mode 100644 doc/tips/using_gitolite_with_git-annex/comment_22_90ead0e1fe8615fe11f6f1bd7dcd7e84._comment create mode 100644 doc/tips/using_gitolite_with_git-annex/comment_23_70dcb7e7ffdd14351adaf4c40ee7fdd0._comment create mode 100644 doc/tips/using_gitolite_with_git-annex/comment_24_a62f59295b3912dc38def5e493bdb55a._comment create mode 100644 doc/tips/using_gitolite_with_git-annex/comment_25_08b3b257b3dbd32cb807e29f512ea9c9._comment create mode 100644 doc/tips/using_gitolite_with_git-annex/comment_2_d8efea4ab9576555fadbb47666ecefa9._comment create mode 100644 doc/tips/using_gitolite_with_git-annex/comment_3_807035f38509ccb9f93f1929ecd37417._comment create mode 100644 doc/tips/using_gitolite_with_git-annex/comment_4_eb81f824aadc97f098379c5f7e4fba4c._comment create mode 100644 doc/tips/using_gitolite_with_git-annex/comment_5_f688309532d2993630e9e72e87fb9c46._comment create mode 100644 doc/tips/using_gitolite_with_git-annex/comment_6_3e203e010a4df5bf03899f867718adc5._comment create mode 100644 doc/tips/using_gitolite_with_git-annex/comment_7_f8fd08b6ab47378ad88c87348057220d._comment create mode 100644 doc/tips/using_gitolite_with_git-annex/comment_8_8249772c142117f88e37975d058aa936._comment create mode 100644 doc/tips/using_gitolite_with_git-annex/comment_9_28418635a6ed7231b89e02211cd3c236._comment create mode 100644 doc/tips/using_nested_git_repositories.mdwn create mode 100644 doc/tips/using_nested_git_repositories/comment_1_cd7f673de1c39d2f37d9958357d5e72d._comment create mode 100644 doc/tips/using_nested_git_repositories/comment_2_63f30b652c0cbdb0acf6745891f9f09e._comment create mode 100644 doc/tips/using_nested_git_repositories/comment_3_029571d8331ba2dcf0b149d071fef75c._comment create mode 100644 doc/tips/using_nested_git_repositories/comment_4_3c701a4c6789fc6c73f71217e7ed8c65._comment create mode 100644 doc/tips/using_signed_git_commits.mdwn create mode 100644 doc/tips/using_signed_git_commits/comment_1_82241dc5666e1b573a24b3e84f3991ae._comment create mode 100644 doc/tips/using_signed_git_commits/comment_2_5fb568fcd3aa376d2ee36c660a4a02a2._comment create mode 100644 doc/tips/using_signed_git_commits/comment_3_3edce6f128e96e1156601c6136118427._comment create mode 100644 doc/tips/using_signed_git_commits/comment_4_5ad0596373cc363ec9bc0b69efbac03c._comment create mode 100644 doc/tips/using_the_web_as_a_special_remote.mdwn create mode 100644 doc/tips/using_the_web_as_a_special_remote/comment_11_9889828caa47aad88267d0ec35f2240d._comment create mode 100644 doc/tips/using_the_web_as_a_special_remote/comment_12_1704dcd7fc94432af5aa18459495c9ab._comment create mode 100644 doc/tips/using_the_web_as_a_special_remote/comment_12_2ce018f181e039b5dd52e2b712f63eea._comment create mode 100644 doc/tips/using_the_web_as_a_special_remote/comment_13_39122e2587f84633fda262bfc9d076eb._comment create mode 100644 doc/tips/using_the_web_as_a_special_remote/comment_14_3a923511cf20d816b468044c03eb171f._comment create mode 100644 doc/tips/using_the_web_as_a_special_remote/comment_15_8981dfd222cbf349bac3d74f53675fde._comment create mode 100644 doc/tips/using_the_web_as_a_special_remote/comment_1_321a41d611c6fe45e047af9c96c5176c._comment create mode 100644 doc/tips/using_the_web_as_a_special_remote/comment_2_dfe9c8c49aadff80d2020288584e0390._comment create mode 100644 doc/tips/using_the_web_as_a_special_remote/comment_3_ed8dd3bbd9b9ae7f2309b72b94f61eb1._comment create mode 100644 doc/tips/using_the_web_as_a_special_remote/comment_4_c1133a524989a940f1b5db588707157a._comment create mode 100644 doc/tips/using_the_web_as_a_special_remote/comment_5_5ee9717e74ca2afed98e81fc0ea98a95._comment create mode 100644 doc/tips/using_the_web_as_a_special_remote/comment_6_dceb15bd656e69eefa3ca975d9d642de._comment create mode 100644 doc/tips/using_the_web_as_a_special_remote/comment_7_0bde977c62a53c90cb20491936bc399d._comment create mode 100644 doc/tips/using_the_web_as_a_special_remote/comment_8_3f32d536f51d5e9908953caf5736b0a0._comment create mode 100644 doc/tips/using_the_web_as_a_special_remote/comment_9_b420b1f320d620a9909cce5086c549bf._comment create mode 100644 doc/tips/visualizing_repositories_with_gource.mdwn create mode 100644 doc/tips/visualizing_repositories_with_gource/comment_1_01c5cd21375990c612b8f291904ddb3e._comment create mode 100644 doc/tips/visualizing_repositories_with_gource/screenshot.jpg create mode 100644 doc/tips/what_to_do_when_a_repository_is_corrupted.mdwn create mode 100644 doc/tips/what_to_do_when_a_repository_is_corrupted/comment_1_c3543190eae2af594f3e050057e80db6._comment create mode 100644 doc/tips/what_to_do_when_a_repository_is_corrupted/comment_2_025178c2b11affe2d42a87544b897dc8._comment create mode 100644 doc/tips/what_to_do_when_a_repository_is_corrupted/comment_3_9a6bae9c0326ecc7610f5415db20f49e._comment create mode 100644 doc/tips/what_to_do_when_a_repository_is_corrupted/comment_4_d4178d99179e8761162c74673042e28a._comment create mode 100644 doc/tips/what_to_do_when_a_repository_is_corrupted/comment_5_9b3738aa678015a58f30a22baa2012df._comment create mode 100644 doc/tips/what_to_do_when_a_repository_is_corrupted/comment_6_0e3224af10362a10aa1c8786423960a9._comment create mode 100644 doc/tips/what_to_do_when_you_lose_a_repository.mdwn create mode 100644 doc/tips/what_to_do_when_you_lose_a_repository/comment_1_cf19b8dc304dc37c26717174c4a98aa4._comment create mode 100644 doc/tips/what_to_do_when_you_lose_a_repository/comment_3_fa9ca81668f5faebf2f61b10f82c97d2._comment create mode 100644 doc/tips/what_to_do_when_you_lose_a_repository/comment_3_fdcfca8707e310ca7bb94d359adf8607._comment create mode 100644 doc/tips/what_to_do_when_you_lose_a_repository/comment_4_679eb9be0bfb9d48a2b96383c4816f62._comment create mode 100644 doc/tips/what_to_do_when_you_lose_a_repository/comment_5_4fb04b70d88ec93ff9ed4f884747d5d4._comment create mode 100644 doc/tips/what_to_do_when_you_lose_a_repository/comment_6_05db504cbff2ec2a6346bf43e57a3c25._comment create mode 100644 doc/tips/what_to_do_when_you_lose_a_repository/comment_7_4e6baa41bfee6edf2b17d4ade2909c7b._comment create mode 100644 doc/tips/what_to_do_when_you_lose_a_repository/comment_8_596bcfa25a4fa6e81bb6a0940c55a2f2._comment create mode 100644 doc/tips/what_to_do_when_you_lose_a_repository/comment_9_525e58e5941220b23b0ed73fa7611db1._comment create mode 100644 doc/tips/yet_another_simple_disk_usage_like_utility.mdwn create mode 100644 doc/tips/yet_another_simple_disk_usage_like_utility/comment_1_41b212bde8bc88d2a5dea93bd0dc75f1._comment create mode 100644 doc/tips/yet_another_simple_disk_usage_like_utility/comment_2_73698913837bfd5a58cf15721211e43e._comment create mode 100644 doc/todo.mdwn create mode 100644 doc/todo/--batch_for_add.mdwn create mode 100644 doc/todo/--batch_for_add/comment_1_b1362c86e162a49717d7e3b0816025ba._comment create mode 100644 doc/todo/--batch_for_find.mdwn create mode 100644 doc/todo/--batch_for_find/comment_1_d164ad661617d29cb1ceb3d6fc3bb37f._comment create mode 100644 doc/todo/--batch_for_find/comment_2_9873396186f4d24088fd746f42373678._comment create mode 100644 doc/todo/--batch_for_find/comment_3_598a0500a3a4573c50a559d1931f1918._comment create mode 100644 doc/todo/--batch_for_find/comment_4_830cf616968e25cee8e7d35f9709f79b._comment create mode 100644 doc/todo/--batch_for_info.mdwn create mode 100644 doc/todo/--debug-level___40__and__47__or_-c_annex.debug-level__41___+_more_debug_information_from_git-annex.mdwn create mode 100644 doc/todo/--debug-level___40__and__47__or_-c_annex.debug-level__41___+_more_debug_information_from_git-annex/comment_1_58e729e2fa58b28d247eeda579bb9329._comment create mode 100644 doc/todo/--debug-level___40__and__47__or_-c_annex.debug-level__41___+_more_debug_information_from_git-annex/comment_2_66a32cef4ff6bc93ad04346612f543ec._comment create mode 100644 doc/todo/--debug-level___40__and__47__or_-c_annex.debug-level__41___+_more_debug_information_from_git-annex/comment_3_ea60112be683188e43b27942667ddd77._comment create mode 100644 doc/todo/--debug-level___40__and__47__or_-c_annex.debug-level__41___+_more_debug_information_from_git-annex/comment_4_03cd162638a9b4f2b7981cee141693f6._comment create mode 100644 doc/todo/--debug-level___40__and__47__or_-c_annex.debug-level__41___+_more_debug_information_from_git-annex/comment_5_f27efaef3d9cb8db3de9dd42df252059._comment create mode 100644 doc/todo/--debug-level___40__and__47__or_-c_annex.debug-level__41___+_more_debug_information_from_git-annex/comment_6_d9014e7e964f47a4fdc680ffc53e17b8._comment create mode 100644 doc/todo/--debug-level___40__and__47__or_-c_annex.debug-level__41___+_more_debug_information_from_git-annex/comment_7_5ae9913b8b9a9fe443c211976adce002._comment create mode 100644 doc/todo/--get_option_for_diffdriver.mdwn create mode 100644 doc/todo/--get_option_for_diffdriver/comment_1_6b2501b2dc0318242e444e8d4b8b314f._comment create mode 100644 doc/todo/--get_option_for_diffdriver/comment_2_cb4eb05f447a214353a5bd5c29d207d0._comment create mode 100644 doc/todo/--json_for_registerurl.mdwn create mode 100644 doc/todo/--json_for_registerurl/comment_1_68fd330b6f20ef2d56234a639a5323c4._comment create mode 100644 doc/todo/--json_for_unannex__and_ideally_any_other_command_.mdwn create mode 100644 doc/todo/--json_for_unannex__and_ideally_any_other_command_/comment_1_9cc7829b4742f21077a27caad7ae638e._comment create mode 100644 doc/todo/--metadata_fieldname__62____61__VALUE_string_comparison.mdwn create mode 100644 doc/todo/--metadata_fieldname__62____61__VALUE_string_comparison/comment_1_e2da4d1fceb5f7c37e3c19d42256c8d5._comment create mode 100644 doc/todo/--metadata_fieldname__62____61__VALUE_string_comparison/comment_2_38c46dee95ef2f246cd403717faaaa09._comment create mode 100644 doc/todo/--metadata_fieldname__62____61__VALUE_string_comparison/comment_3_9c298fbda8d395fe9b8395105708c3bd._comment create mode 100644 doc/todo/--metadata_fieldname__62____61__VALUE_string_comparison/comment_4_b8f2602e633dae4c85f89c97c8f03d81._comment create mode 100644 doc/todo/--metadata_fieldname__62____61__VALUE_string_comparison/comment_5_afba02fb24eddc6569dce63ffe606dcf._comment create mode 100644 doc/todo/Add_annex.orig-uuid_config_for___39__ephemeral_clones__39__.mdwn create mode 100644 doc/todo/Add_annex.orig-uuid_config_for___39__ephemeral_clones__39__/comment_1_7815551c0ec6d933ae5537e28fb183ad._comment create mode 100644 doc/todo/Add_annex.orig-uuid_config_for___39__ephemeral_clones__39__/comment_2_2debe0cb11763f0673255cfd7f764815._comment create mode 100644 doc/todo/Add_annex.orig-uuid_config_for___39__ephemeral_clones__39__/comment_3_b559ac06e7fc622b8bbb5e73d4cc0930._comment create mode 100644 doc/todo/Add_annex.orig-uuid_config_for___39__ephemeral_clones__39__/comment_4_8cb8cdef0cc563714d7bc7d91743762b._comment create mode 100644 doc/todo/Adding_a_matcher_for___39__recently_touched_files__39__.mdwn create mode 100644 doc/todo/Adding_a_matcher_for___39__recently_touched_files__39__/comment_1_bcb54e40904b04006dd7f8962add6994._comment create mode 100644 doc/todo/Adding_unmatched_files_to_a_view.mdwn create mode 100644 doc/todo/Adding_unmatched_files_to_a_view/comment_1_dee34c34b2df1d430a4f6c2792d35e28._comment create mode 100644 doc/todo/Adding_unmatched_files_to_a_view/comment_2_271f37d6c3e0f61324f9f50cb9cf24c7._comment create mode 100644 doc/todo/Adding_unmatched_files_to_a_view/comment_3_2e2a15ffc429db4b09215e7a7118e502._comment create mode 100644 doc/todo/Adressing_.gitattributes_inefficiency.mdwn create mode 100644 doc/todo/Adressing_.gitattributes_inefficiency/comment_1_335b8d3c5a903c1e83a7f84b7bfc2998._comment create mode 100644 doc/todo/Allow_for_TRANSFER-SUCCESS_to_report_also_a_URL_where_key_could_now_be_obtained_from.mdwn create mode 100644 doc/todo/Allow_for_TRANSFER-SUCCESS_to_report_also_a_URL_where_key_could_now_be_obtained_from/comment_1_9f4245bd016f9283464a25698563786c._comment create mode 100644 doc/todo/Allow_for_TRANSFER-SUCCESS_to_report_also_a_URL_where_key_could_now_be_obtained_from/comment_2_34d1eab194b7913dd453131d9187287a._comment create mode 100644 doc/todo/Allow_for_TRANSFER-SUCCESS_to_report_also_a_URL_where_key_could_now_be_obtained_from/comment_3_f667aa26dadadede318d31176292102d._comment create mode 100644 doc/todo/Allow_for_TRANSFER-SUCCESS_to_report_also_a_URL_where_key_could_now_be_obtained_from/comment_4_16d30e86132d6a3cefaa8e2fecbda7ca._comment create mode 100644 doc/todo/Allow_for_URLs_prioritization_WITHIN___40__web__41___remote.mdwn create mode 100644 doc/todo/Allow_for_URLs_prioritization_WITHIN___40__web__41___remote/comment_10_ff4c23b4ccaf649a9914f4aa4435968d._comment create mode 100644 doc/todo/Allow_for_URLs_prioritization_WITHIN___40__web__41___remote/comment_11_a7087acb84b3139418c597496e18f4a1._comment create mode 100644 doc/todo/Allow_for_URLs_prioritization_WITHIN___40__web__41___remote/comment_12_69e39ee8140ef0cafd1b0f21be6a8d37._comment create mode 100644 doc/todo/Allow_for_URLs_prioritization_WITHIN___40__web__41___remote/comment_13_afb7fb3750e3b16bf144c52ffc68c153._comment create mode 100644 doc/todo/Allow_for_URLs_prioritization_WITHIN___40__web__41___remote/comment_1_f2172080e8e3e324a739d8769dca2ed0._comment create mode 100644 doc/todo/Allow_for_URLs_prioritization_WITHIN___40__web__41___remote/comment_2_1ab2634c8a7058c5aa09f1ba72be3471._comment create mode 100644 doc/todo/Allow_for_URLs_prioritization_WITHIN___40__web__41___remote/comment_3_6970e60b7d826beb025fda452cc1bc13._comment create mode 100644 doc/todo/Allow_for_URLs_prioritization_WITHIN___40__web__41___remote/comment_4_8fe7f4c03784f519fd184e6d59fb0b2a._comment create mode 100644 doc/todo/Allow_for_URLs_prioritization_WITHIN___40__web__41___remote/comment_5_4d8e8abe8b31174ccc536387a96b0228._comment create mode 100644 doc/todo/Allow_for_URLs_prioritization_WITHIN___40__web__41___remote/comment_6_b6261ff8e442ee6df79834844f6b3565._comment create mode 100644 doc/todo/Allow_for_URLs_prioritization_WITHIN___40__web__41___remote/comment_7_50516fc4b3c315a9e5d771777fb27e9f._comment create mode 100644 doc/todo/Allow_for_URLs_prioritization_WITHIN___40__web__41___remote/comment_8_87ad54a694bde70713e71acd4e074894._comment create mode 100644 doc/todo/Allow_for_URLs_prioritization_WITHIN___40__web__41___remote/comment_9_4029b264ea2b0d47e6949f832af69282._comment create mode 100644 doc/todo/Allow_globally_limiting_filename_length.mdwn create mode 100644 doc/todo/Allow_remote_sync__42___and_ignore__42___in_git_annex_config.mdwn create mode 100644 doc/todo/Allow_remote_sync__42___and_ignore__42___in_git_annex_config/comment_1_7a55c03691a6b6738d1a0e2555cb4cea._comment create mode 100644 doc/todo/Android__58___add_a___34__Share_via__34___shortcut___34__Add_to_Annex__34__.mdwn create mode 100644 doc/todo/Android__58___add_a___34__Share_via__34___shortcut___34__Add_to_Annex__34__/comment_1_286279b96fc7940c9e7eeb0eb57cc279._comment create mode 100644 doc/todo/Avoid_lengthy___34__Scanning_for_unlocked_files_...__34__.mdwn create mode 100644 doc/todo/Avoid_lengthy___34__Scanning_for_unlocked_files_...__34__/comment_10_41cf16d6d14d1551c43736f854da3d05._comment create mode 100644 doc/todo/Avoid_lengthy___34__Scanning_for_unlocked_files_...__34__/comment_11_2ad0467b36d7e7be3b346dd54ba4f46b._comment create mode 100644 doc/todo/Avoid_lengthy___34__Scanning_for_unlocked_files_...__34__/comment_12_70c4c9f6c35acd7ca1134ac74356e5be._comment create mode 100644 doc/todo/Avoid_lengthy___34__Scanning_for_unlocked_files_...__34__/comment_13_440624874dd3697dd538655765f2b6a2._comment create mode 100644 doc/todo/Avoid_lengthy___34__Scanning_for_unlocked_files_...__34__/comment_14_cf70ca1f6dac58c44ee3ece2199d25a9._comment create mode 100644 doc/todo/Avoid_lengthy___34__Scanning_for_unlocked_files_...__34__/comment_15_06641815750038a0ed908d929868c1c3._comment create mode 100644 doc/todo/Avoid_lengthy___34__Scanning_for_unlocked_files_...__34__/comment_16_adf57675c5fa1047ee48b16dd356f4fe._comment create mode 100644 doc/todo/Avoid_lengthy___34__Scanning_for_unlocked_files_...__34__/comment_17_c41b669837be95b731bd68f1b3269fef._comment create mode 100644 doc/todo/Avoid_lengthy___34__Scanning_for_unlocked_files_...__34__/comment_18_4e1e8fd89ea9be43d89e72562236c979._comment create mode 100644 doc/todo/Avoid_lengthy___34__Scanning_for_unlocked_files_...__34__/comment_19_b34a9cf4114ed943fe4ba2de78eb0bbc._comment create mode 100644 doc/todo/Avoid_lengthy___34__Scanning_for_unlocked_files_...__34__/comment_1_94395a48d99e4737dd0ee28a597bfe70._comment create mode 100644 doc/todo/Avoid_lengthy___34__Scanning_for_unlocked_files_...__34__/comment_20_e9a36e9600561201969c4d21499833af._comment create mode 100644 doc/todo/Avoid_lengthy___34__Scanning_for_unlocked_files_...__34__/comment_21_8f5dd9ba761e636ce5413da4e596296d._comment create mode 100644 doc/todo/Avoid_lengthy___34__Scanning_for_unlocked_files_...__34__/comment_2_bd7c278922a52004540db79099e35763._comment create mode 100644 doc/todo/Avoid_lengthy___34__Scanning_for_unlocked_files_...__34__/comment_3_c3f029b865bcd489d03bcf722dfa4e44._comment create mode 100644 doc/todo/Avoid_lengthy___34__Scanning_for_unlocked_files_...__34__/comment_4_2cb31617bb7003c5bf0e5def358da0e4._comment create mode 100644 doc/todo/Avoid_lengthy___34__Scanning_for_unlocked_files_...__34__/comment_5_2aab5c685ad934486e60065b3c8da1bf._comment create mode 100644 doc/todo/Avoid_lengthy___34__Scanning_for_unlocked_files_...__34__/comment_6_a5089531b5d9bdcc90a07cb9d3f1da7d._comment create mode 100644 doc/todo/Avoid_lengthy___34__Scanning_for_unlocked_files_...__34__/comment_6_e2718b6492d5da64a8bd6b13ad1cfa45._comment create mode 100644 doc/todo/Avoid_lengthy___34__Scanning_for_unlocked_files_...__34__/comment_7_71d3936dc37349392e6f7b0bd8292b7b._comment create mode 100644 doc/todo/Avoid_lengthy___34__Scanning_for_unlocked_files_...__34__/comment_9_7ada8d7e9438f2740b700e2e54b045da._comment create mode 100644 doc/todo/Bidirectional_metadata.mdwn create mode 100644 doc/todo/Bidirectional_metadata/comment_1_9974d17e407fab14b12399016d3d66c2._comment create mode 100644 doc/todo/Bidirectional_metadata/comment_2_c791aca6da2bb1be70991bc1a76982a4._comment create mode 100644 doc/todo/Bittorrent-like_features.mdwn create mode 100644 doc/todo/Bittorrent-like_features/comment_1_f4c110ef35ebf4fd89f06edf2c4f0c48._comment create mode 100644 doc/todo/Bittorrent-like_features/comment_2_83148bd5c5c5e6c2eff3ad6e1d4fb82c._comment create mode 100644 doc/todo/Bittorrent-like_features/comment_3_84f149b30de1562593623aa23dc0396c._comment create mode 100644 doc/todo/Bittorrent-like_features/comment_4_7c54c83e582c0d4848aaf3d70e312707._comment create mode 100644 doc/todo/Bittorrent-like_features/comment_5_194dd0e8404ea72af9fb6ff34b994998._comment create mode 100644 doc/todo/Bittorrent-like_features/comment_6_489505da4143fb1c2bf21e7af695cdef._comment create mode 100644 doc/todo/CHECKPRESENT-MULTI.mdwn create mode 100644 doc/todo/CHECKPRESENT-MULTI/comment_1_181a908a9f77a4c51d1d09f1aff526b7._comment create mode 100644 doc/todo/CHECKPRESENT-MULTI/comment_2_87857aeaf45927846cde8cea70f9e6f4._comment create mode 100644 doc/todo/CHECKPRESENT-MULTI/comment_4_5228016c35ca0b13545b82bbd3b9455e._comment create mode 100644 doc/todo/Can__39__t_access_files_from___39__Removable_drive__39___repo_even_if_set_as_client.mdwn create mode 100644 doc/todo/Can__39__t_access_files_from___39__Removable_drive__39___repo_even_if_set_as_client/comment_10_e33dddf4d1f104107c86800a0a9a89b2._comment create mode 100644 doc/todo/Can__39__t_access_files_from___39__Removable_drive__39___repo_even_if_set_as_client/comment_1_25eb2d7d0a9cdd1c55df0cec68472723._comment create mode 100644 doc/todo/Can__39__t_access_files_from___39__Removable_drive__39___repo_even_if_set_as_client/comment_2_9e9b96e5113a50533251e946c2560d81._comment create mode 100644 doc/todo/Can__39__t_access_files_from___39__Removable_drive__39___repo_even_if_set_as_client/comment_3_6b091198ddd6ed709b076df1296aeb77._comment create mode 100644 doc/todo/Can__39__t_access_files_from___39__Removable_drive__39___repo_even_if_set_as_client/comment_4_118b588685b535cca4c02eb6ef297c67._comment create mode 100644 doc/todo/Can__39__t_access_files_from___39__Removable_drive__39___repo_even_if_set_as_client/comment_5_5cead277493e1c020e16be6f9245fe33._comment create mode 100644 doc/todo/Can__39__t_access_files_from___39__Removable_drive__39___repo_even_if_set_as_client/comment_6_0f135f97c2808dce094628dc6608e617._comment create mode 100644 doc/todo/Can__39__t_access_files_from___39__Removable_drive__39___repo_even_if_set_as_client/comment_7_1d6f47f9e6cf935f19d68af6d5aa92fa._comment create mode 100644 doc/todo/Can__39__t_access_files_from___39__Removable_drive__39___repo_even_if_set_as_client/comment_8_c5758fdb32348b9cd804ff17d27864e1._comment create mode 100644 doc/todo/Can__39__t_access_files_from___39__Removable_drive__39___repo_even_if_set_as_client/comment_9_3f0bfc5a79aa59ac76a6968aacda6655._comment create mode 100644 doc/todo/Configuring_metadata_view_filenames.mdwn create mode 100644 doc/todo/Configuring_metadata_view_filenames/comment_1_08f8f27e5a8dbd80a91ffd9fd6f64e6c._comment create mode 100644 doc/todo/Configuring_metadata_view_filenames/comment_2_34efe1424a9b02dca706565517900bd6._comment create mode 100644 doc/todo/Configuring_metadata_view_filenames/comment_3_dd7aa7560412d4589d2fc28eb978a71e._comment create mode 100644 doc/todo/Configuring_metadata_view_filenames/comment_4_1873c7cdd142dffc210ec0172bf29997._comment create mode 100644 doc/todo/Configuring_metadata_view_filenames/comment_5_b222634d9f97e2ef604b476df357d54b._comment create mode 100644 doc/todo/Configuring_metadata_view_filenames/comment_6_1eb8c2d70ff9e3e5b3dbebf88270eb93._comment create mode 100644 doc/todo/Configuring_metadata_view_filenames/comment_7_ae259f68ab5b366b6fd29e5df1a05469._comment create mode 100644 doc/todo/Configuring_metadata_view_filenames/comment_8_2bcfc677da72637f34904b84fdd95c10._comment create mode 100644 doc/todo/Copy-on-Write__47__reflink__47__clonefile_support_on_macOS.mdwn create mode 100644 doc/todo/Copy-on-Write__47__reflink__47__clonefile_support_on_macOS/comment_1_81bf4ac2fe810cc4e7a21c8bb4d0f15a._comment create mode 100644 doc/todo/Copy-on-Write__47__reflink_support_for_unlocked_files.mdwn create mode 100644 doc/todo/Copy-on-Write__47__reflink_support_for_unlocked_files/comment_1_52db92711e28abb0eb7a346646b91573._comment create mode 100644 doc/todo/Describe_a_file_in_function_of_another_file.mdwn create mode 100644 doc/todo/Describe_a_file_in_function_of_another_file/comment_1_b0132288c67054485e9681f3f5138768._comment create mode 100644 doc/todo/Describe_a_file_in_function_of_another_file/comment_2_4efe2044282c8ccd6d570e84bb2ab68a._comment create mode 100644 doc/todo/Describe_a_file_in_function_of_another_file/comment_3_a9e02d7a27fd4448c1afd19e3f171a5c._comment create mode 100644 doc/todo/Display_fingerprint_to_WebApps_GPG___34__create_encrypted_new_repo__34__.mdwn create mode 100644 doc/todo/Don__39__t_re-encrypt_when_key_is_already_in_.git__47__annex__47__tmp.mdwn create mode 100644 doc/todo/Don__39__t_re-encrypt_when_key_is_already_in_.git__47__annex__47__tmp/comment_1_0650918c86fca0554755aede19a12fd3._comment create mode 100644 doc/todo/Don__39__t_re-encrypt_when_key_is_already_in_.git__47__annex__47__tmp/comment_2_aa6bf987de3dfc9f78eba30b4b2c8c16._comment create mode 100644 doc/todo/Don__39__t_re-encrypt_when_key_is_already_in_.git__47__annex__47__tmp/comment_3_3419d2603af199fd311f6898adef5ed3._comment create mode 100644 doc/todo/Extend_merge_conflict_resolution_to_git_conflicts.mdwn create mode 100644 doc/todo/Extend_merge_conflict_resolution_to_git_conflicts/comment_1_c08e7f51503f103c447064a01b085783._comment create mode 100644 doc/todo/Faster___171__git_annex_status__187___when___171__git_annex_watch__187___is_running.mdwn create mode 100644 doc/todo/Faster___171__git_annex_status__187___when___171__git_annex_watch__187___is_running/comment_1_e5f2630591ffa7758ca4250a061a8589._comment create mode 100644 doc/todo/Faster___171__git_annex_status__187___when___171__git_annex_watch__187___is_running/comment_2_f8a5cc905d5b06bdbb1a778ab866a28c._comment create mode 100644 doc/todo/Faster___171__git_annex_status__187___when___171__git_annex_watch__187___is_running/comment_3_626c629654508d0d948ece849d43ed86._comment create mode 100644 doc/todo/File_deletion_workflow.mdwn create mode 100644 doc/todo/File_deletion_workflow/comment_1_7b80d9a202ede51730cbd443731e1fa7._comment create mode 100644 doc/todo/File_deletion_workflow/comment_2_60b54e6bbb37464697b4f5c4ebe561da._comment create mode 100644 doc/todo/Filter_a_tree_with_pattern.mdwn create mode 100644 doc/todo/Filter_a_tree_with_pattern/comment_1_17dac31227b8f95c5ca50f4a4cf5a425._comment create mode 100644 doc/todo/Filter_a_tree_with_pattern/comment_2_e2b0b3eafdfdab1e315066ac57c8b838._comment create mode 100644 doc/todo/Filter_a_tree_with_pattern/comment_3_ca3058fe82eff771f3664ab2f8aa78ae._comment create mode 100644 doc/todo/Fsck_remote_files_in-flight.mdwn create mode 100644 doc/todo/Fsck_remote_files_in-flight/comment_1_1a70ae7c9821d664ddf72fd4c431be29._comment create mode 100644 doc/todo/Fsck_remote_files_in-flight/comment_2_3baff888fbc3068571cdc9fee73fbe36._comment create mode 100644 doc/todo/Hardlink_keys_with_same_hash_but_differrent_ext.mdwn create mode 100644 doc/todo/Hardlink_keys_with_same_hash_but_differrent_ext/comment_1_5af33851bdac4f34d83e8ef2e1d45355._comment create mode 100644 doc/todo/Hardlink_keys_with_same_hash_but_differrent_ext/comment_2_ad76bcde941d6f1719260179a7bd27ba._comment create mode 100644 doc/todo/Hardlink_keys_with_same_hash_but_differrent_ext/comment_3_51945c553d70ae76297ed4aaf3c8b624._comment create mode 100644 doc/todo/Hardlink_keys_with_same_hash_but_differrent_ext/comment_4_2f496cb303c90eaefef955082e2bfb00._comment create mode 100644 doc/todo/Hardlink_keys_with_same_hash_but_differrent_ext/comment_5_272be474bd9ee8d087821bd8a6e88175._comment create mode 100644 doc/todo/Hardlink_keys_with_same_hash_but_differrent_ext/comment_6_be9a58f2028fb3c155ff2020dee2b46b._comment create mode 100644 doc/todo/Hardlink_keys_with_same_hash_but_differrent_ext/comment_7_fed82ecac17e6ed86eb18232d4b5ae6a._comment create mode 100644 doc/todo/Hardlink_keys_with_same_hash_but_differrent_ext/comment_8_82c04709fe3b69d6a75e44d71b500681._comment create mode 100644 doc/todo/Having___39__git_annex_sync__39___optionally_add.mdwn create mode 100644 doc/todo/Having___39__git_annex_sync__39___optionally_add/comment_10_6d9ef10f9534c7b95ca58913cfe3b5fd._comment create mode 100644 doc/todo/Having___39__git_annex_sync__39___optionally_add/comment_11_25be855ca688e37644fa86357b96b3d2._comment create mode 100644 doc/todo/Having___39__git_annex_sync__39___optionally_add/comment_12_8327e0a3f3d4bf35c52b1f2f4089dcbc._comment create mode 100644 doc/todo/Having___39__git_annex_sync__39___optionally_add/comment_13_8b150a2a4b9b0de8039ee8995c01bf8c._comment create mode 100644 doc/todo/Having___39__git_annex_sync__39___optionally_add/comment_14_0156a70246f19beeee6ce5cfb510de86._comment create mode 100644 doc/todo/Having___39__git_annex_sync__39___optionally_add/comment_15_b0f6d52ef7a94badd572c6cfa759efb3._comment create mode 100644 doc/todo/Having___39__git_annex_sync__39___optionally_add/comment_16_6c4c1541a146c66c11ebe6abaf7f1810._comment create mode 100644 doc/todo/Having___39__git_annex_sync__39___optionally_add/comment_1_2160800299fff5dc920847bec1ab0220._comment create mode 100644 doc/todo/Having___39__git_annex_sync__39___optionally_add/comment_2_eeb1bb0b1a02a74291daa41e9a8eb725._comment create mode 100644 doc/todo/Having___39__git_annex_sync__39___optionally_add/comment_3_a49dcb3963a986c530571f69fa9326b4._comment create mode 100644 doc/todo/Having___39__git_annex_sync__39___optionally_add/comment_4_cf4ed68e05fd7d553a314746b444b7c0._comment create mode 100644 doc/todo/Having___39__git_annex_sync__39___optionally_add/comment_5_3a2fe8d0c0dd6f5066370086c0f03300._comment create mode 100644 doc/todo/Having___39__git_annex_sync__39___optionally_add/comment_6_2e0ad0cdb9d813d0fbc514c1642669ca._comment create mode 100644 doc/todo/Having___39__git_annex_sync__39___optionally_add/comment_7_bb6b5503ec5f699749fa8e3ffce59aab._comment create mode 100644 doc/todo/Having___39__git_annex_sync__39___optionally_add/comment_7_e6e6b344d533de57ce7661b5f1ada027._comment create mode 100644 doc/todo/Having___39__git_annex_sync__39___optionally_add/comment_9_e128886c09b9ca2127ff540c2af0beda._comment create mode 100644 doc/todo/INFO_message_for_custom_special_remotes.mdwn create mode 100644 doc/todo/INFO_message_for_custom_special_remotes/comment_1_ea99a5099f78767859c05aeb5217a12d._comment create mode 100644 doc/todo/INFO_message_for_custom_special_remotes/comment_2_69535d7d9b7266eaac6f9bb70d2660dc._comment create mode 100644 doc/todo/Idea_for_emulating_a_versioned_tree_export.mdwn create mode 100644 doc/todo/Idea_for_emulating_a_versioned_tree_export/comment_1_d944fd707130be6ebe35302794a0b73f._comment create mode 100644 doc/todo/Idea_for_emulating_a_versioned_tree_export/comment_2_e0f6d78620a89f60010607b37328f754._comment create mode 100644 doc/todo/Idea_for_emulating_a_versioned_tree_export/comment_3_19e77a51911d3c2d39a558162223e78e._comment create mode 100644 doc/todo/Improving_diffdriver_--text.mdwn create mode 100644 doc/todo/Improving_diffdriver_--text/comment_1_a38b0f30f9b4011d703e70c093f139ab._comment create mode 100644 doc/todo/Improving_diffdriver_--text/comment_2_2a59862281c1be5ee92912912c2045e9._comment create mode 100644 doc/todo/Incremental_git_annex_sync_--content_--all.mdwn create mode 100644 doc/todo/Incremental_git_annex_sync_--content_--all/comment_1_9d812c6dd2fd7b4c255ea88580da4396._comment create mode 100644 doc/todo/Incremental_git_annex_sync_--content_--all/comment_2_9fff9eb8a7a897c5aabe9878f4d0b23b._comment create mode 100644 doc/todo/Incremental_git_annex_sync_--content_--all/comment_3_638f40462d4bb2a447350ce0a5dc7a92._comment create mode 100644 doc/todo/Incremental_git_annex_sync_--content_--all/comment_4_c232e1e1cfcc47f70079f2d32c2b4633._comment create mode 100644 doc/todo/Incremental_git_annex_sync_--content_--all/comment_5_e81719f23565579674249db5d0a883da._comment create mode 100644 doc/todo/Invert_remote_selection.mdwn create mode 100644 doc/todo/Invert_remote_selection/comment_1_5aa12a96f54a40adbfe18267a6bde87b._comment create mode 100644 doc/todo/Invert_remote_selection/comment_2_9ad4c9b2217f739e67198d16d14d32e7._comment create mode 100644 doc/todo/Invert_remote_selection/comment_3_2aec5f535c84c37d59802e4759a1c242._comment create mode 100644 doc/todo/Invert_remote_selection/comment_4_f5ab9eec7ed0f080c57dbb594deafd13._comment create mode 100644 doc/todo/Keeping_a_repo__39__s_description_up_to_date.mdwn create mode 100644 doc/todo/Keeping_a_repo__39__s_description_up_to_date/comment_1_2fcce6a8fcfec28a6edeab40291deaba._comment create mode 100644 doc/todo/Keeping_a_repo__39__s_description_up_to_date/comment_2_1c73d94cc84bbfdeb65a71995265491f._comment create mode 100644 doc/todo/Keeping_a_repo__39__s_description_up_to_date/comment_3_394c87782dd3318a6fa3705322fea4fb._comment create mode 100644 doc/todo/LIst_of_Available_Remotes_in_Webapp.mdwn create mode 100644 doc/todo/LIst_of_Available_Remotes_in_Webapp/comment_1_23fe2f3cd44c4357a385452dcd5eedef._comment create mode 100644 doc/todo/Long_Running_Filter_Process.mdwn create mode 100644 doc/todo/Long_Running_Filter_Process/comment_1_f155ffc7dbd074964dd53165274ec8a0._comment create mode 100644 doc/todo/Long_Running_Filter_Process/comment_3_24d89d0e8eb2da6e43d107caa71e042b._comment create mode 100644 doc/todo/Long_Running_Filter_Process/comment_4_96c20518a6bd2806fed3646331b3ca1c._comment create mode 100644 doc/todo/Lower-case_extension_for_SHA256E_and_similar.mdwn create mode 100644 doc/todo/Lower-case_extension_for_SHA256E_and_similar/comment_1_71a32962c081e42be0bfc468f74230e8._comment create mode 100644 doc/todo/Lower-case_extension_for_SHA256E_and_similar/comment_2_db432973421d3974e027cef13caa3033._comment create mode 100644 doc/todo/Lower-case_extension_for_SHA256E_and_similar/comment_3_15ec3c411b0a92b073eb8c65e192c8b8._comment create mode 100644 doc/todo/Lower-case_extension_for_SHA256E_and_similar/comment_4_2ef3cc0ff00cc735e3400120ae49d14a._comment create mode 100644 doc/todo/Make_addunlocked_configurable_like_largefiles.mdwn create mode 100644 doc/todo/Make_addunlocked_configurable_like_largefiles/comment_1_823bddc3b3824419f1123748f163e0ff._comment create mode 100644 doc/todo/Make_addunlocked_configurable_like_largefiles/comment_2_89ea6c764e18ed4335733f979fb31140._comment create mode 100644 doc/todo/Make_addunlocked_configurable_like_largefiles/comment_3_8f32ef554635d852383eeaf3f0629d45._comment create mode 100644 doc/todo/Make_addunlocked_configurable_like_largefiles/comment_4_17d12c5d9f5aa40aa8c20ae478b324b2._comment create mode 100644 doc/todo/Make_git_annex_sync_--content_trust_location_logs.mdwn create mode 100644 doc/todo/Make_git_annex_sync_--content_trust_location_logs/comment_1_006e3e3ab0c08852239c0f8fec851201._comment create mode 100644 doc/todo/Make_webapp_port_configurable.mdwn create mode 100644 doc/todo/Mbps.mdwn create mode 100644 doc/todo/Metadata_changes_are_not_reflected_in_a_view.mdwn create mode 100644 doc/todo/Metadata_changes_are_not_reflected_in_a_view/comment_1_5c3a0d8ec7b1da69b0d81aa4acc0c75b._comment create mode 100644 doc/todo/Metadata_changes_are_not_reflected_in_a_view/comment_2_74597dc57b426adccfa5aab456e499d2._comment create mode 100644 doc/todo/Metadata_changes_are_not_reflected_in_a_view/comment_3_39d7b5588595067332909c53b232c413._comment create mode 100644 doc/todo/Metadata_changes_are_not_reflected_in_a_view/comment_4_6ab0e38d8be8a70d501108f207d41d82._comment create mode 100644 doc/todo/Metadata_changes_are_not_reflected_in_a_view/comment_5_b1b381c560fd81f372fc393ec5d63d8d._comment create mode 100644 doc/todo/Metadata_changes_are_not_reflected_in_a_view/comment_6_9d3d9877e8581f986257dd3d495a8eab._comment create mode 100644 doc/todo/Metadata_changes_are_not_reflected_in_a_view/comment_7_f97d171fdd715d984e43c1a8139bb8ae._comment create mode 100644 doc/todo/Metadata_changes_are_not_reflected_in_a_view/comment_8_e10e8e6daf155fc493454f1d0d8595a8._comment create mode 100644 doc/todo/Metadata_on_regular_git_objects___40__blob__44___trees__41____63__.mdwn create mode 100644 doc/todo/Metadata_on_regular_git_objects___40__blob__44___trees__41____63__/comment_1_30c513b68101442dbcdec0eb109203fe._comment create mode 100644 doc/todo/More_precise_jobs_count_config.mdwn create mode 100644 doc/todo/More_precise_jobs_count_config/comment_1_8b7dbf6025c99172925f037e9096ead1._comment create mode 100644 doc/todo/More_space_savings_for_annex.thin.mdwn create mode 100644 doc/todo/More_space_savings_for_annex.thin/comment_1_cd571b1b3b6e73041ee629d031481d09._comment create mode 100644 doc/todo/More_space_savings_for_annex.thin/comment_2_95d195f2bad7e6a912e5d201928a94b9._comment create mode 100644 doc/todo/More_space_savings_for_annex.thin/comment_3_15cc8f9e428df04199d139e2677afd8a._comment create mode 100644 doc/todo/More_space_savings_for_annex.thin/comment_4_a87baf5ad6b7688bb40a6c463cb1b8db._comment create mode 100644 doc/todo/Move_ssh_config_to___126____47__ssh__47__git-annex__47__config.mdwn create mode 100644 doc/todo/Move_ssh_config_to___126____47__ssh__47__git-annex__47__config/comment_1_284c806e83a32af81b02aea7c7bc285a._comment create mode 100644 doc/todo/Move_ssh_config_to___126____47__ssh__47__git-annex__47__config/comment_2_1f55ad6b39906458779b2d604b003ffe._comment create mode 100644 doc/todo/Move_ssh_config_to___126____47__ssh__47__git-annex__47__config/comment_3_b00dce2374aac6968317d05d23bcfaf7._comment create mode 100644 doc/todo/Move_ssh_config_to___126____47__ssh__47__git-annex__47__config/comment_4_743d0b077110c5cac1e2f47187b75333._comment create mode 100644 doc/todo/Natively_support_s3__58____47____47___urls___40__for_addurl__44___get__44___etc__41__.mdwn create mode 100644 doc/todo/Natively_support_s3__58____47____47___urls___40__for_addurl__44___get__44___etc__41__/comment_10_ed3a47b10ce2303041d9b9271bb9a2c8._comment create mode 100644 doc/todo/Natively_support_s3__58____47____47___urls___40__for_addurl__44___get__44___etc__41__/comment_11_2afa6133bfa8932ea1fb02b2052e2939._comment create mode 100644 doc/todo/Natively_support_s3__58____47____47___urls___40__for_addurl__44___get__44___etc__41__/comment_12_6c9336be070b04d5736b943889370c13._comment create mode 100644 doc/todo/Natively_support_s3__58____47____47___urls___40__for_addurl__44___get__44___etc__41__/comment_13_20184de38c2adeed7e20fa323d9a3ba4._comment create mode 100644 doc/todo/Natively_support_s3__58____47____47___urls___40__for_addurl__44___get__44___etc__41__/comment_14_58965ac55e2e9aebdd0e38f8eef097a3._comment create mode 100644 doc/todo/Natively_support_s3__58____47____47___urls___40__for_addurl__44___get__44___etc__41__/comment_1_312f32bd35f06837463e541773986b4f._comment create mode 100644 doc/todo/Natively_support_s3__58____47____47___urls___40__for_addurl__44___get__44___etc__41__/comment_2_7ea1c35ce23a57fea52a593c41a8fb69._comment create mode 100644 doc/todo/Natively_support_s3__58____47____47___urls___40__for_addurl__44___get__44___etc__41__/comment_3_337217fc0ae8cfd432c7df45942b86ef._comment create mode 100644 doc/todo/Natively_support_s3__58____47____47___urls___40__for_addurl__44___get__44___etc__41__/comment_4_8778b93dbc123c484727bb55e39608c9._comment create mode 100644 doc/todo/Natively_support_s3__58____47____47___urls___40__for_addurl__44___get__44___etc__41__/comment_5_9c7bdcb483b371f421bcdca3d8c2073c._comment create mode 100644 doc/todo/Natively_support_s3__58____47____47___urls___40__for_addurl__44___get__44___etc__41__/comment_6_c94fdab4db1d5f94929ae068c546b533._comment create mode 100644 doc/todo/Natively_support_s3__58____47____47___urls___40__for_addurl__44___get__44___etc__41__/comment_7_e3c50b7ab1c5cd49a3e5376e20b7d4c0._comment create mode 100644 doc/todo/Natively_support_s3__58____47____47___urls___40__for_addurl__44___get__44___etc__41__/comment_8_72eb9bc8d12bc8719f49f6528a086234._comment create mode 100644 doc/todo/Natively_support_s3__58____47____47___urls___40__for_addurl__44___get__44___etc__41__/comment_9_6d1a630fbf036144c9559c9c01fca845._comment create mode 100644 doc/todo/OPT__58_____34__bundle__34___get_+_check___40__of_checksum__41___in_a_single_operation.mdwn create mode 100644 doc/todo/OPT__58_____34__bundle__34___get_+_check___40__of_checksum__41___in_a_single_operation/comment_10_695d1269ab20c66630ddfa2d8cbabbef._comment create mode 100644 doc/todo/OPT__58_____34__bundle__34___get_+_check___40__of_checksum__41___in_a_single_operation/comment_12_f85f81450c5d59e6722b46299f2ae29c._comment create mode 100644 doc/todo/OPT__58_____34__bundle__34___get_+_check___40__of_checksum__41___in_a_single_operation/comment_13_a19823409648828b8b9f7a0f2fa7d935._comment create mode 100644 doc/todo/OPT__58_____34__bundle__34___get_+_check___40__of_checksum__41___in_a_single_operation/comment_14_14f46277adb38d5cb802cd23eb2cde04._comment create mode 100644 doc/todo/OPT__58_____34__bundle__34___get_+_check___40__of_checksum__41___in_a_single_operation/comment_15_85e2368381e15cd86b5340fcec1a083b._comment create mode 100644 doc/todo/OPT__58_____34__bundle__34___get_+_check___40__of_checksum__41___in_a_single_operation/comment_16_fbbcf1d8b35078274cfe322cea6de21c._comment create mode 100644 doc/todo/OPT__58_____34__bundle__34___get_+_check___40__of_checksum__41___in_a_single_operation/comment_17_39db598e93d0d858984052e3894cd96e._comment create mode 100644 doc/todo/OPT__58_____34__bundle__34___get_+_check___40__of_checksum__41___in_a_single_operation/comment_1_29e601ea3ea4f22301c6cf6eed403ba4._comment create mode 100644 doc/todo/OPT__58_____34__bundle__34___get_+_check___40__of_checksum__41___in_a_single_operation/comment_2_fa9e2c0a83bad2e0c2da3016b9bf2100._comment create mode 100644 doc/todo/OPT__58_____34__bundle__34___get_+_check___40__of_checksum__41___in_a_single_operation/comment_3_529c38fc63540b32c51ae75529e9005e._comment create mode 100644 doc/todo/OPT__58_____34__bundle__34___get_+_check___40__of_checksum__41___in_a_single_operation/comment_4_82707d36ed580d62c73e441f959ccd9e._comment create mode 100644 doc/todo/OPT__58_____34__bundle__34___get_+_check___40__of_checksum__41___in_a_single_operation/comment_5_aad1896b58e58cbc870c4526ebb824ec._comment create mode 100644 doc/todo/OPT__58_____34__bundle__34___get_+_check___40__of_checksum__41___in_a_single_operation/comment_6_3d2f62f0946528c9986135f8db86a237._comment create mode 100644 doc/todo/OPT__58_____34__bundle__34___get_+_check___40__of_checksum__41___in_a_single_operation/comment_7_48842fb1e006a05573ab34048db45c8b._comment create mode 100644 doc/todo/OPT__58_____34__bundle__34___get_+_check___40__of_checksum__41___in_a_single_operation/comment_8_593b8710c25bec1182409b36d6c44b4a._comment create mode 100644 doc/todo/OPT__58_____34__bundle__34___get_+_check___40__of_checksum__41___in_a_single_operation/comment_9_4f4f4a42adafe52207ed32a5d20e94be._comment create mode 100644 doc/todo/OPT__58_____34__bundle__34___get_+_check___40__of_checksum__41___in_a_single_operation/comment_9_b92774b0feec3049bf6aef89614543df._comment create mode 100644 doc/todo/PATCH__58___drop_url_parameters_from_extension.hs create mode 100644 doc/todo/Package_for_Lacie_NasOS__63__.mdwn create mode 100644 doc/todo/Package_for_Lacie_NasOS__63__/comment_1_1b1b23b95b1fa29a8d71848a5cec9008._comment create mode 100644 doc/todo/Package_for_Lacie_NasOS__63__/comment_2_81b181781da615c56aa30eab131cec53._comment create mode 100644 doc/todo/Package_for_Lacie_NasOS__63__/comment_3_fd7eeee6a86101867f0ab17f883f0c6a._comment create mode 100644 doc/todo/Pause_all_transfers_in_all_annexes_watched_by_the_assistant.mdwn create mode 100644 doc/todo/Prevent_simultaneous_pushing_to_idential_remotes.mdwn create mode 100644 doc/todo/Provide_a_way_to_white_list_local_networks___40__not_just_specific_IPs__41__.mdwn create mode 100644 doc/todo/Provide_a_way_to_white_list_local_networks___40__not_just_specific_IPs__41__/comment_1_26d81cbc8732b65c2f0a86a33ef0f8fd._comment create mode 100644 doc/todo/Provide_a_way_to_white_list_local_networks___40__not_just_specific_IPs__41__/comment_2_64ffa9a560bf11ba22c715da0b4b1cfe._comment create mode 100644 doc/todo/Provide_a_way_to_white_list_local_networks___40__not_just_specific_IPs__41__/comment_3_da5363a268008a88014972987de10323._comment create mode 100644 doc/todo/Provide_a_way_to_white_list_local_networks___40__not_just_specific_IPs__41__/comment_4_620fd718bd2c97a6fa4ce775e311a2d6._comment create mode 100644 doc/todo/RawFilePath_conversion.mdwn create mode 100644 doc/todo/Request__58___Date_limit_with_importfeed.mdwn create mode 100644 doc/todo/Request__58___Date_limit_with_importfeed/comment_1_5d3d762eaf755410f5ee70a22fc95ab6._comment create mode 100644 doc/todo/S3_export_redirecting_to_key-value_store.mdwn create mode 100644 doc/todo/S3_multipart_interruption_cleanup.mdwn create mode 100644 doc/todo/Set_total_storage_limit_for_special_remotes.mdwn create mode 100644 doc/todo/Set_total_storage_limit_for_special_remotes/comment_1_8945025ad54e28f48474f8931746a775._comment create mode 100644 doc/todo/Set_total_storage_limit_for_special_remotes/comment_2_86aa368db46dfedb065a18edfa7c9ad4._comment create mode 100644 doc/todo/Setting_default_preferred_content_expressions.mdwn create mode 100644 doc/todo/Setting_default_preferred_content_expressions/comment_1_45d57933a45ddc1e31ba46519b944239._comment create mode 100644 doc/todo/Setting_default_preferred_content_expressions/comment_2_575320e07f005d46d26cc6db9ad3ebd3._comment create mode 100644 doc/todo/Setting_default_preferred_content_expressions/comment_3_971b3efe8a6ebdeede0184f13774e86b._comment create mode 100644 doc/todo/Should_git_annex_diffdriver_fetch_non-present_file.mdwn create mode 100644 doc/todo/Show_repo_type_in_repo_list.mdwn create mode 100644 doc/todo/Show_repo_type_in_repo_list/comment_1_ac6eb1072ef902a094b79dd8e0917c4d._comment create mode 100644 doc/todo/Show_repo_type_in_repo_list/comment_2_6979c487f707a724a048d20e2e5744e6._comment create mode 100644 doc/todo/Show_repo_type_in_repo_list/comment_3_529254a6cc20de7259d60a3cbc5ccaf7._comment create mode 100644 doc/todo/Sorting_remotes_by_description_in___96__git_annex_info__96__.mdwn create mode 100644 doc/todo/Special_remotes__58___support_for_MULTIREMOVE.mdwn create mode 100644 doc/todo/Special_remotes__58___support_for_MULTIREMOVE/comment_1_cc95104ae0803db35fee504152db046a._comment create mode 100644 doc/todo/Special_remotes__58___support_for_MULTIREMOVE/comment_2_f58cc7b04948a8c758f97778631b0f02._comment create mode 100644 doc/todo/Special_remotes__58___support_for_MULTIREMOVE/comment_3_4f18712f974f85c3cef810714d304d85._comment create mode 100644 doc/todo/Special_remotes__58___support_for_MULTIREMOVE/comment_4_2dbf3558c7c969281f1cc5e1738d2c0b._comment create mode 100644 doc/todo/Special_remotes__58___support_for_MULTIREMOVE/comment_5_4a9f2e1e3f30b472d4c5aa9c07684cc0._comment create mode 100644 doc/todo/Special_remotes__58___support_for_MULTIREMOVE/comment_6_f756a8ea12af1a01406f1bf05d9dba11._comment create mode 100644 doc/todo/Special_remotes__58___support_for_MULTIREMOVE/comment_7_993ed66935c0d95488751a0e0e2c57b8._comment create mode 100644 doc/todo/Specify_maximum_usable_space_per_remote.mdwn create mode 100644 doc/todo/Specify_maximum_usable_space_per_remote/comment_1_fdc0c518b6cbc5dc7e5b64748c2d7b01._comment create mode 100644 doc/todo/Specify_maximum_usable_space_per_remote/comment_2_b81af6dac4042c0d4dab58c91a46b09d._comment create mode 100644 doc/todo/Specify_maximum_usable_space_per_remote/comment_3_afc7f278c02d7bf9f92a90e51cb5a2a9._comment create mode 100644 doc/todo/Specify_maximum_usable_space_per_remote/comment_4_a760351ed7a6d3d232af7c22b2063871._comment create mode 100644 doc/todo/Specify_maximum_usable_space_per_remote/comment_5_c5069ffed5e8c4e1d001aedb971aca75._comment create mode 100644 doc/todo/Specify_maximum_usable_space_per_remote/comment_6_bef44c8f571f2be177d6ee949c721a6a._comment create mode 100644 doc/todo/Speed_up___39__import_--clean-duplicates__39__.mdwn create mode 100644 doc/todo/Speed_up___39__import_--clean-duplicates__39__/comment_1_9268c639d3d21cce4ca7b60d08e9cb65._comment create mode 100644 doc/todo/Speed_up___39__import_--clean-duplicates__39__/comment_2_9c6688901ef20badd834419202627d5c._comment create mode 100644 doc/todo/Speed_up___39__import_--clean-duplicates__39__/comment_3_b53f2e881af1426adb0f45e2b11e4be6._comment create mode 100644 doc/todo/Split_autocommit_option.mdwn create mode 100644 doc/todo/Split_autocommit_option/comment_1_fc127bc73c650404df4f21c9a04b3dd4._comment create mode 100644 doc/todo/Store_git_pack_files_on_special_remotes.mdwn create mode 100644 doc/todo/Straight-forward_diffing_with___39__git_annex_diff__39__.mdwn create mode 100644 doc/todo/Straight-forward_diffing_with___39__git_annex_diff__39__/comment_1_2f5ea091b7f6defa397d15055d04a67d._comment create mode 100644 doc/todo/Straight-forward_diffing_with___39__git_annex_diff__39__/comment_2_cae9e0be287bd42498caf1f61c518f0e._comment create mode 100644 doc/todo/Usability_improvements_for_new_users.mdwn create mode 100644 doc/todo/Usability_improvements_for_new_users/comment_1_70ecef547308f9b049bd67f3d2f14117._comment create mode 100644 doc/todo/Usability_improvements_for_new_users/comment_2_ea77f0894802a17854aeedeceababf8a._comment create mode 100644 doc/todo/Use_MediaScannerConnection_on_Android.mdwn create mode 100644 doc/todo/Use_a_remote_as_a_sharing_site_for_files_with_obfuscated_URLs.mdwn create mode 100644 doc/todo/Use_a_remote_as_a_sharing_site_for_files_with_obfuscated_URLs/comment_1_1a1f34f4f389267d67e79409c0ca8b1d._comment create mode 100644 doc/todo/Use_a_remote_as_a_sharing_site_for_files_with_obfuscated_URLs/comment_2_735afa6f87a93cdf333c17da32010620._comment create mode 100644 doc/todo/Use_editorconfig_for_formatting_rules.mdwn create mode 100644 doc/todo/Use_editorconfig_for_formatting_rules/comment_1_20e6d6467dcc9e4814c657355a7f2e74._comment create mode 100644 doc/todo/View_for_old_versions_of_a_file.mdwn create mode 100644 doc/todo/View_for_old_versions_of_a_file/comment_1_8e233fd006bd8f16533df63579f02fb1._comment create mode 100644 doc/todo/View_for_old_versions_of_a_file/comment_2_9b1c6f41f77ec6ba9c90a5e9ec088647._comment create mode 100644 doc/todo/When_autostarting_the_assistant_on_boot_delay_the_execution_2min.mdwn create mode 100644 doc/todo/When_autostarting_the_assistant_on_boot_delay_the_execution_2min/comment_1_49990eaf4a3d6ee89f668dfc159f5eae._comment create mode 100644 doc/todo/Wishlist__58___Parity_files_on_all_files.mdwn create mode 100644 doc/todo/Wishlist__58___Parity_files_on_all_files/comment_1_3900fa7c3ed1455fe07d097c3dc0c9f2._comment create mode 100644 doc/todo/Wishlist__58___Parity_files_on_all_files/comment_2_60dc7823a1814af18861b459a9b3cd0e._comment create mode 100644 doc/todo/Wishlist__58___Parity_files_on_all_files/comment_3_d69eba0afc48c49bdcd7f1f6a7716bbb._comment create mode 100644 doc/todo/Wishlist__58___Parity_files_on_all_files/comment_4_01c382342237e4713ab32a3e95497926._comment create mode 100644 doc/todo/Wishlist__58___additional_environment_variables_for_hooks.mdwn create mode 100644 doc/todo/Wishlist__58___additional_environment_variables_for_hooks/comment_1_d82cbbb478a81a651fbe6cb8b71c1192._comment create mode 100644 doc/todo/Wishlist__58___disable_auto-repair_for_the_assistant.mdwn create mode 100644 doc/todo/Wishlist__58___disable_auto-repair_for_the_assistant/comment_1_3274820a0d1f10c505f15cd29a37b95a._comment create mode 100644 doc/todo/Wishlist__58___disable_auto-repair_for_the_assistant/comment_2_2cf5aef3f1d340c4ed6249ef94c1b607._comment create mode 100644 doc/todo/Wishlist__58___disable_auto-repair_for_the_assistant/comment_3_6c53d82e62b2d269a941ba967d05adf5._comment create mode 100644 doc/todo/Wishlist__58___sanitychecker_fix_wrong_UUID__47__duplicate_remote.mdwn create mode 100644 doc/todo/Wishlist__58___sanitychecker_fix_wrong_UUID__47__duplicate_remote/comment_1_a9e54e4bc540cbab7cdbbfdeaa973f4a._comment create mode 100644 doc/todo/Workflow_guide.mdwn create mode 100644 doc/todo/Workflow_guide/comment_1_f4242a3bdeffb90336f562f9ec182e5d._comment create mode 100644 doc/todo/Workflow_guide/comment_2_ee6da4cc639bca0b17156d51ebfc05c2._comment create mode 100644 doc/todo/Workflow_guide/comment_3_8cf0f9913dc307cd18001656ba390159._comment create mode 100644 doc/todo/Workflow_guide/comment_4_b6f5ce361529356a77b0e6141a62c06d._comment create mode 100644 doc/todo/Workflow_guide/comment_5_6ec6fb45021ba82ed6a4bb9a6f3cfceb._comment create mode 100644 doc/todo/Workflow_guide/comment_6_640e5c6cdea8a6fae63c3fab6970f1f2._comment create mode 100644 doc/todo/Workflow_guide/comment_7_805e877b23adcf562feeb7d927fca08d._comment create mode 100644 doc/todo/__39__info_filename__39___to_provide_information_either_content_is_locally_present.mdwn create mode 100644 doc/todo/__91__FR__93___No_consistency_check_while_on_battery-only.mdwn create mode 100644 doc/todo/__91__FR__93___No_consistency_check_while_on_battery-only/comment_1_b557db02c3719152d392fa454c9c5ce5._comment create mode 100644 doc/todo/__91__FR__93___No_consistency_check_while_on_battery-only/comment_2_374567f37635613a5d671c877d601367._comment create mode 100644 doc/todo/__91__PATCH__93___Change_--copies__39___meta_parameter_to_NUMBER.mdwn create mode 100644 doc/todo/__91__PATCH__93___Fix_annex.adviceNoSshCaching_no_effect.mdwn create mode 100644 doc/todo/__91__PATCH__93___Run_freeze__47__thaw_hooks_on_crippled_fs.mdwn create mode 100644 doc/todo/__91__PATCH__93___Run_freeze__47__thaw_hooks_on_crippled_fs/comment_1_b943081483e4f1f9897b214004d48493._comment create mode 100644 doc/todo/a_way_to_figure_out_the_origin_of_largefiles.mdwn create mode 100644 doc/todo/a_way_to_figure_out_the_origin_of_largefiles/comment_1_9b0826c1d5b063a3e63d4d2cc030a55b._comment create mode 100644 doc/todo/a_way_to_figure_out_the_origin_of_largefiles/comment_2_6bfe8e1b6b2c3334803d8a6676862e8a._comment create mode 100644 doc/todo/a_way_to_figure_out_the_origin_of_largefiles/comment_3_def75a3ad8907cb62eb5d96c85aabd5e._comment create mode 100644 doc/todo/absolute_symlinks.mdwn create mode 100644 doc/todo/add_--all___40__or_alike__41___to_find_and_findref.mdwn create mode 100644 doc/todo/add_--all___40__or_alike__41___to_find_and_findref/comment_1_8407146882e97ee8510f28df2ba5129c._comment create mode 100644 doc/todo/add_--dry-run.mdwn create mode 100644 doc/todo/add_--dry-run/comment_1_4daf51eec7db67a89bec8f81b742a094._comment create mode 100644 doc/todo/add_--dry-run/comment_2_312127fc2780fd894332d7d8b7f7a209._comment create mode 100644 doc/todo/add_--jobs_for_dropunused_command.mdwn create mode 100644 doc/todo/add_--jobs_for_dropunused_command/comment_1_bcd06faab6b5f6394333e74a17249d08._comment create mode 100644 doc/todo/add_--json-progress_support_in_push_and_pull.mdwn create mode 100644 doc/todo/add_--json-progress_support_in_push_and_pull/comment_1_403acf073a2a8d53eaa880cc2564347d._comment create mode 100644 doc/todo/add_--json-progress_support_in_push_and_pull/comment_2_ff0b1ca16b03d2e6c8331645adad84a6._comment create mode 100644 doc/todo/add_--json-progress_support_in_push_and_pull/comment_3_a11ee71f4ee907b011aebcfe270b7ee3._comment create mode 100644 doc/todo/add_--json-progress_support_in_push_and_pull/comment_4_0f3c22853b50550237f9659ed2120ab2._comment create mode 100644 doc/todo/add_--json-progress_to___96__git_annex_add__96__.mdwn create mode 100644 doc/todo/add_--json-progress_to___96__git_annex_add__96__/comment_1_9acc343305dd5a2aaf569a6396d09896._comment create mode 100644 doc/todo/add_--json-progress_to_fsck_--json.mdwn create mode 100644 doc/todo/add_--json-progress_to_fsck_--json/comment_1_170acd9fc5b5a40ae22de0bf418b424c._comment create mode 100644 doc/todo/add_--json-progress_to_fsck_--json/comment_2_2ce9c3c35ea5c4033bfa42e2f3365a64._comment create mode 100644 doc/todo/add_--json-progress_to_fsck_--json/comment_3_5c0c3bdf1e5cf68f2dcebdd85a8253ac._comment create mode 100644 doc/todo/add_ancient_armel_build.mdwn create mode 100644 doc/todo/add_ancient_armel_build/comment_1_704f1a854e5ef62edbca60ab209d2123._comment create mode 100644 doc/todo/add_ancient_armel_build/comment_2_0b02f96699e9ec9447e336b74b255801._comment create mode 100644 doc/todo/add_ancient_armel_build/comment_3_eaeb9aec42fde6b8a25199b1e1e6a78c._comment create mode 100644 doc/todo/add_ancient_armel_build/comment_4_da51390e7b67cd1dc075c793e99d4367._comment create mode 100644 doc/todo/add_import_--to_command.mdwn create mode 100644 doc/todo/add_import_--to_command/comment_1_b70d10190722c0d21c2343fe51e38414._comment create mode 100644 doc/todo/add_import_--to_command/comment_2_c7a95793a46ed948301b01a1f29bfac1._comment create mode 100644 doc/todo/add_import_--to_command/comment_3_f393450ae2daa14e1e7008db2b3c7dc8._comment create mode 100644 doc/todo/add_import_--to_command/comment_4_4a30627ac78b32911604c3377b958cd0._comment create mode 100644 doc/todo/add_import_--to_command/comment_5_549edb19b222bf4bd1b87aceba007005._comment create mode 100644 doc/todo/add_import_tree_to_external_special_remote_protocol.mdwn create mode 100644 doc/todo/add_limit_to_matching_options.mdwn create mode 100644 doc/todo/add_limit_to_matching_options/comment_1_2358e0503ca6c65644ca68c0ebd89723._comment create mode 100644 doc/todo/add_limit_to_matching_options/comment_2_187a47171265eeaf2aa144beed53bfc3._comment create mode 100644 doc/todo/add_limit_to_matching_options/comment_3_cfff69317903879bba2a9a9de1e73a8e._comment create mode 100644 doc/todo/add_maxextensionlength_to_git-annex-config.mdwn create mode 100644 doc/todo/add_maxextensionlength_to_git-annex-config/comment_1_df1113eb2b0b9cf6c13b1e8ea0995f1d._comment create mode 100644 doc/todo/add_maxextensionlength_to_git-annex-config/comment_2_580ed143221abbcced40f020b849cc27._comment create mode 100644 doc/todo/add_maxextensionlength_to_git-annex-config/comment_3_6bcf92e8cc78b47ed42f58a610e27d76._comment create mode 100644 doc/todo/add_maxextensionlength_to_git-annex-config/comment_4_f0894e2797e1188bdf4bdc09bd10553e._comment create mode 100644 doc/todo/add_maxextensionlength_to_git-annex-config/comment_5_9499ecd6136102803f1d6691c03e6b20._comment create mode 100644 doc/todo/add_maxextensionlength_to_git-annex-config/comment_6_9ff852c12549985f6e88bd2316a69def._comment create mode 100644 doc/todo/add_maxextensionlength_to_git-annex-config/comment_7_2b02c97fc9cfdb30d89676ec82760538._comment create mode 100644 doc/todo/add_maxextensionlength_to_git-annex-config/comment_8_6302aa8c3ff1f1096bc9978dd6407744._comment create mode 100644 doc/todo/add_maxextensionlength_to_git-annex-config/comment_9_5027255cc1b0dec41e315df8472fe60e._comment create mode 100644 doc/todo/add_option_to_disable_fsck_upgradable_key_warnings.mdwn create mode 100644 doc/todo/add_option_to_disable_fsck_upgradable_key_warnings/comment_1_f91174aef6f7a5a41fb9b9b54249be1c._comment create mode 100644 doc/todo/add_option_to_disable_fsck_upgradable_key_warnings/comment_2_eb2a5ee55df954b243bf0ea87801fbce._comment create mode 100644 doc/todo/add_option_to_disable_fsck_upgradable_key_warnings/comment_3_3b9f1387cc5de5d0bce5fee5fff91002._comment create mode 100644 doc/todo/add_option_to_whereis_to_avoid_network_interactions.mdwn create mode 100644 doc/todo/add_sftp_special_remote.mdwn create mode 100644 doc/todo/add_sftp_special_remote/comment_1_28c98e879c16f56da2a89ed9d50e4398._comment create mode 100644 doc/todo/add_sftp_special_remote/comment_2_1fcefc50041b363a86f596f8d4121611._comment create mode 100644 doc/todo/add_testremote_cleanup.mdwn create mode 100644 doc/todo/add_testremote_cleanup/comment_1_9dc28d46dfcd693def4cbb3837de55e0._comment create mode 100644 doc/todo/add_testremote_cleanup/comment_2_a87de50ab7c39d955d5c1f6a1c51f761._comment create mode 100644 doc/todo/add_testremote_cleanup/comment_3_976fd7b1db867bf5fe785e0d32acddcb._comment create mode 100644 doc/todo/add_testremote_cleanup/comment_4_ef144de6384eb89a2d4caa13e6895872._comment create mode 100644 doc/todo/add_testremote_cleanup/comment_5_0a3c3cc6c9b4efd7a6c4cf7333f2b120._comment create mode 100644 doc/todo/add_tests_under_concurrency.mdwn create mode 100644 doc/todo/add_tests_under_concurrency/comment_1_9879c63f9de342b6831d5794d8f6212e._comment create mode 100644 doc/todo/add_tests_under_concurrency/comment_2_3713c706c8a0689f527c4558176a7b48._comment create mode 100644 doc/todo/add_xxHash_backend.mdwn create mode 100644 doc/todo/add_xxHash_backend/comment_1_8993f493a8b43ffda9f8e0b6d5e186ac._comment create mode 100644 doc/todo/add_xxHash_backend/comment_2_945217badfaeba8672329d4f6ac4b8e2._comment create mode 100644 doc/todo/add_xxHash_backend/comment_3_93892ef71d40f0b10e5fdcb703faf3ad._comment create mode 100644 doc/todo/additional_git-annex-config_settings__63__.mdwn create mode 100644 doc/todo/additional_git-annex-config_settings__63__/comment_1_74d61d6a4412223092f468628d3f2f45._comment create mode 100644 doc/todo/additional_git-annex-config_settings__63__/comment_2_2973d438e8f3fda50cfb151534a8ec73._comment create mode 100644 doc/todo/additional_git-annex-config_settings__63__/comment_3_3abeddccdf5c742962b25b7dbe8fb69e._comment create mode 100644 doc/todo/additional_git-annex-config_settings__63__/comment_4_1d777383fda7c50d630e19ec1d1ade52._comment create mode 100644 doc/todo/additional_git-annex-config_settings__63__/comment_5_ba2cbf8dcf14a1d0b20621b48b8e8600._comment create mode 100644 doc/todo/additional_git-annex-config_settings__63__/comment_6_4ec0261f3b8bc6d2492fa3dabb0121e5._comment create mode 100644 doc/todo/additional_git-annex-config_settings__63__/comment_7_c1768ab8568c8e58525ed40e76cc13f2._comment create mode 100644 doc/todo/additional_git-annex-config_settings__63__/comment_8_845a504ea9f038a19a21d8a985585b2b._comment create mode 100644 doc/todo/addurl_--raw-except_REMOTEs__63__.mdwn create mode 100644 doc/todo/addurl_--raw-except_REMOTEs__63__/comment_1_d9b88a0f157ce8143d52a35256beaaab._comment create mode 100644 doc/todo/addurl_--raw-except_REMOTEs__63__/comment_2_2cd05802f25c9868b1b975dd359b66b4._comment create mode 100644 doc/todo/addurl___8211__force-torrent_option.mdwn create mode 100644 doc/todo/addurl___8211__force-torrent_option/comment_1_15be1914c8d05cd1ad8220bcfea9d0bf._comment create mode 100644 doc/todo/addurl___8211__force-torrent_option/comment_2_52c04c388b807993cecacc7f98b73cd3._comment create mode 100644 doc/todo/adjusted_branch_with_hashdirlower_links.mdwn create mode 100644 doc/todo/aeson_2.0.mdwn create mode 100644 doc/todo/allow_configuring_assistant_to_add_files_locked.mdwn create mode 100644 doc/todo/allow_disk_space_quota_independent_of_free_disk_space.mdwn create mode 100644 doc/todo/allow_for_annonymous_AWS_S3_access.mdwn create mode 100644 doc/todo/allow_for_annonymous_AWS_S3_access/comment_1_0723643146ba36131218be090e6d5c73._comment create mode 100644 doc/todo/allow_for_annonymous_AWS_S3_access/comment_2_2626e1d0b2aa5a2af19d7fef1d13beaa._comment create mode 100644 doc/todo/allow_for_annonymous_AWS_S3_access/comment_3_6f79f3ecab275d594182fff5e2fd81f9._comment create mode 100644 doc/todo/allow_for_annonymous_AWS_S3_access/comment_4_9cf7360f849964689133af60b8e1175b._comment create mode 100644 doc/todo/allow_for_annonymous_AWS_S3_access/comment_5_b680494cd2fb1cf117b110e08e0ff476._comment create mode 100644 doc/todo/allow_for_annonymous_AWS_S3_access/comment_6_b1e14d6baef8d03aaa6ace717aebc0f9._comment create mode 100644 doc/todo/allow_for_annonymous_AWS_S3_access/comment_7_d44dea0d8c0d46dd8c75ae40f66072e1._comment create mode 100644 doc/todo/allow_for_annonymous_AWS_S3_access/comment_8_b0d9dbe81f01e80809381a9e5f6a883d._comment create mode 100644 doc/todo/allow_for_annonymous_AWS_S3_access/comment_9_7fa3b2aafcad92c20f8a3467aa3ae6b9._comment create mode 100644 doc/todo/alternate_keys_for_same_content.mdwn create mode 100644 doc/todo/alternate_keys_for_same_content/comment_10_22ff867952875856b20339a8829c5944._comment create mode 100644 doc/todo/alternate_keys_for_same_content/comment_11_3323eff3d94d366595bf2b7e78c01dce._comment create mode 100644 doc/todo/alternate_keys_for_same_content/comment_1_7a7f287bcde5353072100294dd8edce6._comment create mode 100644 doc/todo/alternate_keys_for_same_content/comment_2_0f464f4970e499371fcb65e0d06202cf._comment create mode 100644 doc/todo/alternate_keys_for_same_content/comment_3_c99b23e878e37e205a3182d3b6d3f2b2._comment create mode 100644 doc/todo/alternate_keys_for_same_content/comment_4_a5fb6045595da0c490098e46f76db9b8._comment create mode 100644 doc/todo/alternate_keys_for_same_content/comment_5_230d35bd623189818002901455964ca4._comment create mode 100644 doc/todo/alternate_keys_for_same_content/comment_6_ae8355ec917e7a7a240cdb88714c55d0._comment create mode 100644 doc/todo/alternate_keys_for_same_content/comment_7_1c0a975893c63c14b3f6e17712b5191c._comment create mode 100644 doc/todo/alternate_keys_for_same_content/comment_8_4b16c48a2d9f4926d63f6ab54fe801d3._comment create mode 100644 doc/todo/alternate_keys_for_same_content/comment_9_42d240bbfc6ab858219ffa0f873c3eb4._comment create mode 100644 doc/todo/annex.addunlocked_in_gitattributes.mdwn create mode 100644 doc/todo/annex.addunlocked_in_gitattributes/comment_1_1d21cde3d21a9b5bb129b17b9e0fc95d._comment create mode 100644 doc/todo/annex.addunlocked_in_gitattributes/comment_2_38f248f7596646dfc11248f0149c0beb._comment create mode 100644 doc/todo/annex.addunlocked_in_gitattributes/comment_3_270c5156c8adce0aff86eda5f2746703._comment create mode 100644 doc/todo/annex.addunlocked_in_gitattributes/comment_4_d87e08ccdec98867dd52b629e6fad330._comment create mode 100644 doc/todo/annex.addunlocked_in_gitattributes/comment_5_be25f3b3c2279eb3fd3ef69c4d1cb52d._comment create mode 100644 doc/todo/annex.addunlocked_in_gitattributes/comment_6_f672dee4c1712e0d20dd820999598d87._comment create mode 100644 doc/todo/annex.addunlocked_in_gitattributes/comment_7_d06e3412f07d98c784b420d82d2d8d49._comment create mode 100644 doc/todo/annex.addunlocked_in_gitattributes/comment_8_73a402df13f30b279dfd2914adec5f35._comment create mode 100644 doc/todo/annex.addunlocked_in_gitattributes/comment_9_02866c504617c2914eff01d3529d5cc7._comment create mode 100644 doc/todo/annex_add___40__-u__124__--update__41___mode.mdwn create mode 100644 doc/todo/annex_add___40__-u__124__--update__41___mode/comment_1_bde2b1e2c45e110d56ce98b43dd77743._comment create mode 100644 doc/todo/annex_merge_--remotes.mdwn create mode 100644 doc/todo/annex_merge_--remotes/comment_1_d4d1c3dae7cff4119b7c111ac6e6f947._comment create mode 100644 doc/todo/annex_merge_--remotes/comment_2_be8596676823e916a56d774e0a161945._comment create mode 100644 doc/todo/annex_merge_--remotes/comment_3_35614da544e315529b236a36e1b28e2d._comment create mode 100644 doc/todo/annex_merge_--remotes/comment_4_8cb7787fbfae63c45a155ee6ef270922._comment create mode 100644 doc/todo/api_for_telling_when_nonexistant_or_non_git_files_passed.mdwn create mode 100644 doc/todo/api_for_telling_when_nonexistant_or_non_git_files_passed/comment_10_32ebb1ea1278b891b58dd3c4a8546453._comment create mode 100644 doc/todo/api_for_telling_when_nonexistant_or_non_git_files_passed/comment_1_672457817d5dca898f5aefbe97da9b23._comment create mode 100644 doc/todo/api_for_telling_when_nonexistant_or_non_git_files_passed/comment_2_b6a76bfc063dcba439b2ead004caabc9._comment create mode 100644 doc/todo/api_for_telling_when_nonexistant_or_non_git_files_passed/comment_3_3f0872f13160a77a82bd5a95fc3f397d._comment create mode 100644 doc/todo/api_for_telling_when_nonexistant_or_non_git_files_passed/comment_4_0217c8acd2a9eb3bba1fc497856cd96a._comment create mode 100644 doc/todo/api_for_telling_when_nonexistant_or_non_git_files_passed/comment_5_7501eed2e6cb732966277ef2f1ff28e9._comment create mode 100644 doc/todo/api_for_telling_when_nonexistant_or_non_git_files_passed/comment_6_7a5b3d2694a48e4e44436f6bf7ed6642._comment create mode 100644 doc/todo/api_for_telling_when_nonexistant_or_non_git_files_passed/comment_8_2550e1760dcfb90c9c2ca1ee145adcf1._comment create mode 100644 doc/todo/api_for_telling_when_nonexistant_or_non_git_files_passed/comment_8_f34293aa30b8b9abc71fac4e713aded3._comment create mode 100644 doc/todo/api_for_telling_when_nonexistant_or_non_git_files_passed/comment_9_d7e879ae1e7ae5e27e15dab9d5b99f16._comment create mode 100644 doc/todo/arm64_autobuild_broken_since_2022.mdwn create mode 100644 doc/todo/arm64_autobuild_broken_since_2022/comment_1_0642002d8ad1eb318de5fdb63956a2fc._comment create mode 100644 doc/todo/arm64_autobuild_broken_since_2022/comment_2_48e40f76e0480adc965505543a4f25e5._comment create mode 100644 doc/todo/assign_costs_per_URL_or_better_repo-wide___40__regexes__41__.mdwn create mode 100644 doc/todo/assign_costs_per_URL_or_better_repo-wide___40__regexes__41__/comment_1_55652562111e83129eb19a61da14ee4a._comment create mode 100644 doc/todo/assign_costs_per_URL_or_better_repo-wide___40__regexes__41__/comment_2_0d1e17e92d6022552406fef144e8c104._comment create mode 100644 doc/todo/assistant_cannot_set_up_remote_repo_via_an_ssh_alias_or_an_ip_address.mdwn create mode 100644 doc/todo/assistant_cannot_set_up_remote_repo_via_an_ssh_alias_or_an_ip_address/comment_1_6b71a390fd16f593216793aec590d9a8._comment create mode 100644 doc/todo/assistant_importtree.mdwn create mode 100644 doc/todo/assistant_parallel_file_transfers.mdwn create mode 100644 doc/todo/assistant_should_detect_added_remotes.mdwn create mode 100644 doc/todo/assistant_should_detect_added_remotes/comment_1_1cadcd0d5c61a04bd1118d94e3fc7f45._comment create mode 100644 doc/todo/assistant_should_detect_added_remotes/comment_2_2a282fcacad94b9590f5bc440ff6ea64._comment create mode 100644 doc/todo/assistant_should_detect_added_remotes/comment_3_35435a0b4d98483fa5c67759ae5baa35._comment create mode 100644 doc/todo/assistant_support_hide-missing.mdwn create mode 100644 doc/todo/assistant_web_switch_repo_Internal_Server_Error.mdwn create mode 100644 doc/todo/assistant_web_switch_repo_Internal_Server_Error/comment_1_b4add1998a9a81fb2c95539408bbeb64._comment create mode 100644 doc/todo/assure_correct_names___40__and_values__41___for_special_remotes_parameters.mdwn create mode 100644 doc/todo/assure_correct_names___40__and_values__41___for_special_remotes_parameters/comment_1_63d48db769863cdfe411404e8c26a399._comment create mode 100644 doc/todo/assure_correct_names___40__and_values__41___for_special_remotes_parameters/comment_2_afa8c10bd3b1df649c1f643430b300e9._comment create mode 100644 doc/todo/assure_correct_names___40__and_values__41___for_special_remotes_parameters/comment_3_f19ff768a3903f80dbaa378b74d2a7e3._comment create mode 100644 doc/todo/assure_correct_names___40__and_values__41___for_special_remotes_parameters/comment_4_b031ee12622b1ed28b6ffc8c037f7d30._comment create mode 100644 doc/todo/auto-lock_files_after_one_edit.mdwn create mode 100644 doc/todo/auto-lock_files_after_one_edit/comment_1_afc78ecd06f0ee9a70ea6c89a8b63e46._comment create mode 100644 doc/todo/auto-lock_files_after_one_edit/comment_2_4a6274dd1da7746a5be673ffb0c5d520._comment create mode 100644 doc/todo/avoid_storing_contentidentifier_log_for_borg.mdwn create mode 100644 doc/todo/batch_async.mdwn create mode 100644 doc/todo/batch_async/comment_1_b68dcc98856f7b757e539c499db7ebd1._comment create mode 100644 doc/todo/batch_operations_for_remotes.mdwn create mode 100644 doc/todo/batch_operations_for_remotes/comment_1_9a2f21febec8f49c782e464973dbc4fc._comment create mode 100644 doc/todo/be_able_to_specify_custom_commit_message_for_git-annex_branch_commit.mdwn create mode 100644 doc/todo/be_able_to_specify_custom_commit_message_for_git-annex_branch_commit/comment_1_c8836a164c8c1efedd5467233237bfd0._comment create mode 100644 doc/todo/be_able_to_specify_custom_commit_message_for_git-annex_branch_commit/comment_2_41a25215d9a1f635573d5e5f5c30fd62._comment create mode 100644 doc/todo/be_able_to_specify_custom_commit_message_for_git-annex_branch_commit/comment_3_5241eace21e873678a0fbb353f4ece69._comment create mode 100644 doc/todo/be_able_to_specify_custom_commit_message_for_git-annex_branch_commit/comment_4_caf913b53a54ac010dba253fca1ef76e._comment create mode 100644 doc/todo/better_error_messages_for_local_remote.mdwn create mode 100644 doc/todo/better_error_messages_for_local_remote/comment_1_094e6a7b62c8b81185cda06a62104f1f._comment create mode 100644 doc/todo/better_error_messages_for_local_remote/comment_2_4c8115fa0a41bd1cbecdcf7a4d9608ed._comment create mode 100644 doc/todo/better_error_messages_for_local_remote/comment_3_2dd5e994a8ce6352eac78cfd69934316._comment create mode 100644 doc/todo/better_mangling_of_filenames_in_views_via_unicode.mdwn create mode 100644 doc/todo/better_mangling_of_filenames_in_views_via_unicode/comment_1_85eb622f3e651ad3cd42def62e2a83fd._comment create mode 100644 doc/todo/better_mangling_of_filenames_in_views_via_unicode/comment_2_b6d583625aa8821bde31464e8f19a34f._comment create mode 100644 doc/todo/better_message_for_external_special_remote_protocol_mismatch.mdwn create mode 100644 doc/todo/better_way_to_get_missing_files.mdwn create mode 100644 doc/todo/bittorrent__58___support_offline_operation_and_verification.mdwn create mode 100644 doc/todo/bittorrent__58___support_offline_operation_and_verification/comment_1_ab16dfb6c3fe2a70ddfb0cee287c6127._comment create mode 100644 doc/todo/bittorrent__58___support_offline_operation_and_verification/comment_2_262f9d68a865300d894c4077e0e8a70c._comment create mode 100644 doc/todo/build_a_user_guide.mdwn create mode 100644 doc/todo/cache_key_info.mdwn create mode 100644 doc/todo/cache_key_info/comment_1_578df1b3b2cbfdc4aa1805378f35dc48._comment create mode 100644 doc/todo/calckey___91__--path__93___given_a_checksum_and_filename__63__.mdwn create mode 100644 doc/todo/calckey___91__--path__93___given_a_checksum_and_filename__63__/comment_1_c81e5d438b06e28392e4ae789a84a2e8._comment create mode 100644 doc/todo/calckey___91__--path__93___given_a_checksum_and_filename__63__/comment_2_2cdaffbc72d5ef197a3ef7ffb306312e._comment create mode 100644 doc/todo/calckey___91__--path__93___given_a_checksum_and_filename__63__/comment_3_4520660c0f66bd73158887f22586886e._comment create mode 100644 doc/todo/calckey___91__--path__93___given_a_checksum_and_filename__63__/comment_4_ee750e205acefe400d13c3a5e967ca3b._comment create mode 100644 doc/todo/calckey___91__--path__93___given_a_checksum_and_filename__63__/comment_5_ec644589ec44a442dc2f3bd2244c9800._comment create mode 100644 doc/todo/calckey___91__--path__93___given_a_checksum_and_filename__63__/comment_6_aa8c191593789900e966a37f9117dd97._comment create mode 100644 doc/todo/calckey_cannot_be_used_outside_of_git_repo.mdwn create mode 100644 doc/todo/calckey_cannot_be_used_outside_of_git_repo/comment_1_c54b53c5f81132bedf75eb6b439a202d._comment create mode 100644 doc/todo/change_git-annex-import_not_to_delete_original_files_by_default.mdwn create mode 100644 doc/todo/change_git-annex-import_not_to_delete_original_files_by_default/comment_1_4eb794daaeef843b104bd480e11f7b42._comment create mode 100644 doc/todo/change_git-annex-import_not_to_delete_original_files_by_default/comment_2_f2d436822490e74544bf58a4f1c9ee79._comment create mode 100644 doc/todo/change_git-annex-import_not_to_delete_original_files_by_default/comment_3_6a7c2cbd85b5ac8e90933aaa9147e004._comment create mode 100644 doc/todo/checkpresentkey_without_explicit_remote.mdwn create mode 100644 doc/todo/cleaner_hack_for_man_pages.mdwn create mode 100644 doc/todo/cleaner_hack_for_man_pages/comment_1_d51be0df42cba6f3eba2b5157dc9d427._comment create mode 100644 doc/todo/cleaner_hack_for_man_pages/comment_2_3dd91f4c788c81a4f7368f673778c106._comment create mode 100644 doc/todo/command_to___34__migrate__34___from_adjusted_mode.mdwn create mode 100644 doc/todo/command_to___34__migrate__34___from_adjusted_mode/comment_10_551012fe6261269363719d83113d4e3c._comment create mode 100644 doc/todo/command_to___34__migrate__34___from_adjusted_mode/comment_1_8e9ecd2a3f9fc5cb80785b100aeb6e36._comment create mode 100644 doc/todo/command_to___34__migrate__34___from_adjusted_mode/comment_2_845206fa688ed4786262fe6d82464d97._comment create mode 100644 doc/todo/command_to___34__migrate__34___from_adjusted_mode/comment_3_4375a63a864306c39323fa4b159425d6._comment create mode 100644 doc/todo/command_to___34__migrate__34___from_adjusted_mode/comment_4_a0d4ffdf3edadb5381f242f65fa38932._comment create mode 100644 doc/todo/command_to___34__migrate__34___from_adjusted_mode/comment_5_55b5beaeba0de7bb1efcc2626570d3b5._comment create mode 100644 doc/todo/command_to___34__migrate__34___from_adjusted_mode/comment_6_a383c7303f1e942a830d9f730f1c0f00._comment create mode 100644 doc/todo/command_to___34__migrate__34___from_adjusted_mode/comment_6_e8ab74bb4951fe7f0c71630bb278ad6f._comment create mode 100644 doc/todo/command_to___34__migrate__34___from_adjusted_mode/comment_7_0ccaf798086a8c9511d3733b12b24c8b._comment create mode 100644 doc/todo/command_to___34__migrate__34___from_adjusted_mode/comment_7_e2d45ac485456ed9cb86f8e6bd23617c._comment create mode 100644 doc/todo/command_to_list_keys_for_old_versions_of_files.mdwn create mode 100644 doc/todo/command_to_list_keys_for_old_versions_of_files/comment_1_43c11d9467b4d4460aa97bfb88b4896f._comment create mode 100644 doc/todo/command_to_list_keys_for_old_versions_of_files/comment_2_5062a0f8b57fdebf74fef8a65ac0a0b2._comment create mode 100644 doc/todo/command_to_list_keys_for_old_versions_of_files/comment_3_3c605fbd4c20522e265ef080675c3669._comment create mode 100644 doc/todo/comment_1_98d09316dc39619203e507f862716bab._comment create mode 100644 doc/todo/complete_annex.skipunknown_transition_in_2022.mdwn create mode 100644 doc/todo/compute_special_remote.mdwn create mode 100644 doc/todo/compute_special_remote/comment_1_9f4835cd08d9d02009b685f4a366a245._comment create mode 100644 doc/todo/compute_special_remote/comment_2_bdb9c77b3ac97cef8d1b8eeaaf300d8b._comment create mode 100644 doc/todo/config_setting_to_force_--progress_reporting_for_some_git_calls.mdwn create mode 100644 doc/todo/config_setting_to_force_--progress_reporting_for_some_git_calls/comment_1_06d6dd17b7bd45b96276770b09bedca9._comment create mode 100644 doc/todo/config_setting_to_force_--progress_reporting_for_some_git_calls/comment_2_d9135802f29b78749833b7fd9967cc0b._comment create mode 100644 doc/todo/config_setting_to_force_--progress_reporting_for_some_git_calls/comment_3_8a6027fb58c4b7aaa3f82b5fd1c2812a._comment create mode 100644 doc/todo/config_setting_to_force_--progress_reporting_for_some_git_calls/comment_4_ceb543ebac42bf7a5f1571ff3f4ef977._comment create mode 100644 doc/todo/config_setting_to_force_--progress_reporting_for_some_git_calls/comment_5_ec99ba117fac299fc361a32de4ff29a5._comment create mode 100644 doc/todo/configuration_option_for_default___34__mode__34___on_crippled_file_systems.mdwn create mode 100644 doc/todo/configuration_option_for_default___34__mode__34___on_crippled_file_systems/comment_1_e3cd8d86869d8a63337f7eff0b91ddbc._comment create mode 100644 doc/todo/configuration_option_for_default___34__mode__34___on_crippled_file_systems/comment_2_3580025d828b27072530eb8ccda9bdf4._comment create mode 100644 doc/todo/configuration_option_for_default___34__mode__34___on_crippled_file_systems/comment_3_d300407d70f799958734df1722fe923b._comment create mode 100644 doc/todo/configuration_option_for_default___34__mode__34___on_crippled_file_systems/comment_4_9367cfc5e12e43db6b53f43dc468757f._comment create mode 100644 doc/todo/confirmed.mdwn create mode 100644 doc/todo/copy-key___40__--batch__41___to_copy__47__merge_availability_info.mdwn create mode 100644 doc/todo/copy-key___40__--batch__41___to_copy__47__merge_availability_info/comment_1_68c86b06b3b0c8cc9c3faac97e3f6c3f._comment create mode 100644 doc/todo/copy-key___40__--batch__41___to_copy__47__merge_availability_info/comment_2_8993cf9badc8348604c662e35ba6f199._comment create mode 100644 doc/todo/copy-key___40__--batch__41___to_copy__47__merge_availability_info/comment_3_53a7a0d5ba6be411bdae10a6f8ba16fc._comment create mode 100644 doc/todo/copy-key___40__--batch__41___to_copy__47__merge_availability_info/comment_4_d82ee205451cf55eb283952c4774d32a._comment create mode 100644 doc/todo/copy-key___40__--batch__41___to_copy__47__merge_availability_info/comment_5_3565680846a8d547d0912d1ef31430b2._comment create mode 100644 doc/todo/copy-key___40__--batch__41___to_copy__47__merge_availability_info/comment_6_e479e9b65a512727f2816d4abd72b900._comment create mode 100644 doc/todo/copy-key___40__--batch__41___to_copy__47__merge_availability_info/comment_7_d64e8d82f139146338ce2fd4af1b7ad7._comment create mode 100644 doc/todo/copy__47__move_support_for_pushinsteadOf_.mdwn create mode 100644 doc/todo/copy__47__move_support_for_pushinsteadOf_/comment_1_c5eec865ac5493f8bedf4fcba6759d6e._comment create mode 100644 doc/todo/copy__47__move_support_for_pushinsteadOf_/comment_2_b6d694d34e6d5a684249b11f53a8532f._comment create mode 100644 doc/todo/copy__47__move_support_for_pushinsteadOf_/comment_3_e53e69ae3adc42bb2bf36af1f07a4c83._comment create mode 100644 doc/todo/copy_instead_of_rename_on_reinject.mdwn create mode 100644 doc/todo/copy_instead_of_rename_on_reinject/comment_1_8e1fefa8231cc93f0f1958e44d869c47._comment create mode 100644 doc/todo/copy_with_both_--to_and_--from_.mdwn create mode 100644 doc/todo/copy_with_both_--to_and_--from_/comment_10_81fb304a2cdd50aa58f839a89d25f2ae._comment create mode 100644 doc/todo/copy_with_both_--to_and_--from_/comment_1_0c42c2269e2fe2888254cc14a4967535._comment create mode 100644 doc/todo/copy_with_both_--to_and_--from_/comment_2_7db9f62f5aa3640d1f4aeeb599e02e7c._comment create mode 100644 doc/todo/copy_with_both_--to_and_--from_/comment_3_05a8fbcf2b069c561b6e24286565af5f._comment create mode 100644 doc/todo/copy_with_both_--to_and_--from_/comment_4_b4d6b876c8f36a61268e2144d3bcf082._comment create mode 100644 doc/todo/copy_with_both_--to_and_--from_/comment_5_8fbf7e5ef86892f05b63e73373a97f0f._comment create mode 100644 doc/todo/copy_with_both_--to_and_--from_/comment_6_4397649b4a2115891cb0f597999cca66._comment create mode 100644 doc/todo/copy_with_both_--to_and_--from_/comment_6_959f6081cb3cb777ea4fad70bad07da3._comment create mode 100644 doc/todo/copy_with_both_--to_and_--from_/comment_8_a230b52cd5985437827bb432a85349ce._comment create mode 100644 doc/todo/copy_with_both_--to_and_--from_/comment_9_3152d196f56561d31a00514c343669ad._comment create mode 100644 doc/todo/could_standalone___39__fixed__39___git-annex_binaries_be_prelinked__63__.mdwn create mode 100644 doc/todo/create_debug_logs_but_erase_them_on_success.mdwn create mode 100644 doc/todo/create_debug_logs_but_erase_them_on_success/comment_1_72b1e3b25a221f42ea7919aaecd6012d._comment create mode 100644 doc/todo/create_debug_logs_but_erase_them_on_success/comment_2_8809f216aac308962917053ea24b9022._comment create mode 100644 doc/todo/debug_for___34__content_changed_while_it_was_being_sent.mdwn create mode 100644 doc/todo/debug_for___34__content_changed_while_it_was_being_sent/comment_1_bce631c26907d03314cfc2e94933cce9._comment create mode 100644 doc/todo/debug_for___34__content_changed_while_it_was_being_sent/comment_2_8093d410c2b359967ee7ee8886d7e4c4._comment create mode 100644 doc/todo/debug_for___34__content_changed_while_it_was_being_sent/comment_3_78551b601b04b8336a858adfcff29507._comment create mode 100644 doc/todo/debug_for___34__content_changed_while_it_was_being_sent/comment_4_d9faaaf2dd44e609fcf361189b247bed._comment create mode 100644 doc/todo/deferred_update_mode.mdwn create mode 100644 doc/todo/deleting_a_repository_from_history.mdwn create mode 100644 doc/todo/deleting_a_repository_from_history/comment_1_bcaa591f37f3496c2f7a2e1f06450002._comment create mode 100644 doc/todo/deleting_a_repository_from_history/comment_2_69de586c7c030f75fd540d05a6ca4ddb._comment create mode 100644 doc/todo/detect_and_handle_submodules_after_path_changed_by_mv.mdwn create mode 100644 doc/todo/detect_and_handle_submodules_after_path_changed_by_mv/comment_1_9f9da126a031d2a4c98555b381dbcbdc._comment create mode 100644 doc/todo/distributed_migration.mdwn create mode 100644 doc/todo/distributed_migration/comment_1_8734d30aa0c1cb27dce81a0277d24948._comment create mode 100644 doc/todo/distributed_migration/comment_2_fdaef5d870221d44c57fc3bd1501e7ee._comment create mode 100644 doc/todo/distributed_migration_for_special_remotes.mdwn create mode 100644 doc/todo/ditch_yesod.mdwn create mode 100644 doc/todo/ditch_yesod/comment_1_976dcb99ebe30c02c9b223f19a67c875._comment create mode 100644 doc/todo/do_not_bug_me_about_intermediate_files.mdwn create mode 100644 doc/todo/do_not_count_trusted_repos_toward_mincopies.mdwn create mode 100644 doc/todo/do_not_count_trusted_repos_toward_mincopies/comment_1_66a71fdd9bdc2387870f4216841b9900._comment create mode 100644 doc/todo/do_not_count_trusted_repos_toward_mincopies/comment_2_058f521451ff38d2072af6c944143ab1._comment create mode 100644 doc/todo/dockerized_external_special_remotes.mdwn create mode 100644 doc/todo/dockerized_external_special_remotes/comment_10_82d0eba3b5658990aa1e909758d75291._comment create mode 100644 doc/todo/dockerized_external_special_remotes/comment_1_d1a0106951c070b56bc30a67c8804374._comment create mode 100644 doc/todo/dockerized_external_special_remotes/comment_2_61a23adb5b871b178d3fb5a51602cf46._comment create mode 100644 doc/todo/dockerized_external_special_remotes/comment_3_a044848ea54aebc2196376f9a59ccc70._comment create mode 100644 doc/todo/dockerized_external_special_remotes/comment_4_3ace886382ff165db6f36df8743ca7c1._comment create mode 100644 doc/todo/dockerized_external_special_remotes/comment_5_4e09e2a08f07924ef791d63da56df066._comment create mode 100644 doc/todo/dockerized_external_special_remotes/comment_6_c43d5137b595edc3db130158293431ff._comment create mode 100644 doc/todo/dockerized_external_special_remotes/comment_7_dc3e46508758b1df241ba0af78fbc692._comment create mode 100644 doc/todo/dockerized_external_special_remotes/comment_8_a32b4ec09da1bee3c960fa8fcfa0d797._comment create mode 100644 doc/todo/dockerized_external_special_remotes/comment_9_f5c0b77e06b7a65f2582c56011217d5c._comment create mode 100644 doc/todo/document_git-annex_dependencies.mdwn create mode 100644 doc/todo/document_git-annex_dependencies/comment_1_bb9cbd703e57adb9ca45e2cea94308a0._comment create mode 100644 doc/todo/document_git-annex_dependencies/comment_2_bcd0fa1ace9a22b0cc09cea2e7cad84c._comment create mode 100644 doc/todo/document_git-annex_dependencies/comment_3_ac0b1db3d447240b49686920a71ff91b._comment create mode 100644 doc/todo/document_standard_groups_more_extensively_in_the_UI.mdwn create mode 100644 doc/todo/documentation__58___improve_on_special_remotes.mdwn create mode 100644 doc/todo/documentation__58___improve_on_special_remotes/comment_1_edd0a4e9894d07e7bae9fef1fe4acf6d._comment create mode 100644 doc/todo/documenting_sqlite_database_schemas.mdwn create mode 100644 doc/todo/documenting_sqlite_database_schemas/comment_1_cc94cb2467c2b261c0b79c64853103a5._comment create mode 100644 doc/todo/documenting_sqlite_database_schemas/comment_2_06bc5d625d9a3e7522c7f6df53a7ac3d._comment create mode 100644 doc/todo/does_not_preserve_timestamps.mdwn create mode 100644 doc/todo/does_not_preserve_timestamps/comment_10_8cce043ff86fefc3dcd97cf5c4428786._comment create mode 100644 doc/todo/does_not_preserve_timestamps/comment_11_eea115becce4ac79932d8cfa2903f20c._comment create mode 100644 doc/todo/does_not_preserve_timestamps/comment_12_a8b69299c9278c16c6c5061d88bc7eca._comment create mode 100644 doc/todo/does_not_preserve_timestamps/comment_13_e37ea5188bd48817ccac82141906ee83._comment create mode 100644 doc/todo/does_not_preserve_timestamps/comment_14_9a3f50f1b8cfd1cc0da83937a36e1369._comment create mode 100644 doc/todo/does_not_preserve_timestamps/comment_1_caf5e5cb17f4d05fff8c2fab661cd93f._comment create mode 100644 doc/todo/does_not_preserve_timestamps/comment_2_c337fca1474b5b78f61ad6f421138ae4._comment create mode 100644 doc/todo/does_not_preserve_timestamps/comment_3_9a3eeddc46e5a420575f00cb47caf703._comment create mode 100644 doc/todo/does_not_preserve_timestamps/comment_4_99b064259fc2e3c6eb83c3da3b2d3bac._comment create mode 100644 doc/todo/does_not_preserve_timestamps/comment_5_c95c8b9bd617830604500213c962fc7a._comment create mode 100644 doc/todo/does_not_preserve_timestamps/comment_6_b99e00d0bc4258c4cb28b544b19ea3b8._comment create mode 100644 doc/todo/does_not_preserve_timestamps/comment_7_eefa6afce824f1069bb5216b392405b7._comment create mode 100644 doc/todo/does_not_preserve_timestamps/comment_8_f2a32e39356f7b772ab9cf3136436700._comment create mode 100644 doc/todo/does_not_preserve_timestamps/comment_9_62736ee2f299d62f685800353fc36ccf._comment create mode 100644 doc/todo/done.mdwn create mode 100644 doc/todo/drop_--batch.mdwn create mode 100644 doc/todo/drop_from_export_remote.mdwn create mode 100644 doc/todo/dynamic_stall_detection.mdwn create mode 100644 doc/todo/enable_a_discussion_forum_or_support_system.mdwn create mode 100644 doc/todo/enable_a_discussion_forum_or_support_system/comment_1_578c0ab40d53dd56bb3f2d98491c5e85._comment create mode 100644 doc/todo/enable_a_discussion_forum_or_support_system/comment_2_b1129b4cdfe39e740c4f7cf0d6ff2b91._comment create mode 100644 doc/todo/enable_a_discussion_forum_or_support_system/comment_3_52598af3d7b050981e32ad1569f69db9._comment create mode 100644 doc/todo/encrypt_only_the_credentials.mdwn create mode 100644 doc/todo/encrypt_only_the_credentials/comment_1_7c3911e8fbc981c7e1f32b1464ce4122._comment create mode 100644 doc/todo/encrypt_only_the_credentials/comment_2_76fdfa927562d33dfea9630b3b729220._comment create mode 100644 doc/todo/encrypt_only_the_credentials/comment_3_6f0ba120ef655d5250fdf3db53464fe6._comment create mode 100644 doc/todo/encrypted_keys_in_git_repository.mdwn create mode 100644 doc/todo/encrypted_keys_in_git_repository/comment_1_4d17c427756127f22dc472984259f8d7._comment create mode 100644 doc/todo/encrypted_keys_in_git_repository/comment_2_6679caba100bee0a0fe32c8eef50758e._comment create mode 100644 doc/todo/encrypted_keys_in_git_repository/comment_3_a79ea55e2f8a1095f0110f2f0853dee1._comment create mode 100644 doc/todo/encrypted_keys_in_git_repository/comment_4_e88664a0939b7bca730a61efb47d34ab._comment create mode 100644 doc/todo/encrypted_keys_in_git_repository/comment_5_05b0e2e88b233691b403d4c908b50c52._comment create mode 100644 doc/todo/encrypted_keys_in_git_repository/comment_6_9e25b4d05d61fc3a3cca4f7111681a5f._comment create mode 100644 doc/todo/encrypting_URLs.mdwn create mode 100644 doc/todo/encrypting_URLs/comment_1_9d0dda82d1f3907e6478a95608388836._comment create mode 100644 doc/todo/explicit_metadata_needed_for_view_inclusion_or_not.mdwn create mode 100644 doc/todo/explicit_metadata_needed_for_view_inclusion_or_not/comment_1_17f8adc8555ea0a2716308e3f5188a25._comment create mode 100644 doc/todo/export_--json_--json-progress_--json-error-messages.mdwn create mode 100644 doc/todo/export_paired_rename_innefficenctcy.mdwn create mode 100644 doc/todo/expose_fsck_last_run_information.mdwn create mode 100644 doc/todo/expose_fsck_last_run_information/comment_1_44f5eb2e601ba1a6cb22f5de7a6d3ff6._comment create mode 100644 doc/todo/expose_fsck_last_run_information/comment_2_9a1729dfbec291159000d3412dd147d7._comment create mode 100644 doc/todo/external_backends.mdwn create mode 100644 doc/todo/external_backends/comment_10_4c0f8a338a58cef8e239613292d5aa38._comment create mode 100644 doc/todo/external_backends/comment_11_56224638fde7b46ee6f52211474cd047._comment create mode 100644 doc/todo/external_backends/comment_12_268cd038b7beb9d42cf0bd8803efce94._comment create mode 100644 doc/todo/external_backends/comment_13_6e8452f06da80458bb2cccde05cc9813._comment create mode 100644 doc/todo/external_backends/comment_14_6edc4008ce8eec17e283dd7db8dbcbf0._comment create mode 100644 doc/todo/external_backends/comment_15_7880557cb94706d82a6d2bfc785288ea._comment create mode 100644 doc/todo/external_backends/comment_1_9d73d6dbfabe3d58a41b661825bf3dcb._comment create mode 100644 doc/todo/external_backends/comment_2_a2528865e48f85feab5569951f13caa9._comment create mode 100644 doc/todo/external_backends/comment_3_9451d002f6768dd5975d5816c12b1350._comment create mode 100644 doc/todo/external_backends/comment_4_2983bbf5e1cc485da3e8e9628a4bea89._comment create mode 100644 doc/todo/external_backends/comment_5_37fd824cf9f2dcc59616b9d49e38c262._comment create mode 100644 doc/todo/external_backends/comment_6_d871bdf09932035acc6260c839f45757._comment create mode 100644 doc/todo/external_backends/comment_7_090e62b5d37beb5d62d56cfb3b1e2134._comment create mode 100644 doc/todo/external_backends/comment_8_e3c66820da36fe255d07059226690ca4._comment create mode 100644 doc/todo/external_backends/comment_9_bf2de8fdc134684f0af2b53bc9b78f08._comment create mode 100644 doc/todo/external_remote_querying_transition.mdwn create mode 100644 doc/todo/external_remote_querying_transition/comment_1_838311ffa7f00d65c9ab23717dd117aa._comment create mode 100644 doc/todo/external_remotes__58___Add_support_for_ErrorMsg_to_-FAILURE_messages_lacking_it.mdwn create mode 100644 doc/todo/external_remotes__58___Add_support_for_ErrorMsg_to_-FAILURE_messages_lacking_it/comment_1_a096df37d5bc5543b574b32554311af9._comment create mode 100644 doc/todo/external_special_remotes_not_using_git-annex-remote_in_name.mdwn create mode 100644 doc/todo/external_special_remotes_not_using_git-annex-remote_in_name/comment_1_8bb17f1a8297b500dcc5bdf9412a5d6c._comment create mode 100644 doc/todo/faster___40__took_2_min__41___way_to_realize_the_need_in_pidlock__63__.mdwn create mode 100644 doc/todo/faster___40__took_2_min__41___way_to_realize_the_need_in_pidlock__63__/comment_1_9c77d8cf628025308c2561a8a46d2365._comment create mode 100644 doc/todo/faster___40__took_2_min__41___way_to_realize_the_need_in_pidlock__63__/comment_2_0d7eb254ec9ff7ba8b1831898008747f._comment create mode 100644 doc/todo/faster___40__took_2_min__41___way_to_realize_the_need_in_pidlock__63__/comment_3_26f82b5ef0ce9dc0a5a8fc64f4a3b335._comment create mode 100644 doc/todo/faster___40__took_2_min__41___way_to_realize_the_need_in_pidlock__63__/comment_4_3e2b49710772340238358041ba91bc25._comment create mode 100644 doc/todo/faster___40__took_2_min__41___way_to_realize_the_need_in_pidlock__63__/comment_5_009ffc560a14061feb8d748e1d2d9b71._comment create mode 100644 doc/todo/faster_incremental_update_of_view_branch_by_git-annex_sync.mdwn create mode 100644 doc/todo/filter-branch_for_objects.mdwn create mode 100644 doc/todo/find__47__prefer_keys_by_file_extension_in_key.mdwn create mode 100644 doc/todo/find__47__prefer_keys_by_file_extension_in_key/comment_1_fcf6f2c6ecf49930f4ddbf9b35301bf3._comment create mode 100644 doc/todo/find__47__prefer_keys_by_file_extension_in_key/comment_2_751137f0fd1815adfef69bec6a2cbe22._comment create mode 100644 doc/todo/findkeys.mdwn create mode 100644 doc/todo/findkeys/comment_1_da758b20bca40e0580526e52ea3e9a61._comment create mode 100644 doc/todo/finish_sync_content_transition.mdwn create mode 100644 doc/todo/force_star_topology_on_a_repository.mdwn create mode 100644 doc/todo/force_star_topology_on_a_repository/comment_1_cffe5ae2b85022ac9f58ce668ec9bf97._comment create mode 100644 doc/todo/force_star_topology_on_a_repository/comment_2_6e735205024588497a116ce9e7e621a9._comment create mode 100644 doc/todo/force_star_topology_on_a_repository/comment_3_154614345d2b8f4260c88e9061bf4255._comment create mode 100644 doc/todo/force_star_topology_on_a_repository/comment_4_a722bce9ea8c94864657415395eadb43._comment create mode 100644 doc/todo/force_star_topology_on_a_repository/comment_5_60d832d97923d3aac047dd525dc8df12._comment create mode 100644 doc/todo/force_star_topology_on_a_repository/comment_6_8bb1f37233055c53d98c73fed4224b50._comment create mode 100644 doc/todo/force_star_topology_on_a_repository/comment_7_6b08f09f690f7791f59cb90db01c4cf0._comment create mode 100644 doc/todo/force_star_topology_on_a_repository/comment_8_f840a405028df2630a7c8eac5091833f._comment create mode 100644 doc/todo/forget_dead_keys.mdwn create mode 100644 doc/todo/forget_dead_keys/comment_1_e4c7db734087dc4c2f6b86bb774136fd._comment create mode 100644 doc/todo/free_space_checking_for_local_special_remotes.mdwn create mode 100644 doc/todo/free_space_checking_for_local_special_remotes/comment_1_47c254cec58cbbb3ea84c93ef8282f01._comment create mode 100644 doc/todo/fsck_scrub.mdwn create mode 100644 doc/todo/fsverify.mdwn create mode 100644 doc/todo/generic_readonly_http_remote/comment_1_5fcd23950ed5409e52d7954abf71afa9._comment create mode 100644 doc/todo/generic_readonly_http_remote/comment_2_c81b458a8ee0f15950adbd32dd168972._comment create mode 100644 doc/todo/generic_readonly_http_remote/comment_3_6d95fc858ca780f087c48e4a6a4ab25b._comment create mode 100644 doc/todo/generic_readonly_http_remote/comment_4_551bbaf8f22add6ad1e2774e76a1d078._comment create mode 100644 doc/todo/generic_readonly_http_remote/comment_5_bfbec043d803ff1aa649f2661f6918f4._comment create mode 100644 doc/todo/get_--batch.mdwn create mode 100644 doc/todo/git-annex-addunused-historical.mdwn create mode 100644 doc/todo/git-annex-cat.mdwn create mode 100644 doc/todo/git-annex-cat/comment_1_a5da8264c2d662e96802535820cb2249._comment create mode 100644 doc/todo/git-annex-cat/comment_2_a43a3568e48e6b5e93998bc473178d5c._comment create mode 100644 doc/todo/git-annex-cat/comment_3_347a33a4a77fd385ab8f3551138b75e1._comment create mode 100644 doc/todo/git-annex-cat/comment_4_8708bf0aef0025e2ed1a8b9d2a7f0112._comment create mode 100644 doc/todo/git-annex-cat/comment_5_f78a6a136610f3fca7a02a3af9c19e25._comment create mode 100644 doc/todo/git-annex-export_--from_option.mdwn create mode 100644 doc/todo/git-annex-export_--from_option/comment_1_10f107aa0094d5ee4886878f5b1aaf06._comment create mode 100644 doc/todo/git-annex-export_--from_option/comment_2_72e7dc2a6b3cec21c941a5f7a2914050._comment create mode 100644 doc/todo/git-annex-migrate_using_git-replace.mdwn create mode 100644 doc/todo/git-annex-migrate_using_git-replace/comment_1_6a317be851dfb72c4aaaf5786dd1a1ff._comment create mode 100644 doc/todo/git-annex-migrate_using_git-replace/comment_2_e760213fc51f6a2cfc68dec711622f25._comment create mode 100644 doc/todo/git-annex-sync_handling_of_linked_worktrees.mdwn create mode 100644 doc/todo/git-annex-sync_handling_of_linked_worktrees/comment_1_3e542583247177f9cdf44122ec483a0c._comment create mode 100644 doc/todo/git-annex-test___58___skip_tests_if_external_utils_have_problems.mdwn create mode 100644 doc/todo/git-annex-test___58___skip_tests_if_external_utils_have_problems/comment_1_240c9c45a629124dc35f4ed0dddd7355._comment create mode 100644 doc/todo/git-annex-unused_--history.mdwn create mode 100644 doc/todo/git-annex-unused_--history/comment_1_9b9518a88e5f90d68b4131c430e66881._comment create mode 100644 doc/todo/git-annex-unused_--history/comment_2_d0aa8cc29e38510b2bb1c4ce356aa2ac._comment create mode 100644 doc/todo/git-annex-unused_--history/comment_3_21797e55d27356411430b3ec07af5264._comment create mode 100644 doc/todo/git-hook_to_sanity-check_git-annex_branch_pushes.mdwn create mode 100644 doc/todo/git-lfs_special_remote_simpler_setup.mdwn create mode 100644 doc/todo/git-lfs_special_remote_simpler_setup/comment_1_4e9f8b60dd1b705d4755200dada8801c._comment create mode 100644 doc/todo/git-remote-annex.mdwn create mode 100644 doc/todo/git_annex_info___60__remote__62___does_not_list_all_the_parameters_for_the_remote.mdwn create mode 100644 doc/todo/git_annex_info___60__remote__62___does_not_list_all_the_parameters_for_the_remote/comment_1_875fdf1aacff3cc2c3732450f052d711._comment create mode 100644 doc/todo/git_annex_info_to_include_information_about_repo_version__63__.mdwn create mode 100644 doc/todo/git_annex_info_to_include_information_about_repo_version__63__/comment_1_783c53fd99747bc65bd832f918c50a59._comment create mode 100644 doc/todo/git_annex_info_to_include_information_about_repo_version__63__/comment_2_60d3b088de83c86243b19c3d0d050080._comment create mode 100644 doc/todo/git_annex_info_to_include_information_about_repo_version__63__/comment_3_d6e84551319439ba50bc10edbd25335c._comment create mode 100644 doc/todo/git_annex_info_to_include_information_about_repo_version__63__/comment_4_5b3e45c746e6cfa7f511790bbd9f6c9f._comment create mode 100644 doc/todo/git_annex_repair__58___performance_can_be_abysmal__44___huge_improvements_possible.mdwn create mode 100644 doc/todo/git_annex_repair__58___performance_can_be_abysmal__44___huge_improvements_possible/comment_1_4828098be3e7cd6109bd1934bf029f1f._comment create mode 100644 doc/todo/git_annex_upgrade_to_not_care_about_submod_status__63__.mdwn create mode 100644 doc/todo/git_annex_upgrade_to_not_care_about_submod_status__63__/comment_1_607ec43498187636312693932f66cc6d._comment create mode 100644 doc/todo/git_fetch_and_push_to_import_export_remote.mdwn create mode 100644 doc/todo/git_repo_tracking___40__not_storage__41__.mdwn create mode 100644 doc/todo/git_repo_tracking___40__not_storage__41__/comment_1_e47bc088880a9e839f5c437117c58b68._comment create mode 100644 doc/todo/git_repo_tracking___40__not_storage__41__/comment_2_4af24f7207f63eb4cc127a64c1fc5fc3._comment create mode 100644 doc/todo/git_smudge_clean_interface_suboptiomal.mdwn create mode 100644 doc/todo/git_smudge_clean_interface_suboptiomal/comment_10_2247cea7e7ca09389073fb32e98394e7._comment create mode 100644 doc/todo/git_smudge_clean_interface_suboptiomal/comment_11_39e671908522b79b8054ed9ddcaf918c._comment create mode 100644 doc/todo/git_smudge_clean_interface_suboptiomal/comment_12_bb2bf0e82985bf2045741205c4682813._comment create mode 100644 doc/todo/git_smudge_clean_interface_suboptiomal/comment_1_b41830b59c47ce5041c6005d41baf550._comment create mode 100644 doc/todo/git_smudge_clean_interface_suboptiomal/comment_2_8ad0fa4f67af60313d3195bc8c0acfb8._comment create mode 100644 doc/todo/git_smudge_clean_interface_suboptiomal/comment_3_778d21703afc5c08bfbc387b442cc193._comment create mode 100644 doc/todo/git_smudge_clean_interface_suboptiomal/comment_4_ef42e80aac54e02000c1a61b1f42aed0._comment create mode 100644 doc/todo/git_smudge_clean_interface_suboptiomal/comment_5_8da190f9f0cece7215df28b0bc47b151._comment create mode 100644 doc/todo/git_smudge_clean_interface_suboptiomal/comment_6_69b4455c0e54834503794f6f65de1fc8._comment create mode 100644 doc/todo/git_smudge_clean_interface_suboptiomal/comment_7_d52b1ab7d6a186919b3edfd51347e161._comment create mode 100644 doc/todo/git_smudge_clean_interface_suboptiomal/comment_8_e99ecb0ac561dd670f3ea7b2915de872._comment create mode 100644 doc/todo/git_smudge_clean_interface_suboptiomal/comment_9_ccea12d55706ab2fc1b0ba46818354a3._comment create mode 100644 doc/todo/git_status_smudges_unncessarily_after_unlock.mdwn create mode 100644 doc/todo/globus_special_remote_as_a___34__transport__34___layer.mdwn create mode 100644 doc/todo/globus_special_remote_as_a___34__transport__34___layer/comment_1_f2c68afc949f54939fc760bd0d916b89._comment create mode 100644 doc/todo/globus_special_remote_as_a___34__transport__34___layer/comment_2_89be9eea4304897c639fa80db92cfe2c._comment create mode 100644 doc/todo/globus_special_remote_as_a___34__transport__34___layer/comment_3_43107f1bec1ad141af2e97f715a70fe9._comment create mode 100644 doc/todo/globus_special_remote_as_a___34__transport__34___layer/comment_3_9c557a788841bd34e5fa902e171d2b52._comment create mode 100644 doc/todo/globus_special_remote_as_a___34__transport__34___layer/comment_4_3bea0473d4805b1ef56b955ba30166e8._comment create mode 100644 doc/todo/globus_special_remote_as_a___34__transport__34___layer/comment_5_28aabb525a1a487eaecdfe591cc7108b._comment create mode 100644 doc/todo/globus_special_remote_as_a___34__transport__34___layer/comment_6_51b2078904c6a7c0fff2dd7d38791e6b._comment create mode 100644 doc/todo/hidden_files.mdwn create mode 100644 doc/todo/hiding_a_repository.mdwn create mode 100644 doc/todo/hiding_a_repository/comment_1_68636f0a35a1cd62e0390d1a752eba47._comment create mode 100644 doc/todo/hiding_a_repository/comment_2_5d8224fdb6c77834b3bf55b2148d9f97._comment create mode 100644 doc/todo/hiding_a_repository/comment_3_64ba3f1d5099e066d554566ca818bdd6._comment create mode 100644 doc/todo/idea__58___external_special_remote___34__async__34___protocol_for_transfers.mdwn create mode 100644 doc/todo/idea__58___external_special_remote___34__async__34___protocol_for_transfers/comment_1_64397d2700c9ab13885024b65d4d5adc._comment create mode 100644 doc/todo/idea__58___external_special_remote___34__async__34___protocol_for_transfers/comment_2_f2f2986f643c654c3d87be832687fc68._comment create mode 100644 doc/todo/idea__58___external_special_remote___34__async__34___protocol_for_transfers/comment_3_7e07ab418734d22ab032bb655b4b3645._comment create mode 100644 doc/todo/idea__58___external_special_remote___34__async__34___protocol_for_transfers/comment_4_0c4110101bf810816d4568b37018211e._comment create mode 100644 doc/todo/idea__58___external_special_remote___34__async__34___protocol_for_transfers/comment_5_ab2c969b5b561b75fec1d95c52598cb4._comment create mode 100644 doc/todo/idea__58___external_special_remote___34__async__34___protocol_for_transfers/comment_6_877ae38938a279fa100e58c03990e81a._comment create mode 100644 doc/todo/idea__58___external_special_remote___34__async__34___protocol_for_transfers/comment_7_59aa5bd5ac6cfe5976666853b5ce9fdc._comment create mode 100644 doc/todo/idea__58___external_special_remote___34__async__34___protocol_for_transfers/comment_7_c0f5b5098252df0f86528078f3c96ec7._comment create mode 100644 doc/todo/immediate_stream-to-sync.mdwn create mode 100644 doc/todo/immediate_stream-to-sync/comment_1_457523845c5e63bae90ea5a84d57bf96._comment create mode 100644 doc/todo/import_from_directory_does_not_use_cp_--reflink__63___.mdwn create mode 100644 doc/todo/import_from_directory_does_not_use_cp_--reflink__63___/comment_1_7a297f170720daf25f7ecf133aafc6a4._comment create mode 100644 doc/todo/import_from_directory_does_not_use_cp_--reflink__63___/comment_2_04b63e4e2092ed455d23657e2b396d3b._comment create mode 100644 doc/todo/import_from_directory_does_not_use_cp_--reflink__63___/comment_3_20e31ffc7c490215db7a3f1a0a3b813c._comment create mode 100644 doc/todo/import_from_directory_does_not_use_cp_--reflink__63___/comment_3_50ae4126d701dbd3a0c9ed8770404228._comment create mode 100644 doc/todo/import_from_directory_does_not_use_cp_--reflink__63___/comment_4_fca845bb9869e8ce9a279952813ce481._comment create mode 100644 doc/todo/import_from_directory_does_not_use_cp_--reflink__63___/comment_5_f1475420fd16e664b907c4f24910a8d1._comment create mode 100644 doc/todo/import_from_directory_does_not_use_cp_--reflink__63___/comment_7_b57afb61d622d9f5b2555e7d80d0ff4e._comment create mode 100644 doc/todo/import_only_remotes_need_a_way_to_resolve_conflicts.mdwn create mode 100644 doc/todo/import_symlinks_when_importing_from_directory.mdwn create mode 100644 doc/todo/import_symlinks_when_importing_from_directory/comment_1_60b1a3ab291bc7eec2ba2ad6ee044bfe._comment create mode 100644 doc/todo/import_tree_from_rsync_special_remote.mdwn create mode 100644 doc/todo/import_tree_from_rsync_special_remote/comment_1_b1f97f8d62c4e2f9bbe02955c7a4dec4._comment create mode 100644 doc/todo/import_tree_from_rsync_special_remote/comment_2_7e62dbfc5540a8737d77f25ad2acc4af._comment create mode 100644 doc/todo/import_tree_from_rsync_special_remote/comment_3_1d3acf47e3eff3680c1639de12823940._comment create mode 100644 doc/todo/import_tree_preferred_content_expansions.mdwn create mode 100644 doc/todo/import_tree_preferred_content_expansions/comment_1_df8ca8665e1dfc530a832b6d24d60ea4._comment create mode 100644 doc/todo/importfeed_needs_more_memory_the_more_urls_there_are.mdwn create mode 100644 doc/todo/importfeed_parallell.mdwn create mode 100644 doc/todo/importtree_only_remotes.mdwn create mode 100644 doc/todo/improve_memory_usage_of_--all.mdwn create mode 100644 doc/todo/improve_unused_for_special_remotes.mdwn create mode 100644 doc/todo/include_msg_with_possible_reason_why_command___40__e.g._add__41___failed_into_--json_output.mdwn create mode 100644 doc/todo/include_msg_with_possible_reason_why_command___40__e.g._add__41___failed_into_--json_output/comment_1_f02e43b68c219b2d7d65ea868fac125f._comment create mode 100644 doc/todo/include_msg_with_possible_reason_why_command___40__e.g._add__41___failed_into_--json_output/comment_2_3a7043652c692796b1a438a2c4c26828._comment create mode 100644 doc/todo/include_msg_with_possible_reason_why_command___40__e.g._add__41___failed_into_--json_output/comment_3_2d41d67dcb6e700b1ecda3106e444a5e._comment create mode 100644 doc/todo/include_msg_with_possible_reason_why_command___40__e.g._add__41___failed_into_--json_output/comment_4_c2e5041a07787ae84f85b898b1aae6b7._comment create mode 100644 doc/todo/include_msg_with_possible_reason_why_command___40__e.g._add__41___failed_into_--json_output/comment_5_429e42b9c1989dade01300f08fc3c13c._comment create mode 100644 doc/todo/include_msg_with_possible_reason_why_command___40__e.g._add__41___failed_into_--json_output/comment_6_3d5a33476a3fa773fda1e5f7a2d8c453._comment create mode 100644 doc/todo/include_msg_with_possible_reason_why_command___40__e.g._add__41___failed_into_--json_output/comment_7_246e35f32f77af3b2924577b1bf45001._comment create mode 100644 doc/todo/include_msg_with_possible_reason_why_command___40__e.g._add__41___failed_into_--json_output/comment_8_2e0ec2bb51a2a06184b94710616f211c._comment create mode 100644 doc/todo/incremental_hashing_for_add.mdwn create mode 100644 doc/todo/incremental_hashing_for_add/comment_1_d00827f5edd7b270aa6dfc011e7c9f22._comment create mode 100644 doc/todo/incremental_hashing_for_add/comment_2_30b4c0f3b1c13e9a1a2ddba5f88eb6ee._comment create mode 100644 doc/todo/info_--size-history.mdwn create mode 100644 doc/todo/info__58___allow_file_matching_options_for_all_keys.mdwn create mode 100644 doc/todo/info__58___allow_file_matching_options_for_all_keys/comment_1_3b96becda1db6ae23adb5077b6332718._comment create mode 100644 doc/todo/info__58___allow_file_matching_options_for_all_keys/comment_2_2d0a6abd5be8afce677eeea575aae548._comment create mode 100644 doc/todo/info__58___allow_file_matching_options_for_all_keys/comment_3_aae866dc71811074d69b91c2390ccb01._comment create mode 100644 doc/todo/info__58___allow_file_matching_options_for_all_keys/comment_4_371d53b4539bee6e3d595154033a2471._comment create mode 100644 doc/todo/info_show_total_annex_sizes_of_repositories.mdwn create mode 100644 doc/todo/init__58__do_not_bother_scanning_if_in_git-annex_branch.mdwn create mode 100644 doc/todo/init__58__do_not_bother_scanning_if_in_git-annex_branch/comment_1_2ff094dd4ff1fb05db90782d381441d3._comment create mode 100644 doc/todo/init__58__do_not_bother_scanning_if_in_git-annex_branch/comment_2_2cbfb22e8f1d89d4f78ade565554cb1c._comment create mode 100644 doc/todo/init__58__do_not_bother_scanning_if_in_git-annex_branch/comment_3_fe771be800a6b26157c3075e632ee1b7._comment create mode 100644 doc/todo/interface_to_the___34__progress__34___of_annex_operations.mdwn create mode 100644 doc/todo/keep_git-annex_branch_checked_out__63__.mdwn create mode 100644 doc/todo/keep_git-annex_branch_checked_out__63__/comment_1_cd967b89dbebd431a14b0dcd08ebc67c._comment create mode 100644 doc/todo/keep_git-annex_branch_checked_out__63__/comment_2_620cfbb2e2507d340dfb25d1fcd2cdfa._comment create mode 100644 doc/todo/key_checksum_from_chunk_checksums.mdwn create mode 100644 doc/todo/key_checksum_from_chunk_checksums/comment_1_946e2679cafd2c74a3b0b408e39f2d8d._comment create mode 100644 doc/todo/key_checksum_from_chunk_checksums/comment_2_aaff896ff99366d3b96c523284c1248e._comment create mode 100644 doc/todo/key_checksum_from_chunk_checksums/comment_3_352bc3eb419184a4ec70ddaffd78968e._comment create mode 100644 doc/todo/key_checksum_from_chunk_checksums/comment_4_e766f725e22ea0a38ac2277e08fd3839._comment create mode 100644 doc/todo/key_checksum_from_chunk_checksums/comment_5_561b9bb28c5d375334ce915da75d5ce6._comment create mode 100644 doc/todo/learn_about_remotes_that_are_currently_unavailable.mdwn create mode 100644 doc/todo/let_external_remotes_declare_support_for_named_pipes.mdwn create mode 100644 doc/todo/let_git-annex-matching-options_query_gitattributes.mdwn create mode 100644 doc/todo/let_git-annex-matching-options_query_gitattributes/comment_1_3e7c731037b8ce7148a6a597783d2ba3._comment create mode 100644 doc/todo/lockContent_for_special_remotes.mdwn create mode 100644 doc/todo/lockContent_for_special_remotes/comment_1_835d075d22fd1544fc27b912ad3326d8._comment create mode 100644 doc/todo/lockContent_for_special_remotes/comment_2_948993c967f7908adaea068e352e0607._comment create mode 100644 doc/todo/lockContent_for_special_remotes/comment_3_432fc28c4e09fd514fd780ec16b9423e._comment create mode 100644 doc/todo/lockContent_for_special_remotes/comment_4_13f4b8e180c727b775807e8e2aa5a11f._comment create mode 100644 doc/todo/lockContent_for_special_remotes/comment_5_b006d6bca93a50e1f23a2b6d20584c91._comment create mode 100644 doc/todo/lockContent_for_special_remotes/comment_6_01cc0fba0368fcda594d2835247dd884._comment create mode 100644 doc/todo/lockContent_for_special_remotes/comment_7_463e336fd7f2cb21eff2d87d25851c39._comment create mode 100644 doc/todo/lockdown_hooks.mdwn create mode 100644 doc/todo/lockdown_hooks/comment_1_649dbc3c951bbabc550e12e87e45b319._comment create mode 100644 doc/todo/lockdown_hooks/comment_2_575c33970014662c664d71e573e718e7._comment create mode 100644 doc/todo/lockdown_hooks/comment_3_f57299385578914f5bca05f06b76cd46._comment create mode 100644 doc/todo/lockdown_hooks/comment_4_614d2c8c758f9920cd84748f8f0d384e._comment create mode 100644 doc/todo/machine_readable_information_about_reason_of_failure_in_enableremote.mdwn create mode 100644 doc/todo/machine_readable_information_about_reason_of_failure_in_enableremote/comment_1_dbe339cb1860d27ebc7116ab4d6e50fb._comment create mode 100644 doc/todo/machine_readable_information_about_reason_of_failure_in_enableremote/comment_2_06e98b0e0704dce8ced214600d0d6347._comment create mode 100644 doc/todo/machine_readable_information_about_reason_of_failure_in_enableremote/comment_3_1c1aaecf15ee220ed5c39def48ccd734._comment create mode 100644 doc/todo/make_add_--batch_add_directories_content.mdwn create mode 100644 doc/todo/make_add_--batch_add_directories_content/comment_1_e5707f72bb086c342c89fc3b5ccf00e5._comment create mode 100644 doc/todo/make_add_--batch_add_directories_content/comment_2_5083e5a729f56dab76bdc97fb247b902._comment create mode 100644 doc/todo/make_add_--batch_add_directories_content/comment_3_e320d2c3b625f24e2b93c5dab21a1e0f._comment create mode 100644 doc/todo/make_add_--batch_add_directories_content/comment_4_98c678aefbc62aed7ceec8c7519d343a._comment create mode 100644 doc/todo/make_add_--batch_add_directories_content/comment_5_4cfd430f9e9196ec293fb118e5118160._comment create mode 100644 doc/todo/make_add_--batch_add_directories_content/comment_6_93cb877bf71acddcf15a6c1ed48d2768._comment create mode 100644 doc/todo/make_add_--batch_add_directories_content/comment_7_2155ce0ab07a84a4f36bcf92c29ec792._comment create mode 100644 doc/todo/make_add_--batch_add_directories_content/comment_8_5d63312c2efe3f1a25f9254ed230c66b._comment create mode 100644 doc/todo/make_add_--batch_add_directories_content/comment_9_0bbdcf13e0ea7869c1633a34457d9a86._comment create mode 100644 doc/todo/make_addurl_respect_annex.largefiles_option.mdwn create mode 100644 doc/todo/make_annex___34__respect__34___.git__47__hooks__47__prepare-commit-msg.mdwn create mode 100644 doc/todo/make_annex___34__respect__34___.git__47__hooks__47__prepare-commit-msg/comment_1_e7f759dccbfa134a772f15bc5f9c4b29._comment create mode 100644 doc/todo/make_annex___34__respect__34___.git__47__hooks__47__prepare-commit-msg/comment_2_acd656bf30f7e0b5def7ad7a564cf914._comment create mode 100644 doc/todo/make_annex___34__respect__34___.git__47__hooks__47__prepare-commit-msg/comment_3_0f49414f9b4a68a16a8d47a336242f13._comment create mode 100644 doc/todo/make_annex___34__respect__34___.git__47__hooks__47__prepare-commit-msg/comment_4_203a356c1edfaf8c0c9cf01bedc2ec5d._comment create mode 100644 doc/todo/make_annex___34__respect__34___.git__47__hooks__47__prepare-commit-msg/comment_5_c7a888605dd063fe7df7c569f1193f8c._comment create mode 100644 doc/todo/make_annex___34__respect__34___.git__47__hooks__47__prepare-commit-msg/comment_6_b8bb9e5c7156e4defd7a2e8b7777e1ba._comment create mode 100644 doc/todo/make_annex_info_more_efficient.mdwn create mode 100644 doc/todo/make_annex_info_more_efficient/comment_1_afd5c806f7285442401b027f82a8c629._comment create mode 100644 doc/todo/make_annex_info_more_efficient/comment_2_0770ef5c4c261949a565723073480dcb._comment create mode 100644 doc/todo/make_annex_info_more_efficient/comment_3_c022caab61061b1f77b78485089a9052._comment create mode 100644 doc/todo/make_annex_info_more_efficient/comment_4_923dd7c22920b389488ca2625225164c._comment create mode 100644 doc/todo/make_annex_info_more_efficient/comment_5_c6c8850aefe3ab81f1f113daa734695b._comment create mode 100644 doc/todo/make_annex_info_more_efficient/comment_6_804dbb72757b09e3abad3e249f704da0._comment create mode 100644 doc/todo/make_annex_info_more_efficient/comment_7_44efc2bfcdde576aaca002595476a2a2._comment create mode 100644 doc/todo/make_annex_info_more_efficient/comment_8_90a22c51b19707ee0cecbe652c6ffa98._comment create mode 100644 doc/todo/make_annex_info_more_efficient/comment_9_3bec13ce0c9f0932715d73106d576e86._comment create mode 100644 doc/todo/make_copy_--fast__faster.mdwn create mode 100644 doc/todo/make_copy_--fast__faster/comment_10_1af4ac0d37c876912678522895c1656b._comment create mode 100644 doc/todo/make_copy_--fast__faster/comment_11_1ca8d9765e6e3a18ae09df74bc390a00._comment create mode 100644 doc/todo/make_copy_--fast__faster/comment_12_14856a2886cf73d1bee57ef9fad01661._comment create mode 100644 doc/todo/make_copy_--fast__faster/comment_13_0f8e2127cea96c4f9609fa7599b1eec9._comment create mode 100644 doc/todo/make_copy_--fast__faster/comment_1_24a9ca652007a18f18b368232cf549da._comment create mode 100644 doc/todo/make_copy_--fast__faster/comment_2_0c67f467d730a0966b43171de0382c42._comment create mode 100644 doc/todo/make_copy_--fast__faster/comment_3_5cd9e6b5d6d015120b5852bd212314aa._comment create mode 100644 doc/todo/make_copy_--fast__faster/comment_4_3ac10a07c74e5debafc9ae574d26c955._comment create mode 100644 doc/todo/make_copy_--fast__faster/comment_5_eb7008151a59e35c7850df3a86cf3587._comment create mode 100644 doc/todo/make_copy_--fast__faster/comment_6_3a08de49e9661f9df5bab272e170461a._comment create mode 100644 doc/todo/make_copy_--fast__faster/comment_7_3f52b6e19035d3c891356c6d98035987._comment create mode 100644 doc/todo/make_copy_--fast__faster/comment_8_c1f99493f5e5c362d5c39f048280b11b._comment create mode 100644 doc/todo/make_copy_--fast__faster/comment_9_f4d802a28b79905da0cb24af6cb65b0a._comment create mode 100644 doc/todo/make_git_check-ignore_less___34__cpu_heavy__34___while_addurl_--batch_--fast___63__.mdwn create mode 100644 doc/todo/make_git_check-ignore_less___34__cpu_heavy__34___while_addurl_--batch_--fast___63__/comment_1_f8ea668cd8a405226113ef2edeb9e678._comment create mode 100644 doc/todo/make_git_check-ignore_less___34__cpu_heavy__34___while_addurl_--batch_--fast___63__/comment_2_50d04e85c0504f920ed7d2ccb9cdb6dd._comment create mode 100644 doc/todo/make_git_check-ignore_less___34__cpu_heavy__34___while_addurl_--batch_--fast___63__/comment_3_2ebd0de2fe55230f4e589bd295c828a2._comment create mode 100644 doc/todo/make_git_check-ignore_less___34__cpu_heavy__34___while_addurl_--batch_--fast___63__/comment_4_7d1154d80feca270f6226374a51a0609._comment create mode 100644 doc/todo/make_git_check-ignore_less___34__cpu_heavy__34___while_addurl_--batch_--fast___63__/comment_5_8e931e54738640cecf0bbaf80a3e8660._comment create mode 100644 doc/todo/make_status_show_staged_files/comment_1_3874f5da5a300b7d443e1ad6373b4099._comment create mode 100644 doc/todo/may_be___40__again__41___to_prelink_or_somehow_avoid_all_the_failing_opens__63__.mdwn create mode 100644 doc/todo/may_be___40__again__41___to_prelink_or_somehow_avoid_all_the_failing_opens__63__/comment_10_20db4ecf9debcc2662ec69a6ad9b37c6._comment create mode 100644 doc/todo/may_be___40__again__41___to_prelink_or_somehow_avoid_all_the_failing_opens__63__/comment_11_b3c5851c3603976d59927b591ba1d126._comment create mode 100644 doc/todo/may_be___40__again__41___to_prelink_or_somehow_avoid_all_the_failing_opens__63__/comment_12_2363dac7701b9c36eb1896a09e68c17d._comment create mode 100644 doc/todo/may_be___40__again__41___to_prelink_or_somehow_avoid_all_the_failing_opens__63__/comment_13_5d65192366f7690c22d1a209fb1e8f78._comment create mode 100644 doc/todo/may_be___40__again__41___to_prelink_or_somehow_avoid_all_the_failing_opens__63__/comment_14_16aae09d0e1d80240fc3ae81e5b06972._comment create mode 100644 doc/todo/may_be___40__again__41___to_prelink_or_somehow_avoid_all_the_failing_opens__63__/comment_15_013afa9d45970397bfcd60e57a519d67._comment create mode 100644 doc/todo/may_be___40__again__41___to_prelink_or_somehow_avoid_all_the_failing_opens__63__/comment_16_c43788c8730619c3590d1a0a2bb87148._comment create mode 100644 doc/todo/may_be___40__again__41___to_prelink_or_somehow_avoid_all_the_failing_opens__63__/comment_17_77a2f7d18cbcf780d8e2bb4a3e40b4fa._comment create mode 100644 doc/todo/may_be___40__again__41___to_prelink_or_somehow_avoid_all_the_failing_opens__63__/comment_18_7650d349ba50972b64cd6d81673bf1c9._comment create mode 100644 doc/todo/may_be___40__again__41___to_prelink_or_somehow_avoid_all_the_failing_opens__63__/comment_19_13b21a0523b8837f4e27bb78e35ad5e0._comment create mode 100644 doc/todo/may_be___40__again__41___to_prelink_or_somehow_avoid_all_the_failing_opens__63__/comment_1_c67d403cb5bb67c3486ff9ade9607b2f._comment create mode 100644 doc/todo/may_be___40__again__41___to_prelink_or_somehow_avoid_all_the_failing_opens__63__/comment_2_c67fe4be932b8e7e365ed336e612b526._comment create mode 100644 doc/todo/may_be___40__again__41___to_prelink_or_somehow_avoid_all_the_failing_opens__63__/comment_3_6ae9e999b6af6b6bfe078dd187f7ff22._comment create mode 100644 doc/todo/may_be___40__again__41___to_prelink_or_somehow_avoid_all_the_failing_opens__63__/comment_4_bfb9b94048fc239f29351a9d38c8d4e3._comment create mode 100644 doc/todo/may_be___40__again__41___to_prelink_or_somehow_avoid_all_the_failing_opens__63__/comment_5_7a57b6713788778f6a6e8144cf3931b2._comment create mode 100644 doc/todo/may_be___40__again__41___to_prelink_or_somehow_avoid_all_the_failing_opens__63__/comment_6_3a849428b335964f80a8503d44d51c5a._comment create mode 100644 doc/todo/may_be___40__again__41___to_prelink_or_somehow_avoid_all_the_failing_opens__63__/comment_7_5f5d9af7ed807b8ef203426f717822b2._comment create mode 100644 doc/todo/may_be___40__again__41___to_prelink_or_somehow_avoid_all_the_failing_opens__63__/comment_8_b45863d81e3790ea44714a18c1721abd._comment create mode 100644 doc/todo/may_be___40__again__41___to_prelink_or_somehow_avoid_all_the_failing_opens__63__/comment_9_ce5fb75f944816b134fd2dc7a389b913._comment create mode 100644 doc/todo/metadata_--batch.mdwn create mode 100644 doc/todo/migration_to_VURL_by_default.mdwn create mode 100644 doc/todo/more___34__filesystem_efficient__34___journalling__63___.mdwn create mode 100644 doc/todo/more___34__filesystem_efficient__34___journalling__63___/comment_1_5bbc2d651e4ce0ea5b20f199be5cb717._comment create mode 100644 doc/todo/more___34__filesystem_efficient__34___journalling__63___/comment_2_5a29f3bc596b463b6710a6654b2e271e._comment create mode 100644 doc/todo/more___34__filesystem_efficient__34___journalling__63___/comment_3_6486a0cf500f6ba3a9306cdc137f7b4d._comment create mode 100644 doc/todo/more___34__filesystem_efficient__34___journalling__63___/comment_4_3d1a1ede9d1b5048723a542996121dd4._comment create mode 100644 doc/todo/more_efficient_resolution_of_trivial_export_conflicts.mdwn create mode 100644 doc/todo/more_efficient_resolution_of_trivial_export_conflicts/comment_1_5a2d7ea060f5e1be11c39521c0a5631d._comment create mode 100644 doc/todo/more_efficient_resolution_of_trivial_export_conflicts/comment_2_70c3cfa9b95f3aa6c2e2e2f6dbbc50d0._comment create mode 100644 doc/todo/more_efficient_resolution_of_trivial_export_conflicts/comment_3_d0549f8a07032ce61e88b4ccb2c6ef3b._comment create mode 100644 doc/todo/more_flexible___40____34__external__34____63____41___credentials_mechanism.mdwn create mode 100644 doc/todo/more_flexible___40____34__external__34____63____41___credentials_mechanism/comment_1_7078d380be9e78fea9fd5bec4ef9594b._comment create mode 100644 doc/todo/more_flexible___40____34__external__34____63____41___credentials_mechanism/comment_2_9e2c1d58f0d91dc55524d2e164b89b97._comment create mode 100644 doc/todo/moreinfo.mdwn create mode 100644 doc/todo/move_readonly_values_to_AnnexRead.mdwn create mode 100644 doc/todo/multiple_-m.mdwn create mode 100644 doc/todo/need_a_clear_criteria_for_adding_git-annex-config_settings.mdwn create mode 100644 doc/todo/need_a_clear_criteria_for_adding_git-annex-config_settings/comment_1_bcc5d69426fc6af6affdaf251dd9dd5d._comment create mode 100644 doc/todo/needsthought.mdwn create mode 100644 doc/todo/network_test_suite.mdwn create mode 100644 doc/todo/new_command_for_syncing_content_only.mdwn create mode 100644 doc/todo/new_command_for_syncing_content_only/comment_1_7f983de645430d970c75f25fee27b2ed._comment create mode 100644 doc/todo/new_command_for_syncing_content_only/comment_2_311cd71d61bea5782c71ee33282d152e._comment create mode 100644 doc/todo/new_command_for_syncing_content_only/comment_3_19398beb81c56b3b7cc3aff7081a2886._comment create mode 100644 doc/todo/new_command_for_syncing_content_only/comment_4_c72cbc566af9585b4701f833883f878e._comment create mode 100644 doc/todo/new_command_for_syncing_content_only/comment_5_857157a775711330df39b57828cf9bd4._comment create mode 100644 doc/todo/new_command_for_syncing_content_only/comment_6_3ca0ef151b73781d2fe168c56d54faad._comment create mode 100644 doc/todo/new_command_for_syncing_content_only/comment_7_084e139c8325bb8607f6c0a9f3873afe._comment create mode 100644 doc/todo/new_command_for_syncing_content_only/comment_8_c666e3ef20e823230392a70d6b588e7d._comment create mode 100644 doc/todo/nitpick__58___show_one_column_per_UUID_in_git_annex_lis.mdwn create mode 100644 doc/todo/nitpick__58___show_one_column_per_UUID_in_git_annex_lis/comment_1_e6d9efa01ddeb129469b3b8a4205cb3f._comment create mode 100644 doc/todo/nitpick__58___show_one_column_per_UUID_in_git_annex_lis/comment_2_049625685f6147f38392e2df1dadac33._comment create mode 100644 doc/todo/not_ask_git_credentials_for_password_per_each_file.mdwn create mode 100644 doc/todo/not_ask_git_credentials_for_password_per_each_file/comment_1_ae15355f54b5137e696aaf5d2111806b._comment create mode 100644 doc/todo/not_ask_git_credentials_for_password_per_each_file/comment_2_0c60c791513acff3910a29513f7f2f78._comment create mode 100644 doc/todo/not_ask_git_credentials_for_password_per_each_file/comment_2_2d8902e343e65a39b5a23278793ec921._comment create mode 100644 doc/todo/not_ask_git_credentials_for_password_per_each_file/comment_3_39ccd0fe773200166d0727dc903c34e3._comment create mode 100644 doc/todo/not_ask_git_credentials_for_password_per_each_file/comment_4_4dca41df7506fa7aedf88d7618bbcf39._comment create mode 100644 doc/todo/onlyingroup_preferred_content_expression.mdwn create mode 100644 doc/todo/onlyingroup_preferred_content_expression/comment_1_eddf28997789400398fbdd58ec64861d._comment create mode 100644 doc/todo/onlyingroup_preferred_content_expression/comment_2_b1a22e4fbc594c3085e7fbc6fbaab69a._comment create mode 100644 doc/todo/onlyingroup_preferred_content_expression/comment_3_8f205160e62aa1312b8e2ef4cafe8c50._comment create mode 100644 doc/todo/openwrt_package.mdwn create mode 100644 doc/todo/openwrt_package/comment_1_100d76109e04bc43979775d71b4152ac._comment create mode 100644 doc/todo/openwrt_package/comment_2_2cb7dd4c0cc4413a4588b13cf7700de2._comment create mode 100644 doc/todo/openwrt_package/comment_3_5ba8a325a683ff543d81a366c873070d._comment create mode 100644 doc/todo/openwrt_package/comment_4_132e67b34f9c616217e037e4ecac70a4._comment create mode 100644 doc/todo/optimise_by_converting_Map_to_HashMap.mdwn create mode 100644 doc/todo/optimise_use_of_keys_db_on_local_remote.mdwn create mode 100644 doc/todo/optimization_needed__58___slow_uninit.mdwn create mode 100644 doc/todo/optimization_needed__58___slow_uninit/comment_1_3d01d125ffea8dd247e68f716a9c636a._comment create mode 100644 doc/todo/option_for___40__fast__41___compression_on_special_remotes_like___34__directory__34__.mdwn create mode 100644 doc/todo/option_for___40__fast__41___compression_on_special_remotes_like___34__directory__34__/comment_1_8620167702725aa8fb0e42dfe3820520._comment create mode 100644 doc/todo/option_for___40__fast__41___compression_on_special_remotes_like___34__directory__34__/comment_2_f964bb1a14f099e69f1e780ee7c7ef68._comment create mode 100644 doc/todo/option_for___40__fast__41___compression_on_special_remotes_like___34__directory__34__/comment_3_d4672f72a00509186cfc5dd85e1da140._comment create mode 100644 doc/todo/option_for___40__fast__41___compression_on_special_remotes_like___34__directory__34__/comment_4_4560eff896578ac2779b03ec3484d0b2._comment create mode 100644 doc/todo/option_for___40__fast__41___compression_on_special_remotes_like___34__directory__34__/comment_5_a154a025d441db4e0140fee821d1791c._comment create mode 100644 doc/todo/option_to___96__drop_path__96___to_not_drop___34__all_copies__34__.mdwn create mode 100644 doc/todo/option_to___96__drop_path__96___to_not_drop___34__all_copies__34__/comment_1_8f40b2663c9f48ddb07969af1b6632a8._comment create mode 100644 doc/todo/option_to___96__drop_path__96___to_not_drop___34__all_copies__34__/comment_2_32383ff5db43f0f4dc9e7470613f04fd._comment create mode 100644 doc/todo/option_to___96__drop_path__96___to_not_drop___34__all_copies__34__/comment_3_2665f3fc268dff1de24d6ee9648c5d8c._comment create mode 100644 doc/todo/option_to___96__drop_path__96___to_not_drop___34__all_copies__34__/comment_4_5fb82eb18c6d935ac07ec9220d9037c0._comment create mode 100644 doc/todo/option_to___96__drop_path__96___to_not_drop___34__all_copies__34__/comment_5_c7b9cbdbc4be36ea4d56a1eec13c6f34._comment create mode 100644 doc/todo/option_to___96__drop_path__96___to_not_drop___34__all_copies__34__/comment_6_aa58624e8d0de174a06c6c2c0e33dc14._comment create mode 100644 doc/todo/option_to___96__drop_path__96___to_not_drop___34__all_copies__34__/comment_7_150a87dea1bd24e3d4e18cf3bcfb937f._comment create mode 100644 doc/todo/option_to___96__drop_path__96___to_not_drop___34__all_copies__34__/comment_8_1e87a33fe71ec2d5f4df887b94dae7c6._comment create mode 100644 doc/todo/option_to_block_git_from_pushing_references_to_not-yet-saved_contents.mdwn create mode 100644 doc/todo/option_to_block_git_from_pushing_references_to_not-yet-saved_contents/comment_1_4e813660a7743ecc3378b87adb0cd0f8._comment create mode 100644 doc/todo/option_to_block_git_from_pushing_references_to_not-yet-saved_contents/comment_2_8aec191966e5633ae6b1b008f8990d3e._comment create mode 100644 doc/todo/option_to_block_git_from_pushing_references_to_not-yet-saved_contents/comment_3_7337c487d7118e0bfdf931a741f3d5a4._comment create mode 100644 doc/todo/option_to_explain.mdwn create mode 100644 doc/todo/option_to_explain/comment_1_81644886e14851a276dc3c89965df62e._comment create mode 100644 doc/todo/option_to_explain/comment_2_71616074104ab70eb76ad5edb9207b5c._comment create mode 100644 doc/todo/option_to_explain/comment_3_2179a7fec079045d82a58993d3f09995._comment create mode 100644 doc/todo/option_to_explain/comment_4_28919c6f816f11811b1e8c73b07403f7._comment create mode 100644 doc/todo/option_to_individually_hash_chunks.mdwn create mode 100644 doc/todo/option_to_individually_hash_chunks/comment_1_c6d5133efb3ddc9ac632530600257bdf._comment create mode 100644 doc/todo/option_to_individually_hash_chunks/comment_2_29821c673e5e8ce88c62086a67346357._comment create mode 100644 doc/todo/option_to_individually_hash_chunks/comment_3_3cd814797e837fae3dba8d6d99f41ec1._comment create mode 100644 doc/todo/option_to_individually_hash_chunks/comment_4_b2a78d90e7e2ee8a98f12663c9e1041a._comment create mode 100644 doc/todo/option_to_limit_to_files_that_are_expected_to_be_present.mdwn create mode 100644 doc/todo/option_to_put_temp_files_on_a_RAM_disk.mdwn create mode 100644 doc/todo/option_to_put_temp_files_on_a_RAM_disk/comment_1_28a5627604d2d4b25c51779a7216931d._comment create mode 100644 doc/todo/option_to_put_temp_files_on_a_RAM_disk/comment_2_1df752ac3b9cb2cc0e4a7dd4af71897f._comment create mode 100644 doc/todo/option_to_put_temp_files_on_a_RAM_disk/comment_3_12a1b6f9fd616f5c498d5aff1cf1bcb6._comment create mode 100644 doc/todo/option_to_put_temp_files_on_a_RAM_disk/comment_4_8c6aa3f5aee359f2f161b6664cdb5c32._comment create mode 100644 doc/todo/output_of_wanted___40__and_possibly_group_etc__41___should_not_be_polluted_with___34__informational__34___messages.mdwn create mode 100644 doc/todo/output_of_wanted___40__and_possibly_group_etc__41___should_not_be_polluted_with___34__informational__34___messages/comment_1_bfbf428da46eaea52cc54878f119512a._comment create mode 100644 doc/todo/output_of_wanted___40__and_possibly_group_etc__41___should_not_be_polluted_with___34__informational__34___messages/comment_2_c43e838b750448fe4d1519e72c43242f._comment create mode 100644 doc/todo/output_of_wanted___40__and_possibly_group_etc__41___should_not_be_polluted_with___34__informational__34___messages/comment_3_e006b8efab713d4965316c9846ec437c._comment create mode 100644 doc/todo/parallel_get.mdwn create mode 100644 doc/todo/patch_generation_with_annexed_files.mdwn create mode 100644 doc/todo/preserve_file_extensions_in_WORM_and_URL_keys.mdwn create mode 100644 doc/todo/preserve_file_extensions_in_WORM_and_URL_keys/comment_1_3cf91bca8e01f98644b0d25a45ecf092._comment create mode 100644 doc/todo/prevent_directly_printing_to_stderr_error_from_an_attempt_to_download_remote___47__config_file.mdwn create mode 100644 doc/todo/prevent_pulling_unlocked_files_using_all_disk_space_by_default.mdwn create mode 100644 doc/todo/provide___39__file__39___in_--json-progress_record_for_addurl.mdwn create mode 100644 doc/todo/provide_machine_readable___40__--json__63____41___version_of_initremote_--whatelse.mdwn create mode 100644 doc/todo/provide_machine_readable___40__--json__63____41___version_of_initremote_--whatelse/comment_1_5ed9864ef616d9e9b77a3d62561363fd._comment create mode 100644 doc/todo/provide_machine_readable___40__--json__63____41___version_of_initremote_--whatelse/comment_2_e9647b34aa79c414faf0f57ba17e6af4._comment create mode 100644 doc/todo/provide_windows_build_with_MagicMime.mdwn create mode 100644 doc/todo/provide_windows_build_with_MagicMime/comment_1_11adb1623314e8a43c50704c5e6e62d4._comment create mode 100644 doc/todo/provide_windows_build_with_MagicMime/comment_2_8f2d350c853f8827e1d5f95897dc2bd8._comment create mode 100644 doc/todo/provide_windows_build_with_MagicMime/comment_3_15509110c5900aee2cc977372da16f0b._comment create mode 100644 doc/todo/provide_windows_build_with_MagicMime/comment_4_4727291eefa07a40da13dace75a2e255._comment create mode 100644 doc/todo/provide_windows_build_with_MagicMime/comment_5_4633d2a40bca1ba8fa93f7038569715f._comment create mode 100644 doc/todo/provide_windows_build_with_MagicMime/comment_6_5542a421c6c7c878394d7dd7a3bce9c1._comment create mode 100644 doc/todo/provide_windows_build_with_MagicMime/comment_7_d16e4fb3d0be2acd23d158272171b842._comment create mode 100644 doc/todo/proving_preferred_content_behavior.mdwn create mode 100644 doc/todo/publicurl_config_for_all_special_remotes.mdwn create mode 100644 doc/todo/publicurl_config_for_all_special_remotes/comment_1_58b2ec259bd3d9e368240e459330a738._comment create mode 100644 doc/todo/publicurl_config_for_all_special_remotes/comment_2_d9933855e8521ebed00406a6350837b7._comment create mode 100644 doc/todo/publicurl_config_for_all_special_remotes/comment_3_42ac954b120205650a2a5f03872085c2._comment create mode 100644 doc/todo/publicurl_config_for_all_special_remotes/comment_4_3c144c0323d49f7ca2d6b9971ad3160a._comment create mode 100644 doc/todo/publicurl_config_for_all_special_remotes/comment_5_1d9186506f8f44415706f3b4394c9008._comment create mode 100644 doc/todo/publicurl_config_for_all_special_remotes/comment_6_7f027aa4b5b495a93aee3cd3417862a8._comment create mode 100644 doc/todo/publicurl_config_for_all_special_remotes/comment_7_c35df3621c7b6a1b518787fdc8967ee7._comment create mode 100644 doc/todo/read-only_removable_drives.mdwn create mode 100644 doc/todo/read-only_removable_drives/comment_1_979455e3694ae2403134ed6fa2add2fa._comment create mode 100644 doc/todo/read-only_removable_drives/comment_2_08fced29b86b21f63bb0868747227e08._comment create mode 100644 doc/todo/read-only_removable_drives/comment_3_2675e211c7bd248b7f7c1bbc6fd46679._comment create mode 100644 doc/todo/read-only_removable_drives/comment_4_9e9bc6dd5fa8c4cf7f2511b771bd1bc7._comment create mode 100644 doc/todo/read-only_removable_drives/comment_5_a693c5744bfc6c33f5605aa9d9c0bfe0._comment create mode 100644 doc/todo/read-only_removable_drives/comment_6_737e3d315f29a4fc61597ce4f9ec6206._comment create mode 100644 doc/todo/read-only_removable_drives/comment_7_16c8652d38ae57db4ed1860a4733a18b._comment create mode 100644 doc/todo/read-only_removable_drives/comment_8_a802e0617c9ef72eb8d3842de99e44ae._comment create mode 100644 doc/todo/record_ETag_when_using_addurl_--fast.mdwn create mode 100644 doc/todo/record_ETag_when_using_addurl_--fast/comment_1_cf15e943ba9405240aecc3dc83b4ef08._comment create mode 100644 doc/todo/registerurl_--remote_REMOTE.mdwn create mode 100644 doc/todo/registerurl_--remote_REMOTE/comment_1_9d99569edd7ee8331626ec9fffeaa1b7._comment create mode 100644 doc/todo/registerurl_--remote_REMOTE/comment_2_59f6ff108c40b4597a7a870fafdaabc2._comment create mode 100644 doc/todo/registerurl_--remote_REMOTE/comment_3_70244d4f7f81b6799cd541ad14b38ee0._comment create mode 100644 doc/todo/registerurl_--remote_REMOTE/comment_4_334ce2eb815d6d8489f9cb00c09b0bd7._comment create mode 100644 doc/todo/registerurl__58___do_changes_in_journal___34__in_place__34____63__.mdwn create mode 100644 doc/todo/registerurl__58___do_changes_in_journal___34__in_place__34____63__/comment_10_0de07ff7054e7d71a6cf1d08051664f9._comment create mode 100644 doc/todo/registerurl__58___do_changes_in_journal___34__in_place__34____63__/comment_11_b41f6266e341ec05586e6ec32b6cf68a._comment create mode 100644 doc/todo/registerurl__58___do_changes_in_journal___34__in_place__34____63__/comment_12_3994a27f274ef2025300291ff1bce8bb._comment create mode 100644 doc/todo/registerurl__58___do_changes_in_journal___34__in_place__34____63__/comment_13_0154b05e0b0edccd8e69657501938d92._comment create mode 100644 doc/todo/registerurl__58___do_changes_in_journal___34__in_place__34____63__/comment_14_aafc89e24d5640dad3b8f6134c1ac26b._comment create mode 100644 doc/todo/registerurl__58___do_changes_in_journal___34__in_place__34____63__/comment_15_41ba5600367f6893e8ed0bf01be3d539._comment create mode 100644 doc/todo/registerurl__58___do_changes_in_journal___34__in_place__34____63__/comment_15_b120af2367cc3667934c088b496331f6._comment create mode 100644 doc/todo/registerurl__58___do_changes_in_journal___34__in_place__34____63__/comment_17_fe41f306edfb0ae608dfb3a8f153bcbf._comment create mode 100644 doc/todo/registerurl__58___do_changes_in_journal___34__in_place__34____63__/comment_18_6b4df9d81c523e090b83c56bfdce373a._comment create mode 100644 doc/todo/registerurl__58___do_changes_in_journal___34__in_place__34____63__/comment_19_b23a39f88879b3c770e112f9e82c4607._comment create mode 100644 doc/todo/registerurl__58___do_changes_in_journal___34__in_place__34____63__/comment_1_98cd9e5dd449cbd834f53d97fd5dfc13._comment create mode 100644 doc/todo/registerurl__58___do_changes_in_journal___34__in_place__34____63__/comment_20_532690bc7b9707aa053814c3e84b1dca._comment create mode 100644 doc/todo/registerurl__58___do_changes_in_journal___34__in_place__34____63__/comment_20_fc54794546e8e14b31aa063d93c328de._comment create mode 100644 doc/todo/registerurl__58___do_changes_in_journal___34__in_place__34____63__/comment_21_953eaa6ca651597897a6c6ad7a259d1d._comment create mode 100644 doc/todo/registerurl__58___do_changes_in_journal___34__in_place__34____63__/comment_23_4b576c9c33ff2a322cd832027484606b._comment create mode 100644 doc/todo/registerurl__58___do_changes_in_journal___34__in_place__34____63__/comment_24_fb760c2566b6f37ed7378bbcca5875c5._comment create mode 100644 doc/todo/registerurl__58___do_changes_in_journal___34__in_place__34____63__/comment_25_148392f465864f19593de0b1aa56f7f8._comment create mode 100644 doc/todo/registerurl__58___do_changes_in_journal___34__in_place__34____63__/comment_2_a4fce84f5777ed582fa599778835455f._comment create mode 100644 doc/todo/registerurl__58___do_changes_in_journal___34__in_place__34____63__/comment_3_56c313fdcb88e95abaa10647678bc108._comment create mode 100644 doc/todo/registerurl__58___do_changes_in_journal___34__in_place__34____63__/comment_4_13c0eecd57ea56bb1e21e130d7343778._comment create mode 100644 doc/todo/registerurl__58___do_changes_in_journal___34__in_place__34____63__/comment_4_52a1fe104856968488b386b701c4a4bd._comment create mode 100644 doc/todo/registerurl__58___do_changes_in_journal___34__in_place__34____63__/comment_6_29a487203bf620e44c3e9db2d22f5ee3._comment create mode 100644 doc/todo/registerurl__58___do_changes_in_journal___34__in_place__34____63__/comment_7_6bf718a1c6185b6aed0b6d0d5c4c9cf8._comment create mode 100644 doc/todo/registerurl__58___do_changes_in_journal___34__in_place__34____63__/comment_8_e041fcd11c50d47eada124368a5bb7b5._comment create mode 100644 doc/todo/registerurl__58___do_changes_in_journal___34__in_place__34____63__/comment_9_dd5a1bdc1cc3ecd6ac68cc83fb2195ed._comment create mode 100644 doc/todo/reinit_current_repo_to_new_uuid.mdwn create mode 100644 doc/todo/reinit_current_repo_to_new_uuid/comment_1_2274082a0d130127eb2fcc12e3404d08._comment create mode 100644 doc/todo/reinit_current_repo_to_new_uuid/comment_2_d7f2a6de08a3559a1d76ae8aba5a6702._comment create mode 100644 doc/todo/reinit_current_repo_to_new_uuid/comment_3_94434f7e76df4a25d922eed28ca6b559._comment create mode 100644 doc/todo/reinit_current_repo_to_new_uuid/comment_4_9d2b98c15d78781f943f0f2ddf775706._comment create mode 100644 doc/todo/remote-ready-command.mdwn create mode 100644 doc/todo/remote-ready-command/comment_1_55cbea73adb94e85fc2e2252d6f2f03c._comment create mode 100644 doc/todo/remote-ready-command/comment_2_0e79b93a9c614a259b9a7d7c1f6cb6dc._comment create mode 100644 doc/todo/remove_legacy_import_directory_interface.mdwn create mode 100644 doc/todo/remove_legacy_import_directory_interface/comment_1_335ab41b3539f605ace1830577794913._comment create mode 100644 doc/todo/report_PID___40__and_may_be_failure_details__63____41___in___34__process_done__34___debug_messages.mdwn create mode 100644 doc/todo/report_PID___40__and_may_be_failure_details__63____41___in___34__process_done__34___debug_messages/comment_1_3b069234f20378fc231802c594eb213d._comment create mode 100644 doc/todo/repositories_that_count_as_more_than_one_copy.mdwn create mode 100644 doc/todo/repositories_that_count_as_more_than_one_copy/comment_1_cc1ea7d1c6aac3749b4ecd789594e3f9._comment create mode 100644 doc/todo/required_content.mdwn create mode 100644 doc/todo/required_content/comment_1_42620a3c958666be2a0d5f5b8eadf7b4._comment create mode 100644 doc/todo/required_content/comment_2_132ec6378db63af6281569cf5748b9d3._comment create mode 100644 doc/todo/required_content/comment_3_b16a8e8b45ceee887c8c0167b7859654._comment create mode 100644 doc/todo/restore_original_environment_when_running_external_special_remotes_from_standalone_git-annex__63__.mdwn create mode 100644 doc/todo/restore_original_environment_when_running_external_special_remotes_from_standalone_git-annex__63__/comment_1_8a59da3012b9d177b4baa72610b72fc9._comment create mode 100644 doc/todo/restore_original_environment_when_running_external_special_remotes_from_standalone_git-annex__63__/comment_2_96f1138462fecac628751d872e2ceb9e._comment create mode 100644 doc/todo/return___34__key__34___entry_in_--json_output_for_addurl___40__and_future_add__41___--batch.mdwn create mode 100644 doc/todo/reuse_desktop_notifications.mdwn create mode 100644 doc/todo/reuse_desktop_notifications/comment_1_6193ed5a4ad0a908af82da33d14bd654._comment create mode 100644 doc/todo/reuse_desktop_notifications/comment_2_3fb10a432a57ce14cb7bc2946467ab22._comment create mode 100644 doc/todo/reuse_desktop_notifications/comment_3_ac0e5f437b5d2677e916224d6dfaf666._comment create mode 100644 doc/todo/setpresentkey_option_to_record_chunked_state.mdwn create mode 100644 doc/todo/setpresentkey_option_to_record_chunked_state/comment_1_99bf00b8f78d75888dc7bc69d36cd112._comment create mode 100644 doc/todo/setpresentkey_option_to_record_chunked_state/comment_2_42e9309fff6a71c1a0a625dd2bc6aae2._comment create mode 100644 doc/todo/setpresentkey_option_to_record_chunked_state/comment_3_97ed902a268ebad53f534dd48a6f5fc9._comment create mode 100644 doc/todo/sharedRepository_mode_not_supported_by_git-annex.mdwn create mode 100644 doc/todo/sharedRepository_mode_not_supported_by_git-annex/comment_1_b219d62cd7d21002ae73d0dbd4b792be._comment create mode 100644 doc/todo/sharedRepository_mode_not_supported_by_git-annex/comment_2_7140ad0abbb54f5a4e20b165a08793e2._comment create mode 100644 doc/todo/sharedRepository_mode_not_supported_by_git-annex/comment_3_c3dff87829e3f055881829eb4598f903._comment create mode 100644 doc/todo/shorten_git-annex_manpage.mdwn create mode 100644 doc/todo/shorten_git-annex_manpage/comment_1_4b82eb4af9b923b23c6ecd8d355c0651._comment create mode 100644 doc/todo/shorten_git-annex_manpage/comment_2_859444d7e2826ac4448b0ba0f716328f._comment create mode 100644 doc/todo/shorten_git-annex_manpage/comment_3_3543a2edda668c3f0a90c46aeee94812._comment create mode 100644 doc/todo/shorten_git-annex_manpage/comment_4_fa6c2870f4a83d0f5680b76b05009e4b._comment create mode 100644 doc/todo/shorter_keys_through_better_encoding.mdwn create mode 100644 doc/todo/shorter_keys_through_better_encoding/comment_1_4bd588a3cdca5cb94132549b7d78e6af._comment create mode 100644 doc/todo/shorter_keys_through_better_encoding/comment_2_454cb3b2b1102ce4da18f245bc583e7c._comment create mode 100644 doc/todo/shorter_keys_through_better_encoding/comment_3_9f5f16a7ab5d3e28cdddc333d97b87ea._comment create mode 100644 doc/todo/shorter_keys_through_better_encoding/comment_4_720012572e1d748bc628fdb17a55a3bd._comment create mode 100644 doc/todo/shorter_keys_through_better_encoding/comment_5_41857b7f25f8a922640378a41574b84d._comment create mode 100644 doc/todo/shorter_keys_through_better_encoding/comment_6_de3f0be0f6b560ca7bb66f7b5c8f0592._comment create mode 100644 doc/todo/shorter_keys_through_better_encoding/comment_7_d499c66c9a1981bb14d0ce63f4983ea5._comment create mode 100644 doc/todo/shorter_keys_through_better_encoding/comment_8_5592ac9d1887183daf3173a0c27b672f._comment create mode 100644 doc/todo/shorter_keys_through_better_encoding/comment_9_75f611c63bf1e9c8b4885fea8e9d467f._comment create mode 100644 doc/todo/show_dead_in_info___40__behind_option__63____41__.mdwn create mode 100644 doc/todo/show_dead_in_info___40__behind_option__63____41__/comment_1_74c3bbb7819368a894ff1189988e4cd3._comment create mode 100644 doc/todo/show_dead_in_info___40__behind_option__63____41__/comment_2_0cc7a3c53ffbabcb13807956541d83ec._comment create mode 100644 doc/todo/show_me_where_unused_file_was__44___i_can_wait.mdwn create mode 100644 doc/todo/show_me_where_unused_file_was__44___i_can_wait/comment_1_732f726f72f2540372d434974fda60f2._comment create mode 100644 doc/todo/show_readonly_removable_drives_in_the_webapp.mdwn create mode 100644 doc/todo/show_readonly_removable_drives_in_the_webapp/comment_1_c41140289f9b062e96cfd5d9d5382155._comment create mode 100644 doc/todo/show_readonly_removable_drives_in_the_webapp/comment_2_b9236ea884a2934dd0c8e511a80f4fda._comment create mode 100644 doc/todo/show_time_of_last_interaction_with_a_repo.mdwn create mode 100644 doc/todo/show_time_of_last_interaction_with_a_repo/comment_1_4ec9597df62dc4a2f7320f13f6a0ee8e._comment create mode 100644 doc/todo/show_time_of_last_interaction_with_a_repo/comment_1_997d9968782f7fd96d9edd9c380a3ee9._comment create mode 100644 doc/todo/simpler__44___trusted_export_remotes.mdwn create mode 100644 doc/todo/simpler__44___trusted_export_remotes/comment_1_cc6a862519677ea18f78d24f40a48be1._comment create mode 100644 doc/todo/simpler__44___trusted_export_remotes/comment_2_5528a5dd5f8d7746b175552a077ba313._comment create mode 100644 doc/todo/simpler__44___trusted_export_remotes/comment_3_3e7be2ba92559a767ea09b764daef2db._comment create mode 100644 doc/todo/simpler__44___trusted_export_remotes/comment_4_be525962211e8c4da681279aba132c71._comment create mode 100644 doc/todo/simpler__44___trusted_export_remotes/comment_5_aeefb4803340ff993a1d6673c8e5e97b._comment create mode 100644 doc/todo/simpler__44___trusted_export_remotes/comment_6_0d27b08792112cbee7a368bc94044bb4._comment create mode 100644 doc/todo/some_way_to_get_a_list_of_options_for_a_special_remote_of_a_given_type.mdwn create mode 100644 doc/todo/some_way_to_get_a_list_of_options_for_a_special_remote_of_a_given_type/comment_1_8ea993d1acc92f3aa9594ed8e2d3ec7d._comment create mode 100644 doc/todo/some_way_to_get_a_list_of_options_for_a_special_remote_of_a_given_type/comment_2_96fae68472f7f9ef720c27149556f7a0._comment create mode 100644 doc/todo/some_way_to_get_a_list_of_options_for_a_special_remote_of_a_given_type/comment_3_b75ffc63f0e9a85c3d1f01bdce21c97c._comment create mode 100644 doc/todo/specify_gitconfig_for_test_suite.mdwn create mode 100644 doc/todo/speculate-can-get___58___extension_of_speculate-present.mdwn create mode 100644 doc/todo/speculate-can-get___58___extension_of_speculate-present/comment_1_264538d1cbf07254a2857ca4cf40e9ac._comment create mode 100644 doc/todo/speculate-can-get___58___extension_of_speculate-present/comment_2_93450de83c4843f6828e971a948d12e3._comment create mode 100644 doc/todo/speculate-can-get___58___extension_of_speculate-present/comment_3_272d66c3549892687879ef20e0cd9cf1._comment create mode 100644 doc/todo/speculate-can-get___58___extension_of_speculate-present/comment_4_8627a8073fe0b4c144f26d32626e0c1b._comment create mode 100644 doc/todo/speed_up_VURL_by_avoiding_redundant_hashing.mdwn create mode 100644 doc/todo/speed_up___34__standalone_build__34___and__47__or_tests.mdwn create mode 100644 doc/todo/speed_up___34__standalone_build__34___and__47__or_tests/comment_10_0e070bc39eb0b8d9cf307af8a06504dc._comment create mode 100644 doc/todo/speed_up___34__standalone_build__34___and__47__or_tests/comment_1_41749c4c9b317a58e02df99f748844a1._comment create mode 100644 doc/todo/speed_up___34__standalone_build__34___and__47__or_tests/comment_2_f462ee4719b4c459c12e36ce29ab82b5._comment create mode 100644 doc/todo/speed_up___34__standalone_build__34___and__47__or_tests/comment_3_dfd20b6c6a49c99243945a267e041d58._comment create mode 100644 doc/todo/speed_up___34__standalone_build__34___and__47__or_tests/comment_4_650e5dd2471cdfd0223d712771067d55._comment create mode 100644 doc/todo/speed_up___34__standalone_build__34___and__47__or_tests/comment_5_0ee51fffee1f591173418212919bcd30._comment create mode 100644 doc/todo/speed_up___34__standalone_build__34___and__47__or_tests/comment_6_b4aecfd9f1b7f0e16d5f1dcb3c16af3e._comment create mode 100644 doc/todo/speed_up___34__standalone_build__34___and__47__or_tests/comment_7_e11ae8ba6dd6e6c53891db954d28bfff._comment create mode 100644 doc/todo/speed_up___34__standalone_build__34___and__47__or_tests/comment_8_b06360071e05df18b895322382357b61._comment create mode 100644 doc/todo/speed_up___34__standalone_build__34___and__47__or_tests/comment_9_2253c6916a1c6e4f1393b8656617aa10._comment create mode 100644 doc/todo/speed_up_annex.adjustedbranchrefresh.mdwn create mode 100644 doc/todo/speed_up_drop_on___34__heavy__34___repo.mdwn create mode 100644 doc/todo/speed_up_drop_on___34__heavy__34___repo/comment_1_5c92b3e7c2fc0e8a8e943690c1806322._comment create mode 100644 doc/todo/speed_up_drop_on___34__heavy__34___repo/comment_2_a5587ebc2a406d52855868cdeb39b83e._comment create mode 100644 doc/todo/speed_up_import_tree.mdwn create mode 100644 doc/todo/speed_up_import_tree_with_many_excluded_files.mdwn create mode 100644 doc/todo/ssh_special_remote.mdwn create mode 100644 doc/todo/stalldetection_for_import_and_export.mdwn create mode 100644 doc/todo/standlone__58___growing_number_of_libpcre.so_lookups.mdwn create mode 100644 doc/todo/standlone__58___growing_number_of_libpcre.so_lookups/comment_1_ef6645a9b6d69a652cd042185c864677._comment create mode 100644 doc/todo/standlone__58___growing_number_of_libpcre.so_lookups/comment_2_181175a281f3a4298341d109064eeff8._comment create mode 100644 doc/todo/standlone__58___growing_number_of_libpcre.so_lookups/comment_3_0358f9e216271ba0be8684eea4a3e1d1._comment create mode 100644 doc/todo/standlone__58___growing_number_of_libpcre.so_lookups/comment_3_5e3c73faeaefee8f0ec1227c672f2be5._comment create mode 100644 doc/todo/standlone__58___growing_number_of_libpcre.so_lookups/comment_4_91ab4b860a074c90e5cbeb03e3515ad4._comment create mode 100644 doc/todo/standlone__58___growing_number_of_libpcre.so_lookups/comment_6_2e435cc8fe61c7ca7c59f2a63fbbee20._comment create mode 100644 doc/todo/stop_after_these_files.mdwn create mode 100644 doc/todo/support___126____47__.netrc_for_http_access_authentication_specs_as_was_done_when_wget_was_used.mdwn create mode 100644 doc/todo/support___126____47__.netrc_for_http_access_authentication_specs_as_was_done_when_wget_was_used/comment_1_0f2f5b58020879252d716930f2396b81._comment create mode 100644 doc/todo/support_for_storing_xattrs.mdwn create mode 100644 doc/todo/support_for_storing_xattrs/comment_1_55c839d1b8af5150a5df29f0314e4b79._comment create mode 100644 doc/todo/support_for_storing_xattrs/comment_2_c10f87259aef110510014ba16d0792ad._comment create mode 100644 doc/todo/support_macOS__39___cp_-c___40__cp_--reflink_equivalent__41__.mdwn create mode 100644 doc/todo/support_macOS__39___cp_-c___40__cp_--reflink_equivalent__41__/comment_10_d94d813bdd6bea17347c87597788aec7._comment create mode 100644 doc/todo/support_macOS__39___cp_-c___40__cp_--reflink_equivalent__41__/comment_11_e5b9898f69fa9143519e58378ac668f8._comment create mode 100644 doc/todo/support_macOS__39___cp_-c___40__cp_--reflink_equivalent__41__/comment_12_9fd59c3ec54d54790050eb8860964783._comment create mode 100644 doc/todo/support_macOS__39___cp_-c___40__cp_--reflink_equivalent__41__/comment_1_1b23963d04c5bd53d3de09970816fad8._comment create mode 100644 doc/todo/support_macOS__39___cp_-c___40__cp_--reflink_equivalent__41__/comment_2_e506d7b173bd04ad7f32db52dcc1ea03._comment create mode 100644 doc/todo/support_macOS__39___cp_-c___40__cp_--reflink_equivalent__41__/comment_3_d812c6dbd672e3dcdeb5c87806dcef91._comment create mode 100644 doc/todo/support_macOS__39___cp_-c___40__cp_--reflink_equivalent__41__/comment_4_8fbd3cdc5a077cbd51d41db30c19a005._comment create mode 100644 doc/todo/support_macOS__39___cp_-c___40__cp_--reflink_equivalent__41__/comment_5_4580926755ee2802c80baa9f9bcc0661._comment create mode 100644 doc/todo/support_macOS__39___cp_-c___40__cp_--reflink_equivalent__41__/comment_6_bd610770eff9ef1eb68085e28c1175fa._comment create mode 100644 doc/todo/support_macOS__39___cp_-c___40__cp_--reflink_equivalent__41__/comment_7_f09b99a17d52a55e609bb3ca02db781a._comment create mode 100644 doc/todo/support_macOS__39___cp_-c___40__cp_--reflink_equivalent__41__/comment_8_f1c3cf11cddb9e5c7747e5824cd4b608._comment create mode 100644 doc/todo/support_macOS__39___cp_-c___40__cp_--reflink_equivalent__41__/comment_9_5097e4ac096d1b0b9c06c544b9217e22._comment create mode 100644 doc/todo/support_ssh__58____47____47___or_sftp__58____47____47___urls_via___34__built-in__34___ssh_support.mdwn create mode 100644 doc/todo/support_ssh__58____47____47___or_sftp__58____47____47___urls_via___34__built-in__34___ssh_support/comment_1_7932fd28b14898a0b4846856a27405b8._comment create mode 100644 doc/todo/support_ssh__58____47____47___or_sftp__58____47____47___urls_via___34__built-in__34___ssh_support/comment_2_048a8f7b52a0baf4c0abbae37de00257._comment create mode 100644 doc/todo/support_ssh__58____47____47___or_sftp__58____47____47___urls_via___34__built-in__34___ssh_support/comment_3_04be2f010aeb792e070f1ff93435fabc._comment create mode 100644 doc/todo/support_using_Stateless_OpenPGP_instead_of_gpg.mdwn create mode 100644 doc/todo/symlinks_to_symlinks_to_the_annex.mdwn create mode 100644 doc/todo/symlinks_to_symlinks_to_the_annex/comment_1_54bae401b8de13c9973ef5e6d2cf7e88._comment create mode 100644 doc/todo/symlinks_to_symlinks_to_the_annex/comment_2_f5c08ecd3b0b4099186d78c85b7f1e6f._comment create mode 100644 doc/todo/symlinks_to_symlinks_to_the_annex/comment_3_409de39da33b7ecfe5b8c7b2e866225e._comment create mode 100644 doc/todo/symlinks_to_symlinks_to_the_annex/comment_4_818c85d1a199d40daca7371fefb18bc3._comment create mode 100644 doc/todo/symlinks_to_symlinks_to_the_annex/comment_5_94b84cd27c36d14dc16837484d232d72._comment create mode 100644 doc/todo/sync_--branches__to_sync_only_specified_branches___40__e.g._git-annex__41__.mdwn create mode 100644 doc/todo/sync_--branches__to_sync_only_specified_branches___40__e.g._git-annex__41__/comment_10_06fd59c8bdd451b5608e1e0191f4d5cb._comment create mode 100644 doc/todo/sync_--branches__to_sync_only_specified_branches___40__e.g._git-annex__41__/comment_11_436fd00970867a8bb0806a753ac24963._comment create mode 100644 doc/todo/sync_--branches__to_sync_only_specified_branches___40__e.g._git-annex__41__/comment_12_2e768899c332cacffcb1fa6edb195325._comment create mode 100644 doc/todo/sync_--branches__to_sync_only_specified_branches___40__e.g._git-annex__41__/comment_1_741720c1b65fff2f8ecb87abbcf16223._comment create mode 100644 doc/todo/sync_--branches__to_sync_only_specified_branches___40__e.g._git-annex__41__/comment_2_73bd5d343286f61c9ac753ed3b00c149._comment create mode 100644 doc/todo/sync_--branches__to_sync_only_specified_branches___40__e.g._git-annex__41__/comment_3_bab52f2fd4f66cac6a178cdd9ef71c6d._comment create mode 100644 doc/todo/sync_--branches__to_sync_only_specified_branches___40__e.g._git-annex__41__/comment_4_a765e998ffaecc2af681947263cd80d7._comment create mode 100644 doc/todo/sync_--branches__to_sync_only_specified_branches___40__e.g._git-annex__41__/comment_5_8f19d38c815dd3051004301a15657cf6._comment create mode 100644 doc/todo/sync_--branches__to_sync_only_specified_branches___40__e.g._git-annex__41__/comment_6_15e336ea35f0233e22f7c5b656b616d2._comment create mode 100644 doc/todo/sync_--branches__to_sync_only_specified_branches___40__e.g._git-annex__41__/comment_7_757f97ac10035ec6b28720c0570b19f0._comment create mode 100644 doc/todo/sync_--branches__to_sync_only_specified_branches___40__e.g._git-annex__41__/comment_8_6c683fcba5d69a4c0051eb42b8c558a0._comment create mode 100644 doc/todo/sync_--branches__to_sync_only_specified_branches___40__e.g._git-annex__41__/comment_9_5bef9faa4df40b84c991b9ea5e1ab7a3._comment create mode 100644 doc/todo/syncthing_special_remote.mdwn create mode 100644 doc/todo/tahoe_lfs_for_reals.mdwn create mode 100644 doc/todo/tahoe_lfs_for_reals/comment_1_0a4793ce6a867638f6e510e71dd4bb44._comment create mode 100644 doc/todo/tahoe_lfs_for_reals/comment_2_80b9e848edfdc7be21baab7d0cef0e3a._comment create mode 100644 doc/todo/terminal_escapes_in_filenames.mdwn create mode 100644 doc/todo/test_suite_unsafe_use_of_setEnv.mdwn create mode 100644 doc/todo/the_same_path_looked_up_3_times_for_libpcre__42__.so.mdwn create mode 100644 doc/todo/the_same_path_looked_up_3_times_for_libpcre__42__.so/comment_1_35e85e3088c4453751ebffb7357a9f9b._comment create mode 100644 doc/todo/the_same_path_looked_up_3_times_for_libpcre__42__.so/comment_2_61d70f4a06edaa593a17d47019be53de._comment create mode 100644 doc/todo/the_same_path_looked_up_3_times_for_libpcre__42__.so/comment_3_89701d7011c3c9085afaab33aa16c39f._comment create mode 100644 doc/todo/timeout_support_for_importfeed.mdwn create mode 100644 doc/todo/to_and_from_multiple_remotes.mdwn create mode 100644 doc/todo/to_and_from_multiple_remotes/comment_1_2c055c3f55e0796b6842df8c2733726b._comment create mode 100644 doc/todo/tolerate_intermittent_errors_upon___34__export__34_____40__and_probably_copy__41___to_S3.mdwn create mode 100644 doc/todo/tolerate_intermittent_errors_upon___34__export__34_____40__and_probably_copy__41___to_S3/comment_1_42256576a4b5e8312b12e785fbc8fb1f._comment create mode 100644 doc/todo/tolerate_intermittent_errors_upon___34__export__34_____40__and_probably_copy__41___to_S3/comment_2_6b655d30bf07518f33ec42cdeabef4ef._comment create mode 100644 doc/todo/tolerate_intermittent_errors_upon___34__export__34_____40__and_probably_copy__41___to_S3/comment_3_fb3e0585f6700050db7a06e27d8e1099._comment create mode 100644 doc/todo/tor.mdwn create mode 100644 doc/todo/track_free_space_in_repos_via_git-annex_branch.mdwn create mode 100644 doc/todo/tracking_changes_to_metadata.mdwn create mode 100644 doc/todo/tracking_changes_to_metadata/comment_1_825c15ba36324aad58faf643057b256a._comment create mode 100644 doc/todo/tracking_changes_to_metadata/comment_2_03a631beaa20a479f5016def7585d363._comment create mode 100644 doc/todo/tracking_changes_to_metadata/comment_3_a05652472c37c463eca22f11cf6596a4._comment create mode 100644 doc/todo/transitive_transfers.mdwn create mode 100644 doc/todo/transitive_transfers/comment_1_d244295696be5a8164db45f7fad1701a._comment create mode 100644 doc/todo/transitive_transfers/comment_2_7255f5083283b0ae7e7fc41e127bd829._comment create mode 100644 doc/todo/transitive_transfers/comment_3_e5c2ede203e7bdb5af8432df6c09268f._comment create mode 100644 doc/todo/transitive_transfers/comment_4_cb92e81c1ea00ca72f9a5ee729d627f4._comment create mode 100644 doc/todo/transitive_transfers/comment_5_50670cb52b29dc9c0c6c981e6f6d198b._comment create mode 100644 doc/todo/transitive_transfers/comment_6_ddef2f127a49c2eb8a15b5848756d888._comment create mode 100644 doc/todo/transitive_transfers/comment_7_6417ec94a5723776b6688ccbb0453ffc._comment create mode 100644 doc/todo/transitive_transfers/comment_8_7ffe073c582fc9392213ce52ba6ba398._comment create mode 100644 doc/todo/transitive_transfers/comment_9_6d5c2697bc985627199e425962f23189._comment create mode 100644 doc/todo/trust_based_on_time_since_last_fsck.mdwn create mode 100644 doc/todo/trust_based_on_time_since_last_fsck/comment_1_3805e8dd9e6dd986c097c6f1b78ab244._comment create mode 100644 doc/todo/trust_based_on_time_since_last_fsck/comment_2_ec1b87b389dc06440df04c9a719e0cbc._comment create mode 100644 doc/todo/trust_based_on_time_since_last_fsck/comment_3_23f37b9d8b877b829e34e6c8ea6b40c4._comment create mode 100644 doc/todo/trust_based_on_time_since_last_fsck/comment_4_29729772f7600dfb459e3be9cf2c43ea._comment create mode 100644 doc/todo/trust_presence_info_for_specific_remotes_for_specified_time.mdwn create mode 100644 doc/todo/trust_presence_info_for_specific_remotes_for_specified_time/comment_1_96e12b8ecba4bacfbfa5c58025bedaab._comment create mode 100644 doc/todo/unify_adjust_with_view.mdwn create mode 100644 doc/todo/union_mounting.mdwn create mode 100644 doc/todo/union_mounting/comment_1_cb08435812dd7766de26199c73f38e8b._comment create mode 100644 doc/todo/union_mounting/comment_2_240b1736f6bd4fbf87c372d3a46e661b._comment create mode 100644 doc/todo/union_mounting/comment_3_cf0a0d4fbd929f24f7056115b2acb7de._comment create mode 100644 doc/todo/union_mounting/comment_4_2f02fe00a84bf94b7c8e437d8b80293f._comment create mode 100644 doc/todo/union_mounting/comment_5_58c38383a7ac2df843772960fa10204f._comment create mode 100644 doc/todo/union_mounting/comment_6_65055977d7c8db3c9c29d90e033e5bb4._comment create mode 100644 doc/todo/universal_batch_mode.mdwn create mode 100644 doc/todo/universal_batch_mode/comment_1_83264867c7f58d92148d1585e4361ee5._comment create mode 100644 doc/todo/universal_batch_mode/comment_2_c662c1e2410285e9bf6d01135851fdc8._comment create mode 100644 doc/todo/universal_batch_mode/comment_3_c8232195fa3db718dc2b246d528e6c00._comment create mode 100644 doc/todo/unlikely.mdwn create mode 100644 doc/todo/unlock_--json.mdwn create mode 100644 doc/todo/unlock_--json/comment_1_4cd41dca533de8147027eeb9a8ad89db._comment create mode 100644 doc/todo/unlock_--json/comment_2_f00fda45d300ce14a5ea6fd32a20defe._comment create mode 100644 doc/todo/unlock_--read-only.mdwn create mode 100644 doc/todo/unlock_--read-only/comment_10_c2a1f402a28c44f842d88747fa3741cc._comment create mode 100644 doc/todo/unlock_--read-only/comment_11_e8f1576e67d6368eb28aa89c30aaa34c._comment create mode 100644 doc/todo/unlock_--read-only/comment_1_19da9b33836df34b7d747039e6863586._comment create mode 100644 doc/todo/unlock_--read-only/comment_2_1658f775ef9340e65711512049085dd7._comment create mode 100644 doc/todo/unlock_--read-only/comment_3_305c1b867c38edf74cdff1638e5b1cfa._comment create mode 100644 doc/todo/unlock_--read-only/comment_4_515e21cf5c2dfbf9fd780af9cef2e726._comment create mode 100644 doc/todo/unlock_--read-only/comment_5_645bccbcd3499eb552a24563cb613af2._comment create mode 100644 doc/todo/unlock_--read-only/comment_6_eda5475b89536726ec29a831e2748f43._comment create mode 100644 doc/todo/unlock_--read-only/comment_7_3ea1a354bb631539df1ac941e76988e1._comment create mode 100644 doc/todo/unlock_--read-only/comment_8_c39e204047bd9a1999b69a433b22b16d._comment create mode 100644 doc/todo/unlock_--read-only/comment_9_82a8bfe07d78fc29d306fa5545e866a7._comment create mode 100644 doc/todo/unregisterurl_KEY_URL.mdwn create mode 100644 doc/todo/unregisterurl_KEY_URL/comment_1_9562b4583203b49ec68162f3a4816ad7._comment create mode 100644 doc/todo/unregisterurl_KEY_URL/comment_2_87ec9a2037eaa84011f7e7ecf43d31aa._comment create mode 100644 doc/todo/unregisterurl_KEY_URL/comment_3_22edc4e69a686511c76c7c7608da5793._comment create mode 100644 doc/todo/upload_large_chunks_without_buffering_in_memory.mdwn create mode 100644 doc/todo/use_git-mktree_rather_than_index_file.mdwn create mode 100644 doc/todo/use_systemd_credential_system_for_git-annex_credentials.mdwn create mode 100644 doc/todo/using_file_metadata_for_preferred___40__wanted__41___content.mdwn create mode 100644 doc/todo/using_file_metadata_for_preferred___40__wanted__41___content/comment_1_8c377382b772e4c2d0c1f981010b8d91._comment create mode 100644 doc/todo/v11_changes.mdwn create mode 100644 doc/todo/v9_changes.mdwn create mode 100644 doc/todo/verified_relaxed_urls.mdwn create mode 100644 doc/todo/warn_of_breaking_changes_same_way_git_does.mdwn create mode 100644 doc/todo/way_to_instruct_on_how_to_decide_on_extension__63__.mdwn create mode 100644 doc/todo/way_to_instruct_on_how_to_decide_on_extension__63__/comment_1_b3e9fcb09b6455301a5f7a9bf50a8a49._comment create mode 100644 doc/todo/way_to_untrust_without_unncessary_branch_update.mdwn create mode 100644 doc/todo/webapp__58___show_times_of_events.mdwn create mode 100644 doc/todo/webapp_export_remote_configuration_interface.mdwn create mode 100644 doc/todo/webapp_nudge_when_less_than_numcopies_clones.mdwn create mode 100644 doc/todo/webapp_ssh_setup_should_work_with_locked_down_git-annex-shell_account.mdwn create mode 100644 doc/todo/wherewas.mdwn create mode 100644 doc/todo/whishlist__58___GPG_alternatives_like_AGE.mdwn create mode 100644 doc/todo/whishlist__58___GPG_alternatives_like_AGE/comment_1_92a7d08946a3ed95d0f0413e6c6208ae._comment create mode 100644 doc/todo/whishlist__58___GPG_alternatives_like_AGE/comment_2_18ae790f59a9dbeda745e6f6f45384cb._comment create mode 100644 doc/todo/whishlist__58___GPG_alternatives_like_AGE/comment_3_09b89df28a3a3dab2f0fbf2f56feafe1._comment create mode 100644 doc/todo/whishlist__58___GPG_alternatives_like_AGE/comment_4_b9de19ba8382225ac8c65ee1ad8110a8._comment create mode 100644 doc/todo/whishlist__58___GPG_alternatives_like_AGE/comment_5_c81d61a221fd93eb25765998b67bbde7._comment create mode 100644 doc/todo/whishlist__58___GPG_alternatives_like_AGE/comment_6_991bf6846513818c00b75b7962b0fb2e._comment create mode 100644 doc/todo/whishlist__58___GPG_alternatives_like_AGE/comment_7_d86cf1376fbbd85e9ea63d7b7afbd1fc._comment create mode 100644 doc/todo/whishlist__58___GPG_alternatives_like_AGE/comment_8_d784886328bc00b2adaba2391776d2c8._comment create mode 100644 doc/todo/whishlist__58___GPG_alternatives_like_AGE/comment_9_18861f94b677a40c2d1c0014338231c6._comment create mode 100644 doc/todo/whishlist__58___kde-connect_as_a_transport.mdwn create mode 100644 doc/todo/whishlist__58___kde-connect_as_a_transport/comment_1_14426ad1fa5dfc32d290da484c1e4c7b._comment create mode 100644 doc/todo/windows__58___prepare_for_Win32_not_export_c__95___entities.mdwn create mode 100644 doc/todo/windows__58___prepare_for_Win32_not_export_c__95___entities/comment_1_40985c5919f20fd47fa57caec09bfa3c._comment create mode 100644 doc/todo/windows__58___prepare_for_Win32_not_export_c__95___entities/comment_2_1d9c331e774138ceb89b1f7920bb76d4._comment create mode 100644 doc/todo/windows__58___prepare_for_Win32_not_export_c__95___entities/comment_3_88b58dd27cbff3f046b6f8d1c612f87f._comment create mode 100644 doc/todo/windows__58___prepare_for_Win32_not_export_c__95___entities/comment_4_28e5593e0a58fb7d7a2a297fa63e8208._comment create mode 100644 doc/todo/windows__58___prepare_for_Win32_not_export_c__95___entities/comment_5_43603d84801cfe0ecfcdc408db97ae22._comment create mode 100644 doc/todo/windows__58___prepare_for_Win32_not_export_c__95___entities/comment_6_a623b2e131dd85f50e04483d262abc9a._comment create mode 100644 doc/todo/windows__58___prepare_for_Win32_not_export_c__95___entities/comment_7_91c17601eed0936bab17cdf9ec5f3ecb._comment create mode 100644 doc/todo/windows_support.mdwn create mode 100644 doc/todo/windows_support/comment_10_394127e34e07ab3dc0e7b94ee6898866._comment create mode 100644 doc/todo/windows_support/comment_11_c91eb7da8ee05064a5bc4a6e2203314b._comment create mode 100644 doc/todo/windows_support/comment_12_0775dc22516cfa8c5e7deea954084947._comment create mode 100644 doc/todo/windows_support/comment_13_4dfb65242280c2e28796f1ab8f022dea._comment create mode 100644 doc/todo/windows_support/comment_14_a8519b722cb94f9363d4a8a8bd40e942._comment create mode 100644 doc/todo/windows_support/comment_15_61d1281072de2bb418cf96fd8b563d45._comment create mode 100644 doc/todo/windows_support/comment_16_6bbcf900874e950b08cdf0410f7a75d2._comment create mode 100644 doc/todo/windows_support/comment_17_653b36e0838308dd85d38b05d3df5077._comment create mode 100644 doc/todo/windows_support/comment_18_fbd19cd8365808daa007f44ff167c635._comment create mode 100644 doc/todo/windows_support/comment_19_87e06eb2968856ce97b6162bc14203c1._comment create mode 100644 doc/todo/windows_support/comment_1_3cc26ad8101a22e95a8c60cf0c4dedcc._comment create mode 100644 doc/todo/windows_support/comment_20_7d83963db52d5dedd65f8cf7937dff4f._comment create mode 100644 doc/todo/windows_support/comment_21_49ef5997d36ade4797ef77b1b62f5405._comment create mode 100644 doc/todo/windows_support/comment_22_8e5b8ec9e6a63bcde7390511c92d2940._comment create mode 100644 doc/todo/windows_support/comment_23_616a7d579730e5a4f5cc314d6328bfd0._comment create mode 100644 doc/todo/windows_support/comment_24_f50de72a082476e0a2e7587368191788._comment create mode 100644 doc/todo/windows_support/comment_25_5eb1a4693db88a9e05500ad66edce61d._comment create mode 100644 doc/todo/windows_support/comment_26_99d0541d1c7f7c82a67d481c61209670._comment create mode 100644 doc/todo/windows_support/comment_2_8acae818ce468967499050bbe3c532ea._comment create mode 100644 doc/todo/windows_support/comment_3_bd0a12f4c9b884ab8a06082842381a01._comment create mode 100644 doc/todo/windows_support/comment_4_ad06b98b2ddac866ffee334e41fee6a8._comment create mode 100644 doc/todo/windows_support/comment_5_444fc7251f57db241b6e80abae41851c._comment create mode 100644 doc/todo/windows_support/comment_6_34f1f60b570c389bb1e741b990064a7e._comment create mode 100644 doc/todo/windows_support/comment_7_a5ca56c487257434650420acfa60e39f._comment create mode 100644 doc/todo/windows_support/comment_8_61214de7d967740d42905f3823ce2f65._comment create mode 100644 doc/todo/windows_support/comment_9_259a0b1a6f4d8d1944173380adc5e7c8._comment create mode 100644 doc/todo/wishlist__58___--dry-run_option_for_all_commands.mdwn create mode 100644 doc/todo/wishlist__58___--dry-run_option_for_all_commands/comment_1_03bf493d5a7f957339f9aa388ba85ef8._comment create mode 100644 doc/todo/wishlist__58___--dry-run_option_for_all_commands/comment_2_8ac7ae6937d219854bc60b56b8646d8b._comment create mode 100644 doc/todo/wishlist__58___--dry-run_option_for_all_commands/comment_3_411cabdfebe353d35f8dc78364f4a507._comment create mode 100644 doc/todo/wishlist__58___--dry-run_option_for_all_commands/comment_4_2824eb6fd3fe9a44d48639c38d478351._comment create mode 100644 doc/todo/wishlist__58___--dry-run_option_for_all_commands/comment_5_e139434d88638d05c84b721abdbb406c._comment create mode 100644 doc/todo/wishlist__58___--dry-run_option_for_all_commands/comment_6_cd430ea90286759eb5311ef376f63929._comment create mode 100644 doc/todo/wishlist__58___--maxdepth_option_for_git_annex_find.mdwn create mode 100644 doc/todo/wishlist__58___--maxdepth_option_for_git_annex_find/comment_1_c355878ac49bbb23a4cf82fe685da9ee._comment create mode 100644 doc/todo/wishlist__58___--maxdepth_option_for_git_annex_find/comment_2_da30a066c4de465fe172ad01057e2380._comment create mode 100644 doc/todo/wishlist__58___--maxdepth_option_for_git_annex_find/comment_3_f3eadd6241f5cc2886515b2826dc5cf9._comment create mode 100644 doc/todo/wishlist__58___--maxdepth_option_for_git_annex_find/comment_4_c766c1465407324fc933db78be325b33._comment create mode 100644 doc/todo/wishlist__58___--maxdepth_option_for_git_annex_find/comment_5_dcda795ff29de150ced0c839c85f7837._comment create mode 100644 doc/todo/wishlist__58___Add_--byte-limit_option.mdwn create mode 100644 doc/todo/wishlist__58___Freeing_X_space_on_remote_Y.mdwn create mode 100644 doc/todo/wishlist__58___Option_to_specify_max_transfer_rate.mdwn create mode 100644 doc/todo/wishlist__58___Option_to_specify_max_transfer_rate/comment_1_4fd870e14b5b70c8a6ade41406294387._comment create mode 100644 doc/todo/wishlist__58___Option_to_specify_max_transfer_rate/comment_2_dd854f297ad6a94b54be9f3edfd0f766._comment create mode 100644 doc/todo/wishlist__58___Option_to_specify_max_transfer_rate/comment_3_a8b7e90a473d5937807cc7eb456efe33._comment create mode 100644 doc/todo/wishlist__58___Option_to_specify_max_transfer_rate/comment_4_53c43e480a37b20bc8fed9d38527651b._comment create mode 100644 doc/todo/wishlist__58___Option_to_specify_max_transfer_rate/comment_5_428d638e1f41d84df7e6c51675fe65da._comment create mode 100644 doc/todo/wishlist__58___Parity_files_for_encrypted_remotes.mdwn create mode 100644 doc/todo/wishlist__58___Parity_files_for_encrypted_remotes/comment_1_5fbffd74f9d89857b807093cd7a5941e._comment create mode 100644 doc/todo/wishlist__58___Restore_s3_files_moved_to_Glacier.mdwn create mode 100644 doc/todo/wishlist__58___Restore_s3_files_moved_to_Glacier/comment_1_eb934756cb2af7fa13ad3b5fad7f85b2._comment create mode 100644 doc/todo/wishlist__58_____39__get__39___queue_and_schedule.mdwn create mode 100644 doc/todo/wishlist__58_____39__get__39___queue_and_schedule/comment_1_d6ab311beee2ce5f73ae325a4ae463d4._comment create mode 100644 doc/todo/wishlist__58_____39__get__39___queue_and_schedule/comment_2_c2e9ab3ff49c22f27dd800512e7b7961._comment create mode 100644 doc/todo/wishlist__58_____39__whereis__39___support_in_the_webapp.mdwn create mode 100644 doc/todo/wishlist__58_____96__git_annex_drop_--relaxed__96__.mdwn create mode 100644 doc/todo/wishlist__58_____96__git_annex_drop_--relaxed__96__/comment_1_c83a6cddd0ce222205a149cfa41ca395._comment create mode 100644 doc/todo/wishlist__58_____96__git_annex_drop_--relaxed__96__/comment_2_353fbc2bcc40cb8c9af42907a34c6e5a._comment create mode 100644 doc/todo/wishlist__58_____96__git_annex_drop_--relaxed__96__/comment_3_3e830035df580601f038ce3a7003c39d._comment create mode 100644 doc/todo/wishlist__58_____96__git_annex_drop_--relaxed__96__/comment_4_e5516689bc128c061dcd66649dc69584._comment create mode 100644 doc/todo/wishlist__58_____96__git_annex_drop_--relaxed__96__/comment_5_be740e4b06d9130ae6afc5783da3c0e0._comment create mode 100644 doc/todo/wishlist__58_____96__git_annex_drop_--relaxed__96__/comment_6_79d115f95cec46bb51e7fba078524db1._comment create mode 100644 doc/todo/wishlist__58_____96__git_annex_optimize__96__.mdwn create mode 100644 doc/todo/wishlist__58___allow_custom_S3_url_in_webapp.mdwn create mode 100644 doc/todo/wishlist__58___allow_custom_S3_url_in_webapp/comment_1_3d1ea5579a6ad0c0efde58dca11c10aa._comment create mode 100644 doc/todo/wishlist__58___allow_custom_S3_url_in_webapp/comment_2_f96bb81fde4185368dc6ea5a5aed87da._comment create mode 100644 doc/todo/wishlist__58___an___34__assistant__34___for_web-browsing_--_tracking_the_sources_of_the_downloads.mdwn create mode 100644 doc/todo/wishlist__58___an___34__assistant__34___for_web-browsing_--_tracking_the_sources_of_the_downloads/comment_1_36ae3c75053d5ec278b5e6eb2084d57a._comment create mode 100644 doc/todo/wishlist__58___an___34__assistant__34___for_web-browsing_--_tracking_the_sources_of_the_downloads/comment_3_be8eb800523db8cf7a2c68a28fbf5ea5._comment create mode 100644 doc/todo/wishlist__58___an___34__assistant__34___for_web-browsing_--_tracking_the_sources_of_the_downloads/comment_3_d9f725de41a8572c85e4c6d9b4bcc927._comment create mode 100644 doc/todo/wishlist__58___an___34__assistant__34___for_web-browsing_--_tracking_the_sources_of_the_downloads/comment_4_f52492e4cc6f965515800bd1c0e05c90._comment create mode 100644 doc/todo/wishlist__58___an___34__assistant__34___for_web-browsing_--_tracking_the_sources_of_the_downloads/comment_5_5b36656fc5fa124e763f06711d9da32b._comment create mode 100644 doc/todo/wishlist__58___an___34__assistant__34___for_web-browsing_--_tracking_the_sources_of_the_downloads/comment_6_285215a4466806baf85b8606f680494a._comment create mode 100644 doc/todo/wishlist__58___an___34__assistant__34___for_web-browsing_--_tracking_the_sources_of_the_downloads/comment_7_15bf62e46db4b84ed3156f550f03de42._comment create mode 100644 doc/todo/wishlist__58___annex.largefiles_configuration_in_webapp_and_sync.mdwn create mode 100644 doc/todo/wishlist__58___annex.largefiles_configuration_in_webapp_and_sync/comment_1_db632de391ce9fce42af51a770ed3aeb._comment create mode 100644 doc/todo/wishlist__58___annex.largefiles_configuration_in_webapp_and_sync/comment_2_4a0931d9884054d764fde315d4fe4851._comment create mode 100644 doc/todo/wishlist__58___archive_from_remote_with_the_least_free_space.mdwn create mode 100644 doc/todo/wishlist__58___archive_from_remote_with_the_least_free_space/comment_1_6813fdc7ecc98765a5d35d34163a1712._comment create mode 100644 doc/todo/wishlist__58___archive_from_remote_with_the_least_free_space/comment_2_21a249cedca1ceb80d10784004735524._comment create mode 100644 doc/todo/wishlist__58___assistant_logging_improvements.mdwn create mode 100644 doc/todo/wishlist__58___assistant_logging_improvements/comment_1_683e2e3c94345cb6f35028cd130a4dcc._comment create mode 100644 doc/todo/wishlist__58___derived_content_support.mdwn create mode 100644 doc/todo/wishlist__58___disable_automatic_commits.mdwn create mode 100644 doc/todo/wishlist__58___disable_automatic_commits/comment_1_3f76bc558b59f90d0276be8cd24c6797._comment create mode 100644 doc/todo/wishlist__58___disable_automatic_commits/comment_2_a031373f7251b5395100bcfc57519049._comment create mode 100644 doc/todo/wishlist__58___disable_automatic_commits/comment_3_53b1321d5bcaf4139f9fbbd17f26fe75._comment create mode 100644 doc/todo/wishlist__58___disable_automatic_commits/comment_4_e021de3647a00aa0259a247441de50eb._comment create mode 100644 doc/todo/wishlist__58___disable_automatic_commits/comment_5_701ef8d7bca858150bc0ae070d21755d._comment create mode 100644 doc/todo/wishlist__58___disable_automatic_commits/comment_6_195815446f3ec78901c1ddd245b86c4c._comment create mode 100644 doc/todo/wishlist__58___display_status_of_remotes_in_the_webapp.mdwn create mode 100644 doc/todo/wishlist__58___encrypted_git_remote_on_hosting_site_from_webapp.mdwn create mode 100644 doc/todo/wishlist__58___generic_annex.cost-command.mdwn create mode 100644 doc/todo/wishlist__58___generic_annex.cost-command/comment_1_b2060ec194e3ae53bd286f2bae799984._comment create mode 100644 doc/todo/wishlist__58___global_progress_status.mdwn create mode 100644 doc/todo/wishlist__58___global_progress_status/comment_1_d915dce144071f768ee9bcdead07a0e5._comment create mode 100644 doc/todo/wishlist__58___global_progress_status/comment_2_816f41f5436543fc09e7d7df82a8c8d5._comment create mode 100644 doc/todo/wishlist__58___global_progress_status/comment_3_587e8befa0e52d8880362a32799df492._comment create mode 100644 doc/todo/wishlist__58___global_progress_status/comment_4_60b7597af2b86ce6bcb31731f6d8c54e._comment create mode 100644 doc/todo/wishlist__58___history_of_operations.mdwn create mode 100644 doc/todo/wishlist__58___history_of_operations/comment_1_f9a77ce83c6f39b6272d5c577ffbb9f9._comment create mode 100644 doc/todo/wishlist__58___matching_options_for_branches.mdwn create mode 100644 doc/todo/wishlist__58___matching_options_for_branches/comment_1_c0d442b646dc40d870b10098a0ee5408._comment create mode 100644 doc/todo/wishlist__58___move_pending_transfers_for_a_host_to_the_end_of_the_queue_when_one_fails.mdwn create mode 100644 doc/todo/wishlist__58___move_pending_transfers_for_a_host_to_the_end_of_the_queue_when_one_fails/comment_1_82ee9de610a0ac55cd1c27c211079e5b._comment create mode 100644 doc/todo/wishlist__58___move_pending_transfers_for_a_host_to_the_end_of_the_queue_when_one_fails/comment_2_bea55156bd32cf9e6dd9b946ba1bb8c1._comment create mode 100644 doc/todo/wishlist__58___optionally_print_key_in_output_of_checkpresentkey_batch_mode.mdwn create mode 100644 doc/todo/wishlist__58___optionally_print_key_in_output_of_checkpresentkey_batch_mode/comment_1_f95f2c92a46c1bd00c627aa19b08c875._comment create mode 100644 doc/todo/wishlist__58___optionally_print_key_in_output_of_checkpresentkey_batch_mode/comment_2_bb756ddf06c52ca52d73af319f0265b0._comment create mode 100644 doc/todo/wishlist__58___perform_fsck_remotely.mdwn create mode 100644 doc/todo/wishlist__58___perform_fsck_remotely/comment_1_db92311dcdb1ef0ab0413f83e191c70c._comment create mode 100644 doc/todo/wishlist__58___perform_fsck_remotely/comment_2_2f0dbaf143d94290bfbebb6869eb7241._comment create mode 100644 doc/todo/wishlist__58___perform_fsck_remotely/comment_3_5ec2e0e248dfd4ca46aef89cc5658d18._comment create mode 100644 doc/todo/wishlist__58___provide_a_config_option_for_using_new_hashing_scheme_in_non-bare_remotes.mdwn create mode 100644 doc/todo/wishlist__58___recursive_directory_remote_setup__47__addurl.mdwn create mode 100644 doc/todo/wishlist__58___recursive_directory_remote_setup__47__addurl/comment_1_b79976afc2242791523e63831f30af71._comment create mode 100644 doc/todo/wishlist__58___recursive_directory_remote_setup__47__addurl/comment_2_1741d2392006a9af9cfd1f3b847600b9._comment create mode 100644 doc/todo/wishlist__58___recursive_directory_remote_setup__47__addurl/comment_3_b6fb39030f98bbc9915712e3d35d1838._comment create mode 100644 doc/todo/wishlist__58___traffic_accounting_for_git-annex.mdwn create mode 100644 doc/todo/wishlist__58___unify_directory_scheme_for_the_store.mdwn create mode 100644 doc/todo/wishlist__58___unify_directory_scheme_for_the_store/comment_1_44da58beaaab359ecaba7fb905ca4ae1._comment create mode 100644 doc/todo/wishlist__58___unify_directory_scheme_for_the_store/comment_2_bc698c501ecdb56df57171f4f3bb831a._comment create mode 100644 doc/todo/wishlist__58___unify_directory_scheme_for_the_store/comment_3_e555d0dbbaa05528806905c6a940724b._comment create mode 100644 doc/todo/wishlist__58___use_cp_--reflink__61__auto_for_git-annex-__123__copy__44__get__125__.mdwn create mode 100644 doc/todo/wishlist__58___use_cp_--reflink__61__auto_for_git-annex-__123__copy__44__get__125__/comment_1_bbbb9c4c71b8c56eaf134b794d2345c3._comment create mode 100644 doc/todo/wishlist__58___use_cp_--reflink__61__auto_for_git-annex-__123__copy__44__get__125__/comment_2_1eb09a234616cb0df7fed9016827dd0c._comment create mode 100644 doc/todo/wishlist__58___use_cp_--reflink__61__auto_for_git-annex-__123__copy__44__get__125__/comment_3_942c2decd6dda0730e2efe4ed6e6cd16._comment create mode 100644 doc/todo/wishlist__91__minor__93____58___add_time_stamps_to_annex_log_popups_in_webapp.mdwn create mode 100644 doc/todo/wishlist__91__minor__93____58___add_time_stamps_to_annex_log_popups_in_webapp/comment_1_ec90432a7d46383071401b05243d621f._comment create mode 100644 doc/todo/wishlist_degraded_files.mdwn create mode 100644 doc/todo/withExclusiveLock_blocking_issue.mdwn create mode 100644 doc/todo/worktree_overwrite_races.mdwn create mode 100644 doc/todo/yt-dlp__58___parse__47__handle___40__error__41_____34__Video_unavailable__34__.mdwn create mode 100644 doc/todo/yt-dlp__58___parse__47__handle___40__error__41_____34__Video_unavailable__34__/comment_1_8b761cfc9b2ca784efc15b39689c31f5._comment create mode 100644 doc/transferring_data.mdwn create mode 100644 doc/trust.mdwn create mode 100644 doc/trust/comment_1_305e4e7c6b75db29212b758e8504d8c9._comment create mode 100644 doc/trust/comment_2_2262eaa830306d3dc75999bc0433b6a8._comment create mode 100644 doc/tuning.mdwn create mode 100644 doc/tuning/comment_1_f8af8e9b696d32d238ebd56a3b8058c4._comment create mode 100644 doc/tuning/comment_2_a0091dbb39b79dfe101d05f9a5db216f._comment create mode 100644 doc/tuning/comment_4_1c576f9a5e0a0b5d7d8edf9d40462874._comment create mode 100644 doc/tuning/comment_4_5b782975263480a405c5e8dcfe058007._comment create mode 100644 doc/tuning/comment_5_0143b798e75ad25c5917794a49a879fb._comment create mode 100644 doc/upgrades.mdwn create mode 100644 doc/upgrades/SHA_size.mdwn create mode 100644 doc/upgrades/SHA_size/comment_1_20f9b7b75786075de666b2146dc13a60._comment create mode 100644 doc/upgrades/gcrypt.mdwn create mode 100644 doc/upgrades/gcrypt/comment_1_606c1527735996ae671f78948e4ad84b._comment create mode 100644 doc/upgrades/insecure_embedded_creds.mdwn create mode 100644 doc/use_case/Alice.mdwn create mode 100644 doc/use_case/Bob.mdwn create mode 100644 doc/users.mdwn create mode 100644 doc/users/Ilya__95__Shlyakhter.mdwn create mode 100644 doc/users/anarcat.mdwn create mode 100644 doc/users/andrew.mdwn create mode 100644 doc/users/ben.mdwn create mode 100644 doc/users/chris.mdwn create mode 100644 doc/users/chrysn.mdwn create mode 100644 doc/users/clacke.mdwn create mode 100644 doc/users/claes.wallin.mdwn create mode 100644 doc/users/dandi.mdwn create mode 100644 doc/users/datalad.mdwn create mode 100644 doc/users/dave.mdwn create mode 100644 doc/users/dckc.mdwn create mode 100644 doc/users/falsifian.mdwn create mode 100644 doc/users/fmarier.mdwn create mode 100644 doc/users/frederik.mdwn create mode 100644 doc/users/gebi.mdwn create mode 100644 doc/users/greg.mdwn create mode 100644 doc/users/james.mdwn create mode 100644 doc/users/jgoerzen.mdwn create mode 100644 doc/users/jkniiv.mdwn create mode 100644 doc/users/joey.mdwn create mode 100644 doc/users/joey/comment_1_0ccf207fd817f9b5555aad030bd4957f._comment create mode 100644 doc/users/joey/comment_2_7e0b8d499d2bededf01591a7c5686f8f._comment create mode 100644 doc/users/kolam.mdwn create mode 100644 doc/users/mih.mdwn create mode 100644 doc/users/nobodyinperson.mdwn create mode 100644 doc/users/parhuzamos.mdwn create mode 100644 doc/users/petersjt014.mdwn create mode 100644 doc/users/ptilopteri.mdwn create mode 100644 doc/users/sameerds.mdwn create mode 100644 doc/users/thk.mdwn create mode 100644 doc/users/timothe.mdwn create mode 100644 doc/users/tobiastheviking.mdwn create mode 100644 doc/users/unqueued.mdwn create mode 100644 doc/users/wzhd.mdwn create mode 100644 doc/users/yarikoptic.mdwn create mode 100644 doc/users/yoh.mdwn create mode 100644 doc/videos.mdwn create mode 100644 doc/videos/FOSDEM2012.mdwn create mode 100644 doc/videos/LCA2013.mdwn create mode 100644 doc/videos/git-annex_assistant_archiving.mdwn create mode 100644 doc/videos/git-annex_assistant_introduction.mdwn create mode 100644 doc/videos/git-annex_assistant_introduction/comment_1_f42ad4183c2c28319d3705a82fceb82f._comment create mode 100644 doc/videos/git-annex_assistant_introduction/comment_2_b62f4eeeac1138570f7cb8c98d41c2cb._comment create mode 100644 doc/videos/git-annex_assistant_lan.mdwn create mode 100644 doc/videos/git-annex_assistant_lan/comment_1_df8c8b6d9d63fbf5462b225edbb23c82._comment create mode 100644 doc/videos/git-annex_assistant_lan/comment_2_d4e3122da9c9e27fbe872e09fcde762b._comment create mode 100644 doc/videos/git-annex_assistant_lan/comment_3_d43ee0a335c2f010b437cf28437455c2._comment create mode 100644 doc/videos/git-annex_assistant_lan/comment_4_c710e27db41311b157d8caaafc32dc7e._comment create mode 100644 doc/videos/git-annex_assistant_sync_demo.mdwn create mode 100644 doc/videos/git-annex_views_demo.mdwn create mode 100644 doc/videos/git-annex_watch_demo.mdwn create mode 100644 doc/videos/git-annex_weppapp_demo.mdwn create mode 100644 doc/videos/tuebix.mdwn create mode 100644 doc/walkthrough.mdwn create mode 100644 doc/walkthrough/adding_a_remote.mdwn create mode 100644 doc/walkthrough/adding_a_remote/comment_1_0a59355bd33a796aec97173607e6adc9._comment create mode 100644 doc/walkthrough/adding_a_remote/comment_2_f8cd79ef1593a8181a7f1086a87713e8._comment create mode 100644 doc/walkthrough/adding_a_remote/comment_3_60691af4400521b5a8c8d75efe3b44cb._comment create mode 100644 doc/walkthrough/adding_a_remote/comment_4_6f7cf5c330272c96b3abeb6612075c9d._comment create mode 100644 doc/walkthrough/adding_a_remote/comment_5_bcbe480aa710ce693ee03d86884f1820._comment create mode 100644 doc/walkthrough/adding_a_remote/comment_6_15ea28114e69dddac82fddaf009079ca._comment create mode 100644 doc/walkthrough/adding_a_remote/comment_7_caea7e4e9ec904617c6ec1a33368090f._comment create mode 100644 doc/walkthrough/adding_files.mdwn create mode 100644 doc/walkthrough/automatically_managing_content.mdwn create mode 100644 doc/walkthrough/backups.mdwn create mode 100644 doc/walkthrough/backups/comment_1_d0244791d2abbf29553546a6a6568a0f._comment create mode 100644 doc/walkthrough/creating_a_repository.mdwn create mode 100644 doc/walkthrough/fsck__58___verifying_your_data.mdwn create mode 100644 doc/walkthrough/fsck__58___when_things_go_wrong.mdwn create mode 100644 doc/walkthrough/getting_file_content.mdwn create mode 100644 doc/walkthrough/modifying_annexed_files.mdwn create mode 100644 doc/walkthrough/modifying_annexed_files/comment_1_624b4a0b521b553d68ab6049f7dbaf8c._comment create mode 100644 doc/walkthrough/modifying_annexed_files/comment_2_b000622304535d32b69db17d51156b21._comment create mode 100644 doc/walkthrough/more.mdwn create mode 100644 doc/walkthrough/moving_file_content_between_repositories.mdwn create mode 100644 doc/walkthrough/moving_file_content_between_repositories/comment_1_4c30ade91fc7113a95960aa3bd1d5427._comment create mode 100644 doc/walkthrough/moving_file_content_between_repositories/comment_2_7d90e1e150e7524ba31687108fcc38d6._comment create mode 100644 doc/walkthrough/moving_file_content_between_repositories/comment_3_558d80384434207b9cfc033763863de3._comment create mode 100644 doc/walkthrough/moving_file_content_between_repositories/comment_4_a2f343eceed9e9fba1670f21e0fc6af4._comment create mode 100644 doc/walkthrough/quiet_please__58___When_git-annex_seems_to_skip_files.mdwn create mode 100644 doc/walkthrough/removing_files.mdwn create mode 100644 doc/walkthrough/removing_files/comment_1_cb65e7c510b75be1c51f655b058667c6._comment create mode 100644 doc/walkthrough/removing_files/comment_2_64709ea4558915edd5c8ca4486965b07._comment create mode 100644 doc/walkthrough/removing_files/comment_3_91e995867a731325dfdf3331f69a238c._comment create mode 100644 doc/walkthrough/removing_files/comment_4_9b575f7f2b67b36599890dd5455dcf47._comment create mode 100644 doc/walkthrough/removing_files__58___When_things_go_wrong.mdwn create mode 100644 doc/walkthrough/renaming_files.mdwn create mode 100644 doc/walkthrough/renaming_files/comment_1_c05f70079c265d23e882f92aaa4d28f8._comment create mode 100644 doc/walkthrough/renaming_files/comment_2_fe83c600e080131b3109fe616940a25e._comment create mode 100644 doc/walkthrough/renaming_files/comment_3_6b579a4f2990a28b33a8170ebd39da5c._comment create mode 100644 doc/walkthrough/renaming_files/comment_4_1cf4cb6be73223755cb611ec097d1498._comment create mode 100644 doc/walkthrough/renaming_files/comment_5_bc3e37868b276c52a51586641cdb92ae._comment create mode 100644 doc/walkthrough/renaming_files/comment_6_2ae2cc3dba5db4d4354a5b49c490272e._comment create mode 100644 doc/walkthrough/syncing.mdwn create mode 100644 doc/walkthrough/transferring_files__58___When_things_go_wrong.mdwn create mode 100644 doc/walkthrough/unused_data.mdwn create mode 100644 doc/walkthrough/unused_data/comment_1_684b7b652d3a8ec04f32129c5528f1ab._comment create mode 100644 doc/walkthrough/unused_data/comment_2_e2ccd9a209c7a104004e998135d4b675._comment create mode 100644 doc/walkthrough/unused_data/comment_3_5f973eb7c265015fcd400b6b0bbdf235._comment create mode 100644 doc/walkthrough/unused_data/comment_4_2110ed6316b6a0df4ef3e1c8bc97ab99._comment create mode 100644 doc/walkthrough/unused_data/comment_5_46acb9fbbd5ef19f65115723888f3eb6._comment create mode 100644 doc/walkthrough/using_bup.mdwn create mode 100644 doc/walkthrough/using_ddar.mdwn create mode 100644 doc/walkthrough/using_special_remotes.mdwn create mode 100644 doc/walkthrough/using_ssh_remotes.mdwn create mode 100644 doc/walkthrough/using_ssh_remotes/comment_10_98e97c4d7fbbcd449eddf683967a71d6._comment create mode 100644 doc/walkthrough/using_ssh_remotes/comment_11_f2775a151ed50caba27057bd9c38bae2._comment create mode 100644 doc/walkthrough/using_ssh_remotes/comment_12_a8bc6110128431ca2a8624ddc75ea364._comment create mode 100644 doc/walkthrough/using_ssh_remotes/comment_2_365db5820d96d5daa62c19fd76fcdf1e._comment create mode 100644 doc/walkthrough/using_ssh_remotes/comment_2_451fd0c6a25ee61ef137e8e5be0c286b._comment create mode 100644 doc/walkthrough/using_ssh_remotes/comment_3_b2f15a46620385da26d5fe8f11ebfc1a._comment create mode 100644 doc/walkthrough/using_ssh_remotes/comment_4_433ccc87fbb0a13e32d59d77f0b4e56c._comment create mode 100644 doc/walkthrough/using_ssh_remotes/comment_5_a9805c7965da0b88a1c9f7f207c450a1._comment create mode 100644 doc/walkthrough/using_ssh_remotes/comment_6_9d5c12c056892b706cf100ea01866685._comment create mode 100644 doc/walkthrough/using_ssh_remotes/comment_7_725e7dbb2d0a74a035127cb01ee0442c._comment create mode 100644 doc/walkthrough/using_ssh_remotes/comment_8_8448e55026d2c2b50d8da41707686bea._comment create mode 100644 doc/walkthrough/using_ssh_remotes/comment_9_61833299a9878f23ac57598fa6da8839._comment create mode 100644 doc/walkthrough/using_tags_and_branches.mdwn create mode 100644 doc/workflow.mdwn create mode 100644 doc/workflow/comment_1_e4b2199944c3a248562bddf3cf9e2829._comment create mode 100644 doc/workflow/comment_2_67edac29c0e7b5a768511a0fd0878947._comment create mode 100644 git-annex.cabal create mode 100644 git-annex.hs create mode 100644 git-union-merge.hs create mode 100644 stack-lts-18.13.yaml create mode 100644 stack.yaml create mode 100644 standalone/licences.gz create mode 100644 standalone/linux/skel/README create mode 100755 standalone/linux/skel/git create mode 100755 standalone/linux/skel/git-annex create mode 100755 standalone/linux/skel/git-annex-shell create mode 100755 standalone/linux/skel/git-annex-webapp create mode 100755 standalone/linux/skel/git-receive-pack create mode 100755 standalone/linux/skel/git-shell create mode 100755 standalone/linux/skel/git-upload-pack create mode 100755 standalone/linux/skel/runshell create mode 100644 standalone/linux/stack-i386ancient.yaml create mode 100644 standalone/osx/Info.plist.template create mode 100644 standalone/osx/git-annex.app/Contents/MacOS/README create mode 100755 standalone/osx/git-annex.app/Contents/MacOS/git create mode 100755 standalone/osx/git-annex.app/Contents/MacOS/git-annex create mode 100755 standalone/osx/git-annex.app/Contents/MacOS/git-annex-shell create mode 100755 standalone/osx/git-annex.app/Contents/MacOS/git-annex-webapp create mode 100755 standalone/osx/git-annex.app/Contents/MacOS/git-receive-pack create mode 100755 standalone/osx/git-annex.app/Contents/MacOS/git-shell create mode 100755 standalone/osx/git-annex.app/Contents/MacOS/git-upload-pack create mode 100755 standalone/osx/git-annex.app/Contents/MacOS/runshell create mode 100644 standalone/osx/git-annex.app/Contents/Resources/git-annex.icns create mode 100644 standalone/rpm/git-annex-standalone.spec create mode 100755 standalone/rpm/rpmbuild-from-standalone-tarball create mode 100644 standalone/trustedkeys.gpg create mode 100644 static/activityicon.gif create mode 100644 static/css/bootstrap-theme.css create mode 100644 static/css/bootstrap.css create mode 100644 static/favicon.ico create mode 100644 static/fonts/glyphicons-halflings-regular.eot create mode 100644 static/fonts/glyphicons-halflings-regular.svg create mode 100644 static/fonts/glyphicons-halflings-regular.ttf create mode 100644 static/fonts/glyphicons-halflings-regular.woff create mode 100644 static/js/bootstrap.js create mode 100644 static/js/jquery.full.js create mode 100644 static/js/jquery.ui.core.js create mode 100644 static/js/jquery.ui.mouse.js create mode 100644 static/js/jquery.ui.sortable.js create mode 100644 static/js/jquery.ui.widget.js create mode 100644 static/js/longpolling.js create mode 100644 static/syncicon.gif create mode 100644 templates/README create mode 100644 templates/actionbutton.hamlet create mode 100644 templates/bootstrap.hamlet create mode 100644 templates/configurators/adddrive.hamlet create mode 100644 templates/configurators/adddrive/combine.hamlet create mode 100644 templates/configurators/adddrive/encrypt.hamlet create mode 100644 templates/configurators/adddrive/setupmodal.hamlet create mode 100644 templates/configurators/addglacier.hamlet create mode 100644 templates/configurators/addia.hamlet create mode 100644 templates/configurators/addrepository.hamlet create mode 100644 templates/configurators/addrepository/archive.hamlet create mode 100644 templates/configurators/addrepository/cloud.hamlet create mode 100644 templates/configurators/addrepository/connection.hamlet create mode 100644 templates/configurators/addrepository/misc.hamlet create mode 100644 templates/configurators/addrepository/ssh.hamlet create mode 100644 templates/configurators/addrepository/wormholepairing.hamlet create mode 100644 templates/configurators/adds3.hamlet create mode 100644 templates/configurators/delete/currentrepository.hamlet create mode 100644 templates/configurators/delete/finished.hamlet create mode 100644 templates/configurators/delete/start.hamlet create mode 100644 templates/configurators/edit/nonannexremote.hamlet create mode 100644 templates/configurators/edit/repository.hamlet create mode 100644 templates/configurators/edit/webrepository.hamlet create mode 100644 templates/configurators/enableaws.hamlet create mode 100644 templates/configurators/enabledirectory.hamlet create mode 100644 templates/configurators/enableia.hamlet create mode 100644 templates/configurators/enablewebdav.hamlet create mode 100644 templates/configurators/fsck.cassius create mode 100644 templates/configurators/fsck.hamlet create mode 100644 templates/configurators/fsck/form.hamlet create mode 100644 templates/configurators/fsck/formcontent.hamlet create mode 100644 templates/configurators/fsck/preferencesform.hamlet create mode 100644 templates/configurators/fsck/status.hamlet create mode 100644 templates/configurators/genkeymodal.hamlet create mode 100644 templates/configurators/main.hamlet create mode 100644 templates/configurators/needconnection.hamlet create mode 100644 templates/configurators/needgcrypt.hamlet create mode 100644 templates/configurators/needglaciercli.hamlet create mode 100644 templates/configurators/needmagicwormhole.hamlet create mode 100644 templates/configurators/needtor.hamlet create mode 100644 templates/configurators/newrepository.hamlet create mode 100644 templates/configurators/newrepository/combine.hamlet create mode 100644 templates/configurators/newrepository/first.hamlet create mode 100644 templates/configurators/newrepository/form.hamlet create mode 100644 templates/configurators/pairing/disabled.hamlet create mode 100644 templates/configurators/pairing/local/inprogress.hamlet create mode 100644 templates/configurators/pairing/local/prompt.hamlet create mode 100644 templates/configurators/pairing/wormhole/prompt.hamlet create mode 100644 templates/configurators/pairing/wormhole/start.hamlet create mode 100644 templates/configurators/preferences.hamlet create mode 100644 templates/configurators/rsync.net/add.hamlet create mode 100644 templates/configurators/rsync.net/encrypt.hamlet create mode 100644 templates/configurators/ssh/add.hamlet create mode 100644 templates/configurators/ssh/combine.hamlet create mode 100644 templates/configurators/ssh/confirm.hamlet create mode 100644 templates/configurators/ssh/enable.hamlet create mode 100644 templates/configurators/ssh/error.hamlet create mode 100644 templates/configurators/ssh/expiredpassword.hamlet create mode 100644 templates/configurators/ssh/setupmodal.hamlet create mode 100644 templates/configurators/ssh/testmodal.hamlet create mode 100644 templates/configurators/unused.hamlet create mode 100644 templates/configurators/unused/form.hamlet create mode 100644 templates/control/log.hamlet create mode 100644 templates/control/notrunning.hamlet create mode 100644 templates/control/notrunning.julius create mode 100644 templates/control/repairrepository.hamlet create mode 100644 templates/control/repairrepository/done.hamlet create mode 100644 templates/control/repositoryswitcher.hamlet create mode 100644 templates/control/shutdown.hamlet create mode 100644 templates/controlmenu.hamlet create mode 100644 templates/dashboard/main.hamlet create mode 100644 templates/dashboard/metarefresh.hamlet create mode 100644 templates/dashboard/transfers.cassius create mode 100644 templates/dashboard/transfers.hamlet create mode 100644 templates/documentation/about.hamlet create mode 100644 templates/documentation/license.hamlet create mode 100644 templates/documentation/repogroup.hamlet create mode 100644 templates/error.cassius create mode 100644 templates/error.hamlet create mode 100644 templates/notifications/longpolling.julius create mode 100644 templates/page.cassius create mode 100644 templates/page.hamlet create mode 100644 templates/page.julius create mode 100644 templates/repolist.hamlet create mode 100644 templates/repolist.julius create mode 100644 templates/sidebar/alert.hamlet create mode 100644 templates/sidebar/main.hamlet diff --git a/.appveyor.yml b/.appveyor.yml new file mode 100644 index 0000000000..82e3bfe3f6 --- /dev/null +++ b/.appveyor.yml @@ -0,0 +1,141 @@ +# This CI setup provides a largely homogeneous configuration across all +# major platforms (Windows, MacOS, and Linux). The aim of this test setup is +# to create a "native" platform experience, using as few cross-platform +# helper tools as possible. +# +# All workers support remote login. Login details are shown at the top of each +# CI run log. +# +# - Linux/Mac workers (via SSH): +# +# - A permitted SSH key must be defined in an APPVEYOR_SSH_KEY environment +# variable (via the appveyor project settings) +# +# - SSH login info is given in the form of: 'appveyor@67.225.164.xx -p 22xxx' +# +# - Login with: +# +# ssh -o StrictHostKeyChecking=no +# +# - to prevent the CI run from exiting, `touch` a file named `BLOCK` in the +# user HOME directory (current directory directly after login). The session +# will run until the file is removed (or 60 min have passed) +# +# - Windows workers (via RDP): +# +# - An RDP password should be defined in an APPVEYOR_RDP_PASSWORD environment +# variable (via the appveyor project settings), or a random password is used +# every time +# +# - RDP login info is given in the form of IP:PORT +# +# - Login with: +# +# xfreerdp /cert:ignore /dynamic-resolution /u:appveyor /p: /v: +# +# - to prevent the CI run from exiting, create a textfile named +# `BLOCK.txt` in the currently directory after login. The session +# will run until the file is removed (or 60 min have passed) + +# Do a shallow clone with enough commits that queued builds will still +# find the commit they want to build. +clone_depth: 100 + +environment: + # Do not use `image` as a matrix dimension, to have fine-grained control over + # what tests run on which platform + # The ID variable had no impact, but sorts first in the CI run overview + # an intelligible name can help to locate a specific test run + matrix: + # List a CI run for each platform first, to have immediate access when there + # is a need for debugging + + # Windows core tests + - ID: WinP39core + APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2019 + STACK_ROOT: "c:\\sr" + # MacOS core tests + - ID: MacP38core + APPVEYOR_BUILD_WORKER_IMAGE: macos-monterey + # Ubuntu core tests + # (disabled because it's not needed) + #- ID: Ubu20 + # APPVEYOR_BUILD_WORKER_IMAGE: Ubuntu2004 + +# do not run the CI if only documentation changes were made +# documentation builds are tested elsewhere and cheaper +skip_commits: + files: + - doc/ + - CHANGELOG + +# it is OK to specify paths that may not exist for a particular test run +cache: + - C:\sr -> stack.yaml + - C:\Users\appveyor\AppData\Local\Programs\stack -> stack.yaml + - /Users/appveyor/.stack -> stack.yaml + +# turn of support for MS project build support (not needed) +build: off + +# init cannot use any components from the repo, because it runs prior to +# cloning it +init: + # remove windows 260-char limit on path names + - cmd: powershell Set-Itemproperty -path "HKLM:\SYSTEM\CurrentControlSet\Control\FileSystem" -Name LongPathsEnabled -value 1 + # enable developer mode on windows + # this should enable mklink without admin privileges, but it doesn't seem to work + #- cmd: powershell tools\ci\appveyor_enable_windevmode.ps1 + # enable RDP access on windows (RDP password is in appveyor project config) + # this is relatively expensive (1-2min), but very convenient to jump into any build at any time + - cmd: powershell.exe iex ((new-object net.webclient).DownloadString('https://raw.githubusercontent.com/appveyor/ci/master/scripts/enable-rdp.ps1')) + +install: + # enable external SSH access to CI worker on all other systems + # needs APPVEYOR_SSH_KEY defined in project settings (or environment) + - sh: curl -sflL 'https://raw.githubusercontent.com/appveyor/ci/master/scripts/enable-ssh.sh' | bash -e - + # install stack (works on linux, OSX, and windows) + - curl -sSL https://get.haskellstack.org/ | sh + +# Building dependencies takes almost too long on windows, so build without +# optimisation (including when building the dependencies) +before_build: + - sh: cp stack.yaml stack.yaml.build + - ps: cp stack-lts-18.13.yaml stack.yaml.build + - sh: 'echo "apply-ghc-options: everything" >> stack.yaml.build' + - ps: '"apply-ghc-options: everything" |Add-Content -Path .\stack.yaml.build' + - stack --stack-yaml stack.yaml.build build --only-dependencies --ghc-options=-O0 + +build_script: + - stack --stack-yaml stack.yaml.build build --copy-bins --ghc-options=-O0 + +#after_build: +# + +#before_test: +# + +# Cannot use stack run git-annex because it does not support --ghc-options +# and would rebuild all deps. Instead, use the binary --copy-bins installed. +test_script: + - cmd: C:\Users\appveyor\AppData\Roaming\local\bin\git-annex.exe test + - sh: ln -s $(stack path --local-bin)/git-annex git-annex + - sh: ln -s $(stack path --local-bin)/git-annex git-annex-shell + - sh: PATH=`pwd`:$PATH; export PATH; git-annex test + +#after_test: +# + +#on_success: +# + +#on_failure: +# + +on_finish: + # conditionally block the exit of a CI run for direct debugging + - sh: while [ -f ~/BLOCK ]; do sleep 5; done + - cmd: powershell.exe while ((Test-Path "C:\Users\\appveyor\\BLOCK.txt")) { Start-Sleep 5 } + # block exit until 60 minute timeout, for direct debugging + #- sh: while true; do sleep 5; done + #- cmd: powershell.exe while ($true) { Start-Sleep 5 } diff --git a/.codespellrc b/.codespellrc new file mode 100644 index 0000000000..cb1d82e9c8 --- /dev/null +++ b/.codespellrc @@ -0,0 +1,7 @@ +[codespell] +skip = .git,*.pdf,*.svg,*._comment,jquery.*.js,*.mdwn,changelog,CHANGELOG,list.2018,html,dist,dist-newstyle,.stack-work,man,tags,tmp +# some common variables etc (case insensitive) +# keypair - constructs +## May be TODO later, touches too much +# sentinal -> sentinel +ignore-words-list = dne,inout,fo,ot,bu,te,allright,inh,mor,myu,keypair,pasttime,sentinal,startd,ifset diff --git a/.ghci b/.ghci new file mode 100644 index 0000000000..931298e050 --- /dev/null +++ b/.ghci @@ -0,0 +1,3 @@ +:load Common +:set -XLambdaCase +:set -fno-warn-tabs diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 0000000000..a81b30b931 --- /dev/null +++ b/.gitattributes @@ -0,0 +1 @@ +CHANGELOG merge=dpkg-mergechangelogs diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000000..2d0859233f --- /dev/null +++ b/.gitignore @@ -0,0 +1,40 @@ +tags +TAGS +Setup +*.hi +*.o +tmp +test +Build/SysConfig +Build/Version +Build/InstallDesktopFile +Build/Standalone +Build/BuildVersion +Build/MakeMans +git-annex +git-annex-shell +man +git-union-merge +git-union-merge.1 +doc/.ikiwiki +html +*.tix +.hpc +dist +dist-newstyle +cabal.project.local +cabal.project.local~* +result +git-annex-build-deps* +# Sandboxed builds +cabal-dev +.cabal-sandbox +cabal.sandbox.config +.stack-work +stack.yaml.lock +# Project-local emacs configuration +.dir-locals.el +# OSX related +.DS_Store +.virthualenv +.tasty-rerun-log diff --git a/.mailmap b/.mailmap new file mode 100644 index 0000000000..2ea582b7c9 --- /dev/null +++ b/.mailmap @@ -0,0 +1,29 @@ +Antoine Beaupré anarcat +Antoine Beaupré https://id.koumbit.net/anarcat +Greg Grossmeier http://grossmeier.net/ +Jimmy Tang jtang +Joachim Breitner http://www.joachim-breitner.de/ +Joey Hess Joey Hess +Joey Hess Joey Hess +Joey Hess Joey Hess +Joey Hess Joey Hess +Joey Hess Joey Hess +Joey Hess Joey Hess +Joey Hess Joey Hess +Joey Hess http://joey.kitenet.net/ +Joey Hess http://joeyh.name/ +Joey Hess http://joeyh.name/ +Joey Hess https://www.google.com/accounts/o8/id?id=AItOawmJfIszzreLNvCqzqzvTayA9_9L6gb9RtY +Johan Kiviniemi http://johan.kiviniemi.name/ +Johan Kiviniemi http://johan.kiviniemi.name/ +Nicolas Pouillard http://ertai.myopenid.com/ +Peter Simons Peter Simons +Peter Simons http://peter-simons.myopenid.com/ +Philipp Kern http://phil.0x539.de/ +Richard Hartmann https://www.google.com/accounts/o8/id?id=AItOawl9sYlePmv1xK-VvjBdN-5doOa_Xw-jH4U +Yaroslav Halchenko +Yaroslav Halchenko http://yarikoptic.myopenid.com/ +Yaroslav Halchenko https://www.google.com/accounts/o8/id?id=AItOawnx8kHW66N3BqmkVpgtXDlYMvr8TJ5VvfY +Yaroslav Halchenko https://me.yahoo.com/a/EbvxpTI_xP9Aod7Mg4cwGhgjrCrdM5s-#7c0f4 +Øyvind A. Holm http://sunny256.sunbase.org/ +Øyvind A. Holm https://sunny256.wordpress.com/ diff --git a/Annex.hs b/Annex.hs new file mode 100644 index 0000000000..376f8a9879 --- /dev/null +++ b/Annex.hs @@ -0,0 +1,471 @@ +{- git-annex monad + - + - Copyright 2010-2021 Joey Hess + - + - Licensed under the GNU AGPL version 3 or higher. + -} + +{-# LANGUAGE GeneralizedNewtypeDeriving, BangPatterns, PackageImports #-} + +module Annex ( + Annex, + AnnexState(..), + AnnexRead(..), + new, + run, + eval, + makeRunner, + getRead, + getState, + changeState, + withState, + setField, + setOutput, + getField, + addCleanupAction, + gitRepo, + inRepo, + fromRepo, + calcRepo, + calcRepo', + getGitConfig, + overrideGitConfig, + changeGitRepo, + adjustGitRepo, + addGitConfigOverride, + getGitConfigOverrides, + getRemoteGitConfig, + withCurrentState, + changeDirectory, + getGitRemotes, + incError, +) where + +import Common +import qualified Git +import qualified Git.Config +import qualified Git.Construct +import Annex.Fixup +import Git.HashObject +import Git.CheckAttr +import Git.CheckIgnore +import qualified Git.Hook +import qualified Git.Queue +import Types.Key +import Types.Backend +import Types.GitConfig +import qualified Types.Remote +import Types.Crypto +import Types.BranchState +import Types.TrustLevel +import Types.Group +import Types.Messages +import Types.Concurrency +import Types.UUID +import Types.FileMatcher +import Types.NumCopies +import Types.LockCache +import Types.DesktopNotify +import Types.CleanupActions +import Types.AdjustedBranch +import Types.WorkerPool +import Types.IndexFiles +import Types.CatFileHandles +import Types.RemoteConfig +import Types.TransferrerPool +import Types.VectorClock +import Annex.VectorClock.Utility +import Annex.Debug.Utility +import qualified Database.Keys.Handle as Keys +import Utility.InodeCache +import Utility.Url +import Utility.ResourcePool +import Utility.HumanTime +import Git.Credential (CredentialCache(..)) + +import "mtl" Control.Monad.Reader +import Control.Concurrent +import Control.Concurrent.STM +import qualified Control.Monad.Fail as Fail +import qualified Data.Map.Strict as M +import qualified Data.Set as S +import Data.Time.Clock.POSIX + +{- git-annex's monad is a ReaderT around an AnnexState stored in a MVar, + - and an AnnexRead. The MVar is not exposed outside this module. + - + - Note that when an Annex action fails and the exception is caught, + - any changes the action has made to the AnnexState are retained, + - due to the use of the MVar to store the state. + -} +newtype Annex a = Annex { runAnnex :: ReaderT (MVar AnnexState, AnnexRead) IO a } + deriving ( + Monad, + MonadIO, + MonadReader (MVar AnnexState, AnnexRead), + MonadCatch, + MonadThrow, + MonadMask, + Fail.MonadFail, + Functor, + Applicative, + Alternative + ) + +-- Values that can be read, but not modified by an Annex action. +data AnnexRead = AnnexRead + { activekeys :: TVar (M.Map Key ThreadId) + , activeremotes :: MVar (M.Map (Types.Remote.RemoteA Annex) Integer) + , keysdbhandle :: Keys.DbHandle + , sshstalecleaned :: TMVar Bool + , signalactions :: TVar (M.Map SignalAction (Int -> IO ())) + , transferrerpool :: TransferrerPool + , debugenabled :: Bool + , debugselector :: DebugSelector + , explainenabled :: Bool + , ciphers :: TMVar (M.Map StorableCipher Cipher) + , fast :: Bool + , force :: Bool + , forcenumcopies :: Maybe NumCopies + , forcemincopies :: Maybe MinCopies + , forcebackend :: Maybe String + , useragent :: Maybe String + , desktopnotify :: DesktopNotify + , gitcredentialcache :: TMVar CredentialCache + } + +newAnnexRead :: GitConfig -> IO AnnexRead +newAnnexRead c = do + emptyactivekeys <- newTVarIO M.empty + emptyactiveremotes <- newMVar M.empty + kh <- Keys.newDbHandle + sc <- newTMVarIO False + si <- newTVarIO M.empty + tp <- newTransferrerPool + cm <- newTMVarIO M.empty + cc <- newTMVarIO (CredentialCache M.empty) + return $ AnnexRead + { activekeys = emptyactivekeys + , activeremotes = emptyactiveremotes + , keysdbhandle = kh + , sshstalecleaned = sc + , signalactions = si + , transferrerpool = tp + , debugenabled = annexDebug c + , debugselector = debugSelectorFromGitConfig c + , explainenabled = False + , ciphers = cm + , fast = False + , force = False + , forcebackend = Nothing + , forcenumcopies = Nothing + , forcemincopies = Nothing + , useragent = Nothing + , desktopnotify = mempty + , gitcredentialcache = cc + } + +-- Values that can change while running an Annex action. +data AnnexState = AnnexState + { repo :: Git.Repo + , repoadjustment :: (Git.Repo -> IO Git.Repo) + , gitconfig :: GitConfig + , gitconfigadjustment :: (GitConfig -> GitConfig) + , gitconfigoverride :: [String] + , gitremotes :: Maybe [Git.Repo] + , gitconfiginodecache :: Maybe InodeCache + , backend :: Maybe (BackendA Annex) + , remotes :: [Types.Remote.RemoteA Annex] + , output :: MessageState + , concurrency :: ConcurrencySetting + , daemon :: Bool + , branchstate :: BranchState + , repoqueue :: Maybe (Git.Queue.Queue Annex) + , catfilehandles :: CatFileHandles + , hashobjecthandle :: Maybe (ResourcePool HashObjectHandle) + , checkattrhandle :: Maybe (ResourcePool CheckAttrHandle) + , checkignorehandle :: Maybe (ResourcePool CheckIgnoreHandle) + , globalnumcopies :: Maybe (Maybe NumCopies) + , globalmincopies :: Maybe (Maybe MinCopies) + , limit :: ExpandableMatcher Annex + , timelimit :: Maybe (Duration, POSIXTime) + , sizelimit :: Maybe (TVar Integer) + , uuiddescmap :: Maybe UUIDDescMap + , preferredcontentmap :: Maybe (FileMatcherMap Annex) + , requiredcontentmap :: Maybe (FileMatcherMap Annex) + , remoteconfigmap :: Maybe (M.Map UUID RemoteConfig) + , forcetrust :: TrustMap + , trustmap :: Maybe TrustMap + , groupmap :: Maybe GroupMap + , lockcache :: LockCache + , fields :: M.Map String String + , cleanupactions :: M.Map CleanupAction (Annex ()) + , sentinalstatus :: Maybe SentinalStatus + , errcounter :: Integer + , reachedlimit :: Bool + , adjustedbranchrefreshcounter :: Integer + , unusedkeys :: Maybe (S.Set Key) + , tempurls :: M.Map Key URLString + , existinghooks :: M.Map Git.Hook.Hook Bool + , workers :: Maybe (TMVar (WorkerPool (AnnexState, AnnexRead))) + , cachedcurrentbranch :: (Maybe (Maybe Git.Branch, Maybe Adjustment)) + , cachedgitenv :: Maybe (AltIndexFile, FilePath, [(String, String)]) + , urloptions :: Maybe UrlOptions + , insmudgecleanfilter :: Bool + , getvectorclock :: IO CandidateVectorClock + } + +newAnnexState :: GitConfig -> Git.Repo -> IO AnnexState +newAnnexState c r = do + o <- newMessageState + vc <- startVectorClock + return $ AnnexState + { repo = r + , repoadjustment = return + , gitconfig = c + , gitconfigadjustment = id + , gitconfigoverride = [] + , gitremotes = Nothing + , gitconfiginodecache = Nothing + , backend = Nothing + , remotes = [] + , output = o + , concurrency = ConcurrencyCmdLine NonConcurrent + , daemon = False + , branchstate = startBranchState + , repoqueue = Nothing + , catfilehandles = catFileHandlesNonConcurrent + , hashobjecthandle = Nothing + , checkattrhandle = Nothing + , checkignorehandle = Nothing + , globalnumcopies = Nothing + , globalmincopies = Nothing + , limit = BuildingMatcher [] + , timelimit = Nothing + , sizelimit = Nothing + , uuiddescmap = Nothing + , preferredcontentmap = Nothing + , requiredcontentmap = Nothing + , remoteconfigmap = Nothing + , forcetrust = M.empty + , trustmap = Nothing + , groupmap = Nothing + , lockcache = M.empty + , fields = M.empty + , cleanupactions = M.empty + , sentinalstatus = Nothing + , errcounter = 0 + , reachedlimit = False + , adjustedbranchrefreshcounter = 0 + , unusedkeys = Nothing + , tempurls = M.empty + , existinghooks = M.empty + , workers = Nothing + , cachedcurrentbranch = Nothing + , cachedgitenv = Nothing + , urloptions = Nothing + , insmudgecleanfilter = False + , getvectorclock = vc + } + +{- Makes an Annex state object for the specified git repo. + - Ensures the config is read, if it was not already, and performs + - any necessary git repo fixups. -} +new :: Git.Repo -> IO (AnnexState, AnnexRead) +new r = do + r' <- Git.Config.read r + let c = extractGitConfig FromGitConfig r' + st <- newAnnexState c =<< fixupRepo r' c + rd <- newAnnexRead c + return (st, rd) + +{- Performs an action in the Annex monad from a starting state, + - returning a new state. -} +run :: (AnnexState, AnnexRead) -> Annex a -> IO (a, (AnnexState, AnnexRead)) +run (st, rd) a = do + mv <- newMVar st + run' mv rd a + +run' :: MVar AnnexState -> AnnexRead -> Annex a -> IO (a, (AnnexState, AnnexRead)) +run' mvar rd a = do + r <- runReaderT (runAnnex a) (mvar, rd) + st <- takeMVar mvar + return (r, (st, rd)) + +{- Performs an action in the Annex monad from a starting state, + - and throws away the changed state. -} +eval :: (AnnexState, AnnexRead) -> Annex a -> IO a +eval v a = fst <$> run v a + +{- Makes a runner action, that allows diving into IO and from inside + - the IO action, running an Annex action. -} +makeRunner :: Annex (Annex a -> IO a) +makeRunner = do + (mvar, rd) <- ask + return $ \a -> do + (r, (s, _rd)) <- run' mvar rd a + putMVar mvar s + return r + +getRead :: (AnnexRead -> v) -> Annex v +getRead selector = selector . snd <$> ask + +getState :: (AnnexState -> v) -> Annex v +getState selector = do + mvar <- fst <$> ask + st <- liftIO $ readMVar mvar + return $ selector st + +changeState :: (AnnexState -> AnnexState) -> Annex () +changeState modifier = do + mvar <- fst <$> ask + liftIO $ modifyMVar_ mvar $ return . modifier + +withState :: (AnnexState -> IO (AnnexState, b)) -> Annex b +withState modifier = do + mvar <- fst <$> ask + liftIO $ modifyMVar mvar modifier + +{- Sets a field to a value -} +setField :: String -> String -> Annex () +setField field value = changeState $ \st -> + st { fields = M.insert field value $ fields st } + +{- Adds a cleanup action to perform. -} +addCleanupAction :: CleanupAction -> Annex () -> Annex () +addCleanupAction k a = changeState $ \st -> + st { cleanupactions = M.insert k a $ cleanupactions st } + +{- Sets the type of output to emit. -} +setOutput :: OutputType -> Annex () +setOutput o = changeState $ \st -> + let m = output st + in st { output = m { outputType = adjustOutputType (outputType m) o } } + +{- Gets the value of a field. -} +getField :: String -> Annex (Maybe String) +getField field = M.lookup field <$> getState fields + +{- Returns the annex's git repository. -} +gitRepo :: Annex Git.Repo +gitRepo = getState repo + +{- Runs an IO action in the annex's git repository. -} +inRepo :: (Git.Repo -> IO a) -> Annex a +inRepo a = liftIO . a =<< gitRepo + +{- Extracts a value from the annex's git repisitory. -} +fromRepo :: (Git.Repo -> a) -> Annex a +fromRepo a = a <$> gitRepo + +{- Calculates a value from an annex's git repository and its GitConfig. -} +calcRepo :: (Git.Repo -> GitConfig -> IO a) -> Annex a +calcRepo a = do + s <- getState id + liftIO $ a (repo s) (gitconfig s) + +calcRepo' :: (Git.Repo -> GitConfig -> a) -> Annex a +calcRepo' f = do + s <- getState id + pure $ f (repo s) (gitconfig s) + +{- Gets the GitConfig settings. -} +getGitConfig :: Annex GitConfig +getGitConfig = getState gitconfig + +{- Overrides a GitConfig setting. The modification persists across + - reloads of the repo's config. -} +overrideGitConfig :: (GitConfig -> GitConfig) -> Annex () +overrideGitConfig f = changeState $ \st -> st + { gitconfigadjustment = gitconfigadjustment st . f + , gitconfig = f (gitconfig st) + } + +{- Adds an adjustment to the Repo data. Adjustments persist across reloads + - of the repo's config. + - + - Note that the action may run more than once, and should avoid eg, + - appending the same value to a repo's config when run repeatedly. + -} +adjustGitRepo :: (Git.Repo -> IO Git.Repo) -> Annex () +adjustGitRepo a = do + changeState $ \st -> st { repoadjustment = \r -> repoadjustment st r >>= a } + changeGitRepo =<< gitRepo + +{- Adds git config setting, like "foo=bar". It will be passed with -c + - to git processes. The config setting is also recorded in the Repo, + - and the GitConfig is updated. -} +addGitConfigOverride :: String -> Annex () +addGitConfigOverride v = do + adjustGitRepo $ \r -> + Git.Config.store (encodeBS v) Git.Config.ConfigList $ + r { Git.gitGlobalOpts = go (Git.gitGlobalOpts r) } + changeState $ \st -> st { gitconfigoverride = v : gitconfigoverride st } + where + -- Remove any prior occurrence of the setting to avoid + -- building up many of them when the adjustment is run repeatedly, + -- and add the setting to the end. + go [] = [Param "-c", Param v] + go (Param "-c": Param v':rest) | v' == v = go rest + go (c:rest) = c : go rest + +{- Values that were passed to addGitConfigOverride. -} +getGitConfigOverrides :: Annex [String] +getGitConfigOverrides = reverse <$> getState gitconfigoverride + +{- Changing the git Repo data also involves re-extracting its GitConfig. -} +changeGitRepo :: Git.Repo -> Annex () +changeGitRepo r = do + repoadjuster <- getState repoadjustment + gitconfigadjuster <- getState gitconfigadjustment + r' <- liftIO $ repoadjuster r + changeState $ \st -> st + { repo = r' + , gitconfig = gitconfigadjuster $ + extractGitConfig FromGitConfig r' + } + +{- Gets the RemoteGitConfig from a remote, given the Git.Repo for that + - remote. -} +getRemoteGitConfig :: Git.Repo -> Annex RemoteGitConfig +getRemoteGitConfig r = do + g <- gitRepo + liftIO $ atomically $ extractRemoteGitConfig g (Git.repoDescribe r) + +{- Converts an Annex action into an IO action, that runs with a copy + - of the current Annex state. + - + - Use with caution; the action should not rely on changing the + - state, as it will be thrown away. -} +withCurrentState :: Annex a -> Annex (IO a) +withCurrentState a = do + (mvar, rd) <- ask + st <- liftIO $ readMVar mvar + return $ eval (st, rd) a + +{- It's not safe to use setCurrentDirectory in the Annex monad, + - because the git repo paths are stored relative. + - Instead, use this. + -} +changeDirectory :: FilePath -> Annex () +changeDirectory d = do + r <- liftIO . Git.adjustPath absPath =<< gitRepo + liftIO $ setCurrentDirectory d + r' <- liftIO $ Git.relPath r + changeState $ \st -> st { repo = r' } + +incError :: Annex () +incError = changeState $ \st -> + let !c = errcounter st + 1 + !st' = st { errcounter = c } + in st' + +getGitRemotes :: Annex [Git.Repo] +getGitRemotes = do + st <- getState id + case gitremotes st of + Just rs -> return rs + Nothing -> do + rs <- liftIO $ Git.Construct.fromRemotes (repo st) + changeState $ \st' -> st' { gitremotes = Just rs } + return rs diff --git a/Annex/Action.hs b/Annex/Action.hs new file mode 100644 index 0000000000..9eaf169851 --- /dev/null +++ b/Annex/Action.hs @@ -0,0 +1,105 @@ +{- git-annex actions + - + - Copyright 2010-2022 Joey Hess + - + - Licensed under the GNU AGPL version 3 or higher. + -} + +{-# LANGUAGE CPP #-} + +module Annex.Action ( + action, + verifiedAction, + startup, + quiesce, + stopCoProcesses, +) where + +import qualified Data.Map as M + +import Annex.Common +import qualified Annex +import Annex.Content +import Annex.CatFile +import Annex.CheckAttr +import Annex.HashObject +import Annex.CheckIgnore +import Annex.TransferrerPool +import qualified Database.Keys + +#ifndef mingw32_HOST_OS +import Control.Concurrent.STM +import System.Posix.Signals +#endif + +{- Runs an action that may throw exceptions, catching and displaying them. -} +action :: Annex () -> Annex Bool +action a = tryNonAsync a >>= \case + Right () -> return True + Left e -> do + warning (UnquotedString (show e)) + return False + +verifiedAction :: Annex Verification -> Annex (Bool, Verification) +verifiedAction a = tryNonAsync a >>= \case + Right v -> return (True, v) + Left e -> do + warning (UnquotedString (show e)) + return (False, UnVerified) + + +{- Actions to perform each time ran. -} +startup :: Annex () +startup = do +#ifndef mingw32_HOST_OS + av <- Annex.getRead Annex.signalactions + let propagate sig = liftIO $ installhandleronce sig av + propagate sigINT + propagate sigQUIT + propagate sigTERM + propagate sigTSTP + propagate sigCONT + propagate sigHUP + -- sigWINCH is not propagated; it should not be needed, + -- and the concurrent-output library installs its own signal + -- handler for it. + -- sigSTOP and sigKILL cannot be caught, so will not be propagated. + where + installhandleronce sig av = void $ + installHandler sig (CatchOnce (gotsignal sig av)) Nothing + gotsignal sig av = do + mapM_ (\a -> a (fromIntegral sig)) =<< atomically (readTVar av) + raiseSignal sig + installhandleronce sig av +#else + return () +#endif + +{- Rn all cleanup actions, save all state, stop all long-running child + - processes. + - + - This can be run repeatedly with other Annex actions run in between, + - but usually it is run only once at the end. + - + - When passed True, avoids making any commits to the git-annex branch, + - leaving changes in the journal for later commit. + -} +quiesce :: Bool -> Annex () +quiesce nocommit = do + cas <- Annex.withState $ \st -> return + ( st { Annex.cleanupactions = mempty } + , Annex.cleanupactions st + ) + sequence_ (M.elems cas) + saveState nocommit + stopCoProcesses + Database.Keys.closeDb + +{- Stops all long-running child processes, including git query processes. -} +stopCoProcesses :: Annex () +stopCoProcesses = do + catFileStop + checkAttrStop + hashObjectStop + checkIgnoreStop + emptyTransferrerPool diff --git a/Annex/AdjustedBranch.hs b/Annex/AdjustedBranch.hs new file mode 100644 index 0000000000..94fdeea2ea --- /dev/null +++ b/Annex/AdjustedBranch.hs @@ -0,0 +1,680 @@ +{- adjusted branch + - + - Copyright 2016-2023 Joey Hess + - + - Licensed under the GNU AGPL version 3 or higher. + -} + +{-# LANGUAGE BangPatterns, OverloadedStrings #-} + +module Annex.AdjustedBranch ( + Adjustment(..), + LinkAdjustment(..), + PresenceAdjustment(..), + LinkPresentAdjustment(..), + adjustmentHidesFiles, + adjustmentIsStable, + OrigBranch, + AdjBranch(..), + originalToAdjusted, + adjustedToOriginal, + fromAdjustedBranch, + getAdjustment, + enterAdjustedBranch, + adjustedBranchRefresh, + adjustedBranchRefreshFull, + adjustBranch, + adjustTree, + adjustToCrippledFileSystem, + commitForAdjustedBranch, + propigateAdjustedCommits, + propigateAdjustedCommits', + commitAdjustedTree, + commitAdjustedTree', + BasisBranch(..), + basisBranch, + setBasisBranch, + preventCommits, + AdjustedClone(..), + checkAdjustedClone, + checkVersionSupported, + isGitVersionSupported, +) where + +import Annex.Common +import Types.AdjustedBranch +import Annex.AdjustedBranch.Name +import qualified Annex +import Git +import Git.Types +import qualified Git.Branch +import qualified Git.Ref +import qualified Git.Command +import qualified Git.Tree +import qualified Git.DiffTree +import Git.Tree (TreeItem(..)) +import Git.Sha +import Git.Env +import Git.Index +import Git.FilePath +import qualified Git.LockFile +import qualified Git.Version +import Annex.CatFile +import Annex.Link +import Annex.Content.Presence +import Annex.CurrentBranch +import Types.CleanupActions +import qualified Database.Keys +import Config +import Logs.View (is_branchView) +import Logs.AdjustedBranchUpdate + +import Data.Time.Clock.POSIX +import qualified Data.Map as M + +class AdjustTreeItem t where + -- How to perform various adjustments to a TreeItem. + adjustTreeItem :: t -> TreeItem -> Annex (Maybe TreeItem) + -- Will adjusting a given tree always yield the same adjusted tree? + adjustmentIsStable :: t -> Bool + +instance AdjustTreeItem Adjustment where + adjustTreeItem (LinkAdjustment l) t = adjustTreeItem l t + adjustTreeItem (PresenceAdjustment p Nothing) t = adjustTreeItem p t + adjustTreeItem (PresenceAdjustment p (Just l)) t = + adjustTreeItem p t >>= \case + Nothing -> return Nothing + Just t' -> adjustTreeItem l t' + adjustTreeItem (LinkPresentAdjustment l) t = adjustTreeItem l t + + adjustmentIsStable (LinkAdjustment l) = adjustmentIsStable l + adjustmentIsStable (PresenceAdjustment p _) = adjustmentIsStable p + adjustmentIsStable (LinkPresentAdjustment l) = adjustmentIsStable l + +instance AdjustTreeItem LinkAdjustment where + adjustTreeItem UnlockAdjustment = + ifSymlink adjustToPointer noAdjust + adjustTreeItem LockAdjustment = + ifSymlink noAdjust adjustToSymlink + adjustTreeItem FixAdjustment = + ifSymlink adjustToSymlink noAdjust + adjustTreeItem UnFixAdjustment = + ifSymlink (adjustToSymlink' gitAnnexLinkCanonical) noAdjust + + adjustmentIsStable _ = True + +instance AdjustTreeItem PresenceAdjustment where + adjustTreeItem HideMissingAdjustment = + ifPresent noAdjust hideAdjust + adjustTreeItem ShowMissingAdjustment = + noAdjust + + adjustmentIsStable HideMissingAdjustment = False + adjustmentIsStable ShowMissingAdjustment = True + +instance AdjustTreeItem LinkPresentAdjustment where + adjustTreeItem UnlockPresentAdjustment = + ifPresent adjustToPointer adjustToSymlink + adjustTreeItem LockPresentAdjustment = + -- Turn all pointers back to symlinks, whether the content + -- is present or not. This is done because the content + -- availability may have changed and the branch not been + -- re-adjusted to keep up, so there may be pointers whose + -- content is not present. + ifSymlink noAdjust adjustToSymlink + + adjustmentIsStable UnlockPresentAdjustment = False + adjustmentIsStable LockPresentAdjustment = True + +ifSymlink + :: (TreeItem -> Annex a) + -> (TreeItem -> Annex a) + -> TreeItem + -> Annex a +ifSymlink issymlink notsymlink ti@(TreeItem _f m _s) + | toTreeItemType m == Just TreeSymlink = issymlink ti + | otherwise = notsymlink ti + +ifPresent + :: (TreeItem -> Annex (Maybe TreeItem)) + -> (TreeItem -> Annex (Maybe TreeItem)) + -> TreeItem + -> Annex (Maybe TreeItem) +ifPresent ispresent notpresent ti@(TreeItem _ _ s) = + catKey s >>= \case + Just k -> ifM (inAnnex k) (ispresent ti, notpresent ti) + Nothing -> return (Just ti) + +noAdjust :: TreeItem -> Annex (Maybe TreeItem) +noAdjust = return . Just + +hideAdjust :: TreeItem -> Annex (Maybe TreeItem) +hideAdjust _ = return Nothing + +adjustToPointer :: TreeItem -> Annex (Maybe TreeItem) +adjustToPointer ti@(TreeItem f _m s) = catKey s >>= \case + Just k -> do + Database.Keys.addAssociatedFile k f + Just . TreeItem f (fromTreeItemType TreeFile) + <$> hashPointerFile k + Nothing -> return (Just ti) + +adjustToSymlink :: TreeItem -> Annex (Maybe TreeItem) +adjustToSymlink = adjustToSymlink' gitAnnexLink + +adjustToSymlink' :: (RawFilePath -> Key -> Git.Repo -> GitConfig -> IO RawFilePath) -> TreeItem -> Annex (Maybe TreeItem) +adjustToSymlink' gitannexlink ti@(TreeItem f _m s) = catKey s >>= \case + Just k -> do + absf <- inRepo $ \r -> absPath $ fromTopFilePath f r + linktarget <- calcRepo $ gitannexlink absf k + Just . TreeItem f (fromTreeItemType TreeSymlink) + <$> hashSymlink linktarget + Nothing -> return (Just ti) + +-- This is a hidden branch ref, that's used as the basis for the AdjBranch, +-- since pushes can overwrite the OrigBranch at any time. So, changes +-- are propigated from the AdjBranch to the head of the BasisBranch. +newtype BasisBranch = BasisBranch Ref + +-- The basis for refs/heads/adjusted/master(unlocked) is +-- refs/basis/adjusted/master(unlocked). +basisBranch :: AdjBranch -> BasisBranch +basisBranch (AdjBranch adjbranch) = BasisBranch $ + Ref ("refs/basis/" <> fromRef' (Git.Ref.base adjbranch)) + +getAdjustment :: Branch -> Maybe Adjustment +getAdjustment = fmap fst . adjustedToOriginal + +fromAdjustedBranch :: Branch -> OrigBranch +fromAdjustedBranch b = maybe b snd (adjustedToOriginal b) + +{- Enter an adjusted version of current branch (or, if already in an + - adjusted version of a branch, changes the adjustment of the original + - branch). + - + - Can fail, if no branch is checked out, or if the adjusted branch already + - exists, or if staged changes prevent a checkout. + -} +enterAdjustedBranch :: Adjustment -> Annex Bool +enterAdjustedBranch adj = inRepo Git.Branch.current >>= \case + Just currbranch -> case getAdjustment currbranch of + Just curradj | curradj == adj -> + updateAdjustedBranch adj (AdjBranch currbranch) + (fromAdjustedBranch currbranch) + _ -> go currbranch + Nothing -> do + warning "not on any branch!" + return False + where + go currbranch = do + let origbranch = fromAdjustedBranch currbranch + let adjbranch = adjBranch $ originalToAdjusted origbranch adj + ifM (inRepo (Git.Ref.exists adjbranch) <&&> (not <$> Annex.getRead Annex.force) <&&> pure (not (is_branchView origbranch))) + ( do + mapM_ (warning . UnquotedString . unwords) + [ [ "adjusted branch" + , Git.Ref.describe adjbranch + , "already exists." + ] + , [ "Aborting because that branch may have changes that have not yet reached" + , Git.Ref.describe origbranch + ] + , [ "You can check out the adjusted branch manually to enter it," + , "or add the --force option to overwrite the old branch." + ] + ] + return False + , do + starttime <- liftIO getPOSIXTime + b <- preventCommits $ const $ + adjustBranch adj origbranch + ok <- checkoutAdjustedBranch b False + when ok $ + recordAdjustedBranchUpdateFinished starttime + return ok + ) + +checkoutAdjustedBranch :: AdjBranch -> Bool -> Annex Bool +checkoutAdjustedBranch (AdjBranch b) quietcheckout = do + -- checkout can have output in large repos + unless quietcheckout + showOutput + inRepo $ Git.Command.runBool $ + [ Param "checkout" + , Param $ fromRef $ Git.Ref.base b + , if quietcheckout then Param "--quiet" else Param "--progress" + ] + +{- Already in a branch with this adjustment, but the user asked to enter it + - again. This should have the same result as propagating any commits + - back to the original branch, checking out the original branch, deleting + - and rebuilding the adjusted branch, and then checking it out. + - But, it can be implemented more efficiently than that. + -} +updateAdjustedBranch :: Adjustment -> AdjBranch -> OrigBranch -> Annex Bool +updateAdjustedBranch adj (AdjBranch currbranch) origbranch + | not (adjustmentIsStable adj) = do + (b, origheadfile, newheadfile) <- preventCommits $ \commitlck -> do + -- Avoid losing any commits that the adjusted branch + -- has that have not yet been propigated back to the + -- origbranch. + _ <- propigateAdjustedCommits' True origbranch adj commitlck + + origheadfile <- inRepo $ readFileStrict . Git.Ref.headFile + origheadsha <- inRepo (Git.Ref.sha currbranch) + + b <- adjustBranch adj origbranch + + -- Git normally won't do anything when asked to check + -- out the currently checked out branch, even when its + -- ref has changed. Work around this by writing a raw + -- sha to .git/HEAD. + newheadfile <- case origheadsha of + Just s -> do + inRepo $ \r -> do + let newheadfile = fromRef s + writeFile (Git.Ref.headFile r) newheadfile + return (Just newheadfile) + _ -> return Nothing + + return (b, origheadfile, newheadfile) + + -- Make git checkout quiet to avoid warnings about + -- disconnected branch tips being lost. + ok <- checkoutAdjustedBranch b True + + -- Avoid leaving repo with detached head. + unless ok $ case newheadfile of + Nothing -> noop + Just v -> preventCommits $ \_commitlck -> inRepo $ \r -> do + v' <- readFileStrict (Git.Ref.headFile r) + when (v == v') $ + writeFile (Git.Ref.headFile r) origheadfile + + return ok + | otherwise = preventCommits $ \commitlck -> do + -- Done for consistency. + _ <- propigateAdjustedCommits' True origbranch adj commitlck + -- No need to actually update the branch because the + -- adjustment is stable. + return True + +{- Passed an action that, if it succeeds may get or drop the Key associated + - with the file. When the adjusted branch needs to be refreshed to reflect + - those changes, it's handled here. + - + - Note that the AssociatedFile must be verified by this to point to the + - Key. In some cases, the value was provided by the user and might not + - really be an associated file. + -} +adjustedBranchRefresh :: AssociatedFile -> Annex a -> Annex a +adjustedBranchRefresh _af a = do + r <- a + go + return r + where + go = getCurrentBranch >>= \case + (Just origbranch, Just adj) -> + unless (adjustmentIsStable adj) $ do + recordAdjustedBranchUpdateNeeded + n <- annexAdjustedBranchRefresh <$> Annex.getGitConfig + unless (n == 0) $ ifM (checkcounter n) + -- This is slow, it would be better to incrementally + -- adjust the AssociatedFile, and only call this once + -- at shutdown to handle cases where not all + -- AssociatedFiles are known. + ( adjustedBranchRefreshFull' adj origbranch + , Annex.addCleanupAction AdjustedBranchUpdate $ + adjustedBranchRefreshFull' adj origbranch + ) + _ -> return () + + checkcounter n + -- Special case, 1 (or true) refreshes only at shutdown. + | n == 1 = pure False + | otherwise = Annex.withState $ \s -> + let !c = Annex.adjustedbranchrefreshcounter s + 1 + !enough = c >= pred n + !c' = if enough then 0 else c + !s' = s { Annex.adjustedbranchrefreshcounter = c' } + in pure (s', enough) + +{- Slow, but more dependable version of adjustedBranchRefresh that + - does not rely on all AssociatedFiles being known. -} +adjustedBranchRefreshFull :: Adjustment -> OrigBranch -> Annex () +adjustedBranchRefreshFull adj origbranch = + whenM isAdjustedBranchUpdateNeeded $ do + adjustedBranchRefreshFull' adj origbranch + +adjustedBranchRefreshFull' :: Adjustment -> OrigBranch -> Annex () +adjustedBranchRefreshFull' adj origbranch = do + -- Restage pointer files so modifications to them due to get/drop + -- do not prevent checking out the updated adjusted branch. + restagePointerFiles =<< Annex.gitRepo + starttime <- liftIO getPOSIXTime + let adjbranch = originalToAdjusted origbranch adj + ifM (updateAdjustedBranch adj adjbranch origbranch) + ( recordAdjustedBranchUpdateFinished starttime + , warning "Updating adjusted branch failed." + ) + +adjustToCrippledFileSystem :: Annex () +adjustToCrippledFileSystem = do + warning "Entering an adjusted branch where files are unlocked as this filesystem does not support locked files." + checkVersionSupported + whenM (isNothing <$> inRepo Git.Branch.current) $ + commitForAdjustedBranch [] + inRepo Git.Branch.current >>= \case + Just currbranch -> case getAdjustment currbranch of + Just curradj | curradj == adj -> return () + _ -> do + let adjbranch = originalToAdjusted currbranch adj + ifM (inRepo (Git.Ref.exists $ adjBranch adjbranch)) + ( unlessM (checkoutAdjustedBranch adjbranch False) $ + failedenter + , unlessM (enterAdjustedBranch adj) $ + failedenter + ) + Nothing -> failedenter + where + adj = LinkAdjustment UnlockAdjustment + failedenter = warning "Failed to enter adjusted branch!" + +{- Commit before entering adjusted branch. Only needs to be done + - when the current branch does not have any commits yet. + - + - If something is already staged, it will be committed, but otherwise + - an empty commit will be made. + -} +commitForAdjustedBranch :: [CommandParam] -> Annex () +commitForAdjustedBranch ps = do + cmode <- annexCommitMode <$> Annex.getGitConfig + let cquiet = Git.Branch.CommitQuiet True + void $ inRepo $ Git.Branch.commitCommand cmode cquiet $ + [ Param "--allow-empty" + , Param "-m" + , Param "commit before entering adjusted branch" + ] ++ ps + +setBasisBranch :: BasisBranch -> Ref -> Annex () +setBasisBranch (BasisBranch basis) new = + inRepo $ Git.Branch.update' basis new + +setAdjustedBranch :: String -> AdjBranch -> Ref -> Annex () +setAdjustedBranch msg (AdjBranch b) r = inRepo $ Git.Branch.update msg b r + +adjustBranch :: Adjustment -> OrigBranch -> Annex AdjBranch +adjustBranch adj origbranch = do + -- Start basis off with the current value of the origbranch. + setBasisBranch basis origbranch + sha <- adjustCommit adj basis + setAdjustedBranch "entering adjusted branch" adjbranch sha + return adjbranch + where + adjbranch = originalToAdjusted origbranch adj + basis = basisBranch adjbranch + +adjustCommit :: Adjustment -> BasisBranch -> Annex Sha +adjustCommit adj basis = do + treesha <- adjustTree adj basis + commitAdjustedTree treesha basis + +adjustTree :: Adjustment -> BasisBranch -> Annex Sha +adjustTree adj (BasisBranch basis) = do + let toadj = adjustTreeItem adj + treesha <- Git.Tree.adjustTree + toadj + [] + (\_old new -> new) + [] + basis =<< Annex.gitRepo + return treesha + +type CommitsPrevented = Git.LockFile.LockHandle + +{- Locks git's index file, preventing git from making a commit, merge, + - or otherwise changing the HEAD ref while the action is run. + - + - Throws an IO exception if the index file is already locked. + -} +preventCommits :: (CommitsPrevented -> Annex a) -> Annex a +preventCommits = bracket setup cleanup + where + setup = do + lck <- fromRepo $ indexFileLock . indexFile + liftIO $ Git.LockFile.openLock (fromRawFilePath lck) + cleanup = liftIO . Git.LockFile.closeLock + +{- Commits a given adjusted tree, with the provided parent ref. + - + - This should always yield the same value, even if performed in different + - clones of a repo, at different times. The commit message and other + - metadata is based on the parent. + -} +commitAdjustedTree :: Sha -> BasisBranch -> Annex Sha +commitAdjustedTree treesha parent@(BasisBranch b) = + commitAdjustedTree' treesha parent [b] + +commitAdjustedTree' :: Sha -> BasisBranch -> [Ref] -> Annex Sha +commitAdjustedTree' treesha (BasisBranch basis) parents = + go =<< catCommit basis + where + go Nothing = do + cmode <- annexCommitMode <$> Annex.getGitConfig + inRepo $ mkcommit cmode + go (Just basiscommit) = do + cmode <- annexCommitMode <$> Annex.getGitConfig + inRepo $ commitWithMetaData + (commitAuthorMetaData basiscommit) + (commitCommitterMetaData basiscommit) + (mkcommit cmode) + -- Make sure that the exact message is used in the commit, + -- since that message is looked for later. + -- After git-annex 10.20240227, it's possible to use + -- commitTree instead of this, but this is being kept + -- for some time, for compatability with older versions. + mkcommit cmode = Git.Branch.commitTreeExactMessage cmode + adjustedBranchCommitMessage parents treesha + +{- This message should never be changed. -} +adjustedBranchCommitMessage :: String +adjustedBranchCommitMessage = "git-annex adjusted branch" + +{- Allow for a trailing newline after the message. -} +hasAdjustedBranchCommitMessage :: Commit -> Bool +hasAdjustedBranchCommitMessage c = + dropWhileEnd (\x -> x == '\n' || x == '\r') (commitMessage c) + == adjustedBranchCommitMessage + +findAdjustingCommit :: AdjBranch -> Annex (Maybe Commit) +findAdjustingCommit (AdjBranch b) = go =<< catCommit b + where + go Nothing = return Nothing + go (Just c) + | hasAdjustedBranchCommitMessage c = return (Just c) + | otherwise = case commitParent c of + [p] -> go =<< catCommit p + _ -> return Nothing + +{- Check for any commits present on the adjusted branch that have not yet + - been propigated to the basis branch, and propagate them to the basis + - branch and from there on to the orig branch. + - + - After propigating the commits back to the basis branch, + - rebase the adjusted branch on top of the updated basis branch. + -} +propigateAdjustedCommits :: OrigBranch -> Adjustment -> Annex () +propigateAdjustedCommits origbranch adj = + preventCommits $ \commitsprevented -> + join $ snd <$> propigateAdjustedCommits' True origbranch adj commitsprevented + +{- Returns sha of updated basis branch, and action which will rebase + - the adjusted branch on top of the updated basis branch. -} +propigateAdjustedCommits' + :: Bool + -> OrigBranch + -> Adjustment + -> CommitsPrevented + -> Annex (Maybe Sha, Annex ()) +propigateAdjustedCommits' warnwhendiverged origbranch adj _commitsprevented = + inRepo (Git.Ref.sha basis) >>= \case + Just origsha -> catCommit currbranch >>= \case + Just currcommit -> + newcommits >>= go origsha origsha False >>= \case + Left e -> do + warning (UnquotedString e) + return (Nothing, return ()) + Right newparent -> return + ( Just newparent + , rebase currcommit newparent + ) + Nothing -> return (Nothing, return ()) + Nothing -> do + warning $ UnquotedString $ + "Cannot find basis ref " ++ fromRef basis ++ "; not propagating adjusted commits to original branch " ++ fromRef origbranch + return (Nothing, return ()) + where + (BasisBranch basis) = basisBranch adjbranch + adjbranch@(AdjBranch currbranch) = originalToAdjusted origbranch adj + newcommits = inRepo $ Git.Branch.changedCommits basis currbranch + -- Get commits oldest first, so they can be processed + -- in order made. + [Param "--reverse"] + go origsha parent _ [] = do + setBasisBranch (BasisBranch basis) parent + inRepo (Git.Ref.sha origbranch) >>= \case + Just origbranchsha | origbranchsha /= origsha -> + when warnwhendiverged $ + warning $ UnquotedString $ + "Original branch " ++ fromRef origbranch ++ " has diverged from current adjusted branch " ++ fromRef currbranch + _ -> inRepo $ Git.Branch.update' origbranch parent + return (Right parent) + go origsha parent pastadjcommit (sha:l) = catCommit sha >>= \case + Just c + | hasAdjustedBranchCommitMessage c -> + go origsha parent True l + | pastadjcommit -> + reverseAdjustedCommit parent adj (sha, c) origbranch + >>= \case + Left e -> return (Left e) + Right commit -> go origsha commit pastadjcommit l + _ -> go origsha parent pastadjcommit l + rebase currcommit newparent = do + -- Reuse the current adjusted tree, and reparent it + -- on top of the newparent. + commitAdjustedTree (commitTree currcommit) (BasisBranch newparent) + >>= inRepo . Git.Branch.update rebaseOnTopMsg currbranch + +rebaseOnTopMsg :: String +rebaseOnTopMsg = "rebasing adjusted branch on top of updated original branch" + +{- Reverses an adjusted commit, and commit with provided commitparent, + - yielding a commit sha. + - + - Adjusts the tree of the commitparent, changing only the files that the + - commit changed, and reverse adjusting those changes. + - + - The commit message, and the author and committer metadata are + - copied over from the basiscommit. However, any gpg signature + - will be lost, and any other headers are not copied either. -} +reverseAdjustedCommit :: Sha -> Adjustment -> (Sha, Commit) -> OrigBranch -> Annex (Either String Sha) +reverseAdjustedCommit commitparent adj (csha, basiscommit) origbranch + | length (commitParent basiscommit) > 1 = return $ + Left $ "unable to propagate merge commit " ++ show csha ++ " back to " ++ show origbranch + | otherwise = do + cmode <- annexCommitMode <$> Annex.getGitConfig + treesha <- reverseAdjustedTree commitparent adj csha + revadjcommit <- inRepo $ commitWithMetaData + (commitAuthorMetaData basiscommit) + (commitCommitterMetaData basiscommit) $ + Git.Branch.commitTree cmode + [commitMessage basiscommit] + [commitparent] treesha + return (Right revadjcommit) + +{- Adjusts the tree of the basis, changing only the files that the + - commit changed, and reverse adjusting those changes. + - + - commitDiff does not support merge commits, so the csha must not be a + - merge commit. -} +reverseAdjustedTree :: Sha -> Adjustment -> Sha -> Annex Sha +reverseAdjustedTree basis adj csha = do + (diff, cleanup) <- inRepo (Git.DiffTree.commitDiff csha) + let (adds, others) = partition (\dti -> Git.DiffTree.srcsha dti `elem` nullShas) diff + let (removes, changes) = partition (\dti -> Git.DiffTree.dstsha dti `elem` nullShas) others + adds' <- catMaybes <$> + mapM (adjustTreeItem reverseadj) (map diffTreeToTreeItem adds) + treesha <- Git.Tree.adjustTree + (propchanges changes) + adds' + (\_old new -> new) + (map Git.DiffTree.file removes) + basis + =<< Annex.gitRepo + void $ liftIO cleanup + return treesha + where + reverseadj = reverseAdjustment adj + propchanges changes ti@(TreeItem f _ _) = + case M.lookup (norm f) m of + Nothing -> return (Just ti) -- not changed + Just change -> adjustTreeItem reverseadj change + where + m = M.fromList $ map (\i@(TreeItem f' _ _) -> (norm f', i)) $ + map diffTreeToTreeItem changes + norm = normalise . fromRawFilePath . getTopFilePath + +diffTreeToTreeItem :: Git.DiffTree.DiffTreeItem -> TreeItem +diffTreeToTreeItem dti = TreeItem + (Git.DiffTree.file dti) + (Git.DiffTree.dstmode dti) + (Git.DiffTree.dstsha dti) + +data AdjustedClone = InAdjustedClone | NotInAdjustedClone + +{- Cloning a repository that has an adjusted branch checked out will + - result in the clone having the same adjusted branch checked out -- but + - the origbranch won't exist in the clone, nor will the basis. So + - to properly set up the adjusted branch, the origbranch and basis need + - to be set. + - + - We can't trust that the origin's origbranch matches up with the currently + - checked out adjusted branch; the origin could have the two branches + - out of sync (eg, due to another branch having been pushed to the origin's + - origbranch), or due to a commit on its adjusted branch not having been + - propigated back to origbranch. + - + - So, find the adjusting commit on the currently checked out adjusted + - branch, and use the parent of that commit as the basis, and set the + - origbranch to it. + -} +checkAdjustedClone :: Annex AdjustedClone +checkAdjustedClone = ifM isBareRepo + ( return NotInAdjustedClone + , go =<< inRepo Git.Branch.current + ) + where + go Nothing = return NotInAdjustedClone + go (Just currbranch) = case adjustedToOriginal currbranch of + Nothing -> return NotInAdjustedClone + Just (adj, origbranch) -> do + let basis@(BasisBranch bb) = basisBranch (originalToAdjusted origbranch adj) + unlessM (inRepo $ Git.Ref.exists bb) $ do + aps <- fmap commitParent <$> findAdjustingCommit (AdjBranch currbranch) + case aps of + Just [p] -> do + unlessM (inRepo $ Git.Ref.exists origbranch) $ + inRepo $ Git.Branch.update' origbranch p + setBasisBranch basis p + _ -> giveup $ "Unable to clean up from clone of adjusted branch; perhaps you should check out " ++ Git.Ref.describe origbranch + return InAdjustedClone + +checkVersionSupported :: Annex () +checkVersionSupported = + unlessM (liftIO isGitVersionSupported) $ + giveup "Your version of git is too old; upgrade it to 2.2.0 or newer to use adjusted branches." + +-- git 2.2.0 needed for GIT_COMMON_DIR which is needed +-- by updateAdjustedBranch to use withWorkTreeRelated. +isGitVersionSupported :: IO Bool +isGitVersionSupported = not <$> Git.Version.older "2.2.0" diff --git a/Annex/AdjustedBranch/Merge.hs b/Annex/AdjustedBranch/Merge.hs new file mode 100644 index 0000000000..904f4ee412 --- /dev/null +++ b/Annex/AdjustedBranch/Merge.hs @@ -0,0 +1,167 @@ +{- adjusted branch merging + - + - Copyright 2016-2023 Joey Hess + - + - Licensed under the GNU AGPL version 3 or higher. + -} + +{-# LANGUAGE BangPatterns, OverloadedStrings #-} + +module Annex.AdjustedBranch.Merge ( + canMergeToAdjustedBranch, + mergeToAdjustedBranch, +) where + +import Annex.Common +import Annex.AdjustedBranch +import qualified Annex +import Git +import Git.Types +import qualified Git.Branch +import qualified Git.Ref +import qualified Git.Command +import qualified Git.Merge +import Git.Sha +import Annex.CatFile +import Annex.AutoMerge +import Annex.Tmp +import Annex.GitOverlay +import Utility.Tmp.Dir +import Utility.CopyFile +import Utility.Directory.Create + +import qualified Data.ByteString as S +import qualified System.FilePath.ByteString as P + +canMergeToAdjustedBranch :: Branch -> (OrigBranch, Adjustment) -> Annex Bool +canMergeToAdjustedBranch tomerge (origbranch, adj) = + inRepo $ Git.Branch.changed currbranch tomerge + where + AdjBranch currbranch = originalToAdjusted origbranch adj + +{- Update the currently checked out adjusted branch, merging the provided + - branch into it. Note that the provided branch should be a non-adjusted + - branch. -} +mergeToAdjustedBranch :: Branch -> (OrigBranch, Adjustment) -> [Git.Merge.MergeConfig] -> Bool -> Git.Branch.CommitMode -> Annex Bool +mergeToAdjustedBranch tomerge (origbranch, adj) mergeconfig canresolvemerge commitmode = catchBoolIO $ + join $ preventCommits go + where + adjbranch@(AdjBranch currbranch) = originalToAdjusted origbranch adj + basis = basisBranch adjbranch + + go commitsprevented = do + (updatedorig, _) <- propigateAdjustedCommits' + False origbranch adj commitsprevented + changestomerge updatedorig + + {- Since the adjusted branch changes files, merging tomerge + - directly into it would likely result in unnecessary merge + - conflicts. To avoid those conflicts, instead merge tomerge into + - updatedorig. The result of the merge can the be + - adjusted to yield the final adjusted branch. + - + - In order to do a merge into a ref that is not checked out, + - set the work tree to a temp directory, and set GIT_DIR + - to another temp directory, in which HEAD contains the + - updatedorig sha. GIT_COMMON_DIR is set to point to the real + - git directory, and so git can read and write objects from there, + - but will use GIT_DIR for HEAD and index. + - + - (Doing the merge this way also lets it run even though the main + - index file is currently locked.) + -} + changestomerge (Just updatedorig) = withOtherTmp $ \othertmpdir -> do + git_dir <- fromRepo Git.localGitDir + let git_dir' = fromRawFilePath git_dir + tmpwt <- fromRepo gitAnnexMergeDir + withTmpDirIn (fromRawFilePath othertmpdir) "git" $ \tmpgit -> withWorkTreeRelated tmpgit $ + withemptydir git_dir tmpwt $ withWorkTree tmpwt $ do + liftIO $ writeFile (tmpgit "HEAD") (fromRef updatedorig) + -- Copy in refs and packed-refs, to work + -- around bug in git 2.13.0, which + -- causes it not to look in GIT_DIR for refs. + refs <- liftIO $ emptyWhenDoesNotExist $ + dirContentsRecursive $ + git_dir' "refs" + let refs' = (git_dir' "packed-refs") : refs + liftIO $ forM_ refs' $ \src -> do + let src' = toRawFilePath src + whenM (doesFileExist src) $ do + dest <- relPathDirToFile git_dir src' + let dest' = toRawFilePath tmpgit P. dest + createDirectoryUnder [git_dir] + (P.takeDirectory dest') + void $ createLinkOrCopy src' dest' + -- This reset makes git merge not care + -- that the work tree is empty; otherwise + -- it will think that all the files have + -- been staged for deletion, and sometimes + -- the merge includes these deletions + -- (for an unknown reason). + -- http://thread.gmane.org/gmane.comp.version-control.git/297237 + inRepo $ Git.Command.run [Param "reset", Param "HEAD", Param "--quiet"] + when (tomerge /= origbranch) $ + showAction $ UnquotedString $ "Merging into " ++ fromRef (Git.Ref.base origbranch) + merged <- autoMergeFrom' tomerge Nothing mergeconfig commitmode True + (const $ resolveMerge (Just updatedorig) tomerge True) + if merged + then do + !mergecommit <- liftIO $ extractSha + <$> S.readFile (tmpgit "HEAD") + -- This is run after the commit lock is dropped. + return $ postmerge mergecommit + else return $ return False + changestomerge Nothing = return $ return False + + withemptydir git_dir d a = bracketIO setup cleanup (const a) + where + setup = do + whenM (doesDirectoryExist d) $ + removeDirectoryRecursive d + createDirectoryUnder [git_dir] (toRawFilePath d) + cleanup _ = removeDirectoryRecursive d + + {- A merge commit has been made between the basisbranch and + - tomerge. Update the basisbranch and origbranch to point + - to that commit, adjust it to get the new adjusted branch, + - and check it out. + - + - But, there may be unstaged work tree changes that conflict, + - so the check out is done by making a normal merge of + - the new adjusted branch. + -} + postmerge (Just mergecommit) = do + setBasisBranch basis mergecommit + inRepo $ Git.Branch.update' origbranch mergecommit + adjtree <- adjustTree adj (BasisBranch mergecommit) + adjmergecommit <- commitAdjustedTree adjtree (BasisBranch mergecommit) + -- Make currbranch be the parent, so that merging + -- this commit will be a fast-forward. + adjmergecommitff <- commitAdjustedTree' adjtree (BasisBranch mergecommit) [currbranch] + showAction "Merging into adjusted branch" + ifM (autoMergeFrom adjmergecommitff (Just currbranch) mergeconfig commitmode canresolvemerge) + ( reparent adjtree adjmergecommit =<< getcurrentcommit + , return False + ) + postmerge Nothing = return False + + -- Now that the merge into the adjusted branch is complete, + -- take the tree from that merge, and attach it on top of the + -- adjmergecommit, if it's different. + reparent adjtree adjmergecommit (Just currentcommit) = do + if (commitTree currentcommit /= adjtree) + then do + cmode <- annexCommitMode <$> Annex.getGitConfig + c <- inRepo $ Git.Branch.commitTree cmode + ["Merged " ++ fromRef tomerge] + [adjmergecommit] + (commitTree currentcommit) + inRepo $ Git.Branch.update "updating adjusted branch" currbranch c + propigateAdjustedCommits origbranch adj + else inRepo $ Git.Branch.update "updating adjusted branch" currbranch adjmergecommit + return True + reparent _ _ Nothing = return False + + getcurrentcommit = inRepo Git.Branch.currentUnsafe >>= \case + Nothing -> return Nothing + Just c -> catCommit c diff --git a/Annex/AdjustedBranch/Name.hs b/Annex/AdjustedBranch/Name.hs new file mode 100644 index 0000000000..7a1b44d54e --- /dev/null +++ b/Annex/AdjustedBranch/Name.hs @@ -0,0 +1,99 @@ +{- adjusted branch names + - + - Copyright 2016-2020 Joey Hess + - + - Licensed under the GNU AGPL version 3 or higher. + -} + +{-# LANGUAGE OverloadedStrings #-} + +module Annex.AdjustedBranch.Name ( + originalToAdjusted, + adjustedToOriginal, + AdjBranch(..), + OrigBranch, +) where + +import Types.AdjustedBranch +import Git +import qualified Git.Ref +import Utility.Misc + +import Control.Applicative +import Data.Char +import qualified Data.ByteString as S + +adjustedBranchPrefix :: S.ByteString +adjustedBranchPrefix = "refs/heads/adjusted/" + +class SerializeAdjustment t where + serializeAdjustment :: t -> S.ByteString + deserializeAdjustment :: S.ByteString -> Maybe t + +instance SerializeAdjustment Adjustment where + serializeAdjustment (LinkAdjustment l) = + serializeAdjustment l + serializeAdjustment (PresenceAdjustment p Nothing) = + serializeAdjustment p + serializeAdjustment (PresenceAdjustment p (Just l)) = + serializeAdjustment p <> "-" <> serializeAdjustment l + serializeAdjustment (LinkPresentAdjustment l) = + serializeAdjustment l + deserializeAdjustment s = + (LinkAdjustment <$> deserializeAdjustment s) + <|> + (PresenceAdjustment <$> deserializeAdjustment s1 <*> pure (deserializeAdjustment s2)) + <|> + (PresenceAdjustment <$> deserializeAdjustment s <*> pure Nothing) + <|> + (LinkPresentAdjustment <$> deserializeAdjustment s) + where + (s1, s2) = separate' (== (fromIntegral (ord '-'))) s + +instance SerializeAdjustment LinkAdjustment where + serializeAdjustment UnlockAdjustment = "unlocked" + serializeAdjustment LockAdjustment = "locked" + serializeAdjustment FixAdjustment = "fixed" + serializeAdjustment UnFixAdjustment = "unfixed" + deserializeAdjustment "unlocked" = Just UnlockAdjustment + deserializeAdjustment "locked" = Just LockAdjustment + deserializeAdjustment "fixed" = Just FixAdjustment + deserializeAdjustment "unfixed" = Just UnFixAdjustment + deserializeAdjustment _ = Nothing + +instance SerializeAdjustment PresenceAdjustment where + serializeAdjustment HideMissingAdjustment = "hidemissing" + serializeAdjustment ShowMissingAdjustment = "showmissing" + deserializeAdjustment "hidemissing" = Just HideMissingAdjustment + deserializeAdjustment "showmissing" = Just ShowMissingAdjustment + deserializeAdjustment _ = Nothing + +instance SerializeAdjustment LinkPresentAdjustment where + serializeAdjustment UnlockPresentAdjustment = "unlockpresent" + serializeAdjustment LockPresentAdjustment = "lockpresent" + deserializeAdjustment "unlockpresent" = Just UnlockPresentAdjustment + deserializeAdjustment "lockpresent" = Just LockPresentAdjustment + deserializeAdjustment _ = Nothing + +newtype AdjBranch = AdjBranch { adjBranch :: Branch } + +originalToAdjusted :: OrigBranch -> Adjustment -> AdjBranch +originalToAdjusted orig adj = AdjBranch $ Ref $ + adjustedBranchPrefix <> base <> "(" <> serializeAdjustment adj <> ")" + where + base = fromRef' (Git.Ref.base orig) + +type OrigBranch = Branch + +adjustedToOriginal :: Branch -> Maybe (Adjustment, OrigBranch) +adjustedToOriginal b + | adjustedBranchPrefix `S.isPrefixOf` bs = do + let (base, as) = separateEnd' (== openparen) (S.drop prefixlen bs) + adj <- deserializeAdjustment (S.takeWhile (/= closeparen) as) + Just (adj, Git.Ref.branchRef (Ref base)) + | otherwise = Nothing + where + bs = fromRef' b + prefixlen = S.length adjustedBranchPrefix + openparen = fromIntegral (ord '(') + closeparen = fromIntegral (ord ')') diff --git a/Annex/AutoMerge.hs b/Annex/AutoMerge.hs new file mode 100644 index 0000000000..bb43d0593b --- /dev/null +++ b/Annex/AutoMerge.hs @@ -0,0 +1,391 @@ +{- git-annex automatic merge conflict resolution + - + - Copyright 2012-2020 Joey Hess + - + - Licensed under the GNU AGPL version 3 or higher. + -} + +{-# LANGUAGE OverloadedStrings #-} + +module Annex.AutoMerge + ( autoMergeFrom + , autoMergeFrom' + , resolveMerge + , commitResolvedMerge + ) where + +import Annex.Common +import qualified Annex +import qualified Annex.Queue +import Annex.CatFile +import Annex.Link +import Annex.Content +import qualified Git.LsFiles as LsFiles +import qualified Git.UpdateIndex as UpdateIndex +import qualified Git.Merge +import qualified Git.Ref +import qualified Git +import qualified Git.Branch +import Git.Types (TreeItemType(..), fromTreeItemType) +import Git.FilePath +import Annex.ReplaceFile +import Annex.VariantFile +import qualified Database.Keys +import Annex.InodeSentinal +import Utility.InodeCache +import Utility.FileMode +import qualified Utility.RawFilePath as R + +import qualified Data.Set as S +import qualified Data.Map as M +import qualified Data.ByteString.Lazy as L +import System.PosixCompat.Files (isSymbolicLink) + +{- Merges from a branch into the current branch (which may not exist yet), + - with automatic merge conflict resolution. + - + - Callers should use Git.Branch.changed first, to make sure that + - there are changes from the current branch to the branch being merged in. + -} +autoMergeFrom :: Git.Ref -> Maybe Git.Ref -> [Git.Merge.MergeConfig] -> Git.Branch.CommitMode -> Bool -> Annex Bool +autoMergeFrom branch currbranch mergeconfig commitmode canresolvemerge = + autoMergeFrom' branch currbranch mergeconfig commitmode canresolvemerge resolvemerge + where + resolvemerge old + | canresolvemerge = resolveMerge old branch False + | otherwise = return False + +autoMergeFrom' :: Git.Ref -> Maybe Git.Ref -> [Git.Merge.MergeConfig] -> Git.Branch.CommitMode -> Bool -> (Maybe Git.Ref -> Annex Bool) -> Annex Bool +autoMergeFrom' branch currbranch mergeconfig commitmode willresolvemerge toresolvemerge = do + showOutput + case currbranch of + Nothing -> go Nothing + Just b -> go =<< inRepo (Git.Ref.sha b) + where + go old = do + -- merge.directoryRenames=conflict plus automatic + -- merge conflict resolution results in files in a + -- "renamed" directory getting variant names, + -- so is not a great combination. If the user has + -- explicitly set it, use it, but otherwise when + -- merge conflicts will be resolved, override + -- to merge.directoryRenames=false. + overridedirectoryrenames <- if willresolvemerge + then isNothing . mergeDirectoryRenames + <$> Annex.getGitConfig + else pure False + let f r + | overridedirectoryrenames = r + { Git.gitGlobalOpts = + Param "-c" + : Param "merge.directoryRenames=false" + : Git.gitGlobalOpts r + } + | otherwise = r + r <- inRepo (Git.Merge.merge branch mergeconfig commitmode . f) + <||> (toresolvemerge old <&&> commitResolvedMerge commitmode) + -- Merging can cause new associated files to appear + -- and the smudge filter will add them to the database. + -- To ensure that this process sees those changes, + -- close the database if it was open. + Database.Keys.closeDb + return r + +{- Resolves a conflicted merge. It's important that any conflicts be + - resolved in a way that itself avoids later merge conflicts, since + - multiple repositories may be doing this concurrently. + - + - Only merge conflicts where at least one side is an annexed file + - is resolved. + - + - This uses the Keys pointed to by the files to construct new + - filenames. So when both sides modified annexed file foo, + - it will be deleted, and replaced with files foo.variant-A and + - foo.variant-B. + - + - On the other hand, when one side deleted foo, and the other modified it, + - it will be deleted, and the modified version stored as file + - foo.variant-A (or B). + - + - It's also possible that one side has foo as an annexed file, and + - the other as a directory or non-annexed file. The annexed file + - is renamed to resolve the merge, and the other object is preserved as-is. + - + - The merge is resolved in the work tree and files + - staged, to clean up from a conflicted merge that was run in the work + - tree. + - + - This is complicated by needing to support merges run in an overlay + - work tree, in which case the CWD won't be within the work tree. + - In this mode, there is no need to update the work tree at all, + - as the overlay work tree will get deleted. + - + - Unlocked files remain unlocked after merging, and locked files + - remain locked. When the merge conflict is between a locked and unlocked + - file, that otherwise point to the same content, the unlocked mode wins. + - This is done because only unlocked files work in filesystems that don't + - support symlinks. + - + - Returns false when there are no merge conflicts to resolve. + - A git merge can fail for other reasons, and this allows detecting + - such failures. + -} +resolveMerge :: Maybe Git.Ref -> Git.Ref -> Bool -> Annex Bool +resolveMerge us them inoverlay = do + top <- if inoverlay + then pure "." + else fromRepo Git.repoPath + (fs, cleanup) <- inRepo (LsFiles.unmerged [top]) + srcmap <- if inoverlay + then pure M.empty + else inodeMap $ pure (concatMap getunmergedfiles fs, return True) + (mergedks, mergedfs) <- unzip <$> mapM (resolveMerge' srcmap us them inoverlay) fs + let mergedks' = concat mergedks + let mergedfs' = catMaybes mergedfs + let merged = not (null mergedfs') + void $ liftIO cleanup + + unless inoverlay $ do + (deleted, cleanup2) <- inRepo (LsFiles.deleted [] [top]) + unless (null deleted) $ + Annex.Queue.addCommand [] "rm" + [Param "--quiet", Param "-f", Param "--"] + (map fromRawFilePath deleted) + void $ liftIO cleanup2 + + when merged $ do + Annex.Queue.flush + unless inoverlay $ do + unstagedmap <- inodeMap $ inRepo $ + LsFiles.notInRepo [] False [top] + cleanConflictCruft mergedks' mergedfs' unstagedmap + showLongNote "Merge conflict was automatically resolved; you may want to examine the result." + return merged + where + getunmergedfiles u = catMaybes + [ Just (LsFiles.unmergedFile u) + , LsFiles.unmergedSiblingFile u + ] + +resolveMerge' :: InodeMap -> Maybe Git.Ref -> Git.Ref -> Bool -> LsFiles.Unmerged -> Annex ([Key], Maybe FilePath) +resolveMerge' _ Nothing _ _ _ = return ([], Nothing) +resolveMerge' unstagedmap (Just us) them inoverlay u = do + kus <- getkey LsFiles.valUs + kthem <- getkey LsFiles.valThem + case (kus, kthem) of + -- Both sides of conflict are annexed files + (Just keyUs, Just keyThem) + | keyUs /= keyThem -> resolveby [keyUs, keyThem] $ do + makevariantannexlink keyUs LsFiles.valUs + makevariantannexlink keyThem LsFiles.valThem + -- cleanConflictCruft can't handle unlocked + -- files, so delete here. + unless inoverlay $ + unless (islocked LsFiles.valUs) $ + liftIO $ removeWhenExistsWith R.removeLink (toRawFilePath file) + | otherwise -> resolveby [keyUs, keyThem] $ + -- Only resolve using symlink when both + -- were locked, otherwise use unlocked + -- pointer. + -- In either case, keep original filename. + if islocked LsFiles.valUs && islocked LsFiles.valThem + then makesymlink keyUs file + else makepointer keyUs file (combinedmodes) + -- Our side is annexed file, other side is not. + -- Make the annexed file into a variant file and graft in the + -- other file/directory as it was. + (Just keyUs, Nothing) -> resolveby [keyUs] $ do + graftin them file LsFiles.valThem LsFiles.valThem LsFiles.valUs + makevariantannexlink keyUs LsFiles.valUs + -- Our side is not annexed file, other side is. + (Nothing, Just keyThem) -> resolveby [keyThem] $ do + graftin us file LsFiles.valUs LsFiles.valUs LsFiles.valThem + makevariantannexlink keyThem LsFiles.valThem + -- Neither side is annexed file; cannot resolve. + (Nothing, Nothing) -> return ([], Nothing) + where + file = fromRawFilePath $ LsFiles.unmergedFile u + sibfile = fromRawFilePath <$> LsFiles.unmergedSiblingFile u + + getkey select = + case select (LsFiles.unmergedSha u) of + Just sha -> catKey sha + Nothing -> pure Nothing + + islocked select = select (LsFiles.unmergedTreeItemType u) == Just TreeSymlink + + combinedmodes = case catMaybes [ourmode, theirmode] of + [] -> Nothing + l -> Just (combineModes l) + where + ourmode = fromTreeItemType + <$> LsFiles.valUs (LsFiles.unmergedTreeItemType u) + theirmode = fromTreeItemType + <$> LsFiles.valThem (LsFiles.unmergedTreeItemType u) + + makevariantannexlink key select + | islocked select = makesymlink key dest + | otherwise = makepointer key dest destmode + where + dest = variantFile file key + destmode = fromTreeItemType <$> select (LsFiles.unmergedTreeItemType u) + + stagefile :: FilePath -> Annex FilePath + stagefile f + | inoverlay = ( f) . fromRawFilePath <$> fromRepo Git.repoPath + | otherwise = pure f + + makesymlink key dest = do + l <- calcRepo $ gitAnnexLink (toRawFilePath dest) key + unless inoverlay $ replacewithsymlink dest l + dest' <- toRawFilePath <$> stagefile dest + stageSymlink dest' =<< hashSymlink l + + replacewithsymlink dest link = replaceWorkTreeFile dest $ + makeGitLink link + + makepointer key dest destmode = do + unless inoverlay $ + unlessM (reuseOldFile unstagedmap key file dest) $ + linkFromAnnex key (toRawFilePath dest) destmode >>= \case + LinkAnnexFailed -> liftIO $ + writePointerFile (toRawFilePath dest) key destmode + _ -> noop + dest' <- toRawFilePath <$> stagefile dest + stagePointerFile dest' destmode =<< hashPointerFile key + unless inoverlay $ + Database.Keys.addAssociatedFile key + =<< inRepo (toTopFilePath (toRawFilePath dest)) + + {- Stage a graft of a directory or file from a branch + - and update the work tree. -} + graftin b item selectwant selectwant' selectunwant = do + Annex.Queue.addUpdateIndex + =<< fromRepo (UpdateIndex.lsSubTree b item) + + let replacefile isexecutable = case selectwant' (LsFiles.unmergedSha u) of + Nothing -> noop + Just sha -> replaceWorkTreeFile item $ \tmp -> do + c <- catObject sha + liftIO $ L.writeFile (decodeBS tmp) c + when isexecutable $ + liftIO $ void $ tryIO $ + modifyFileMode tmp $ + addModes executeModes + + -- Update the work tree to reflect the graft. + unless inoverlay $ case (selectwant (LsFiles.unmergedTreeItemType u), selectunwant (LsFiles.unmergedTreeItemType u)) of + (Just TreeSymlink, _) -> do + case selectwant' (LsFiles.unmergedSha u) of + Nothing -> noop + Just sha -> do + link <- catSymLinkTarget sha + replacewithsymlink item link + (Just TreeFile, Just TreeSymlink) -> replacefile False + (Just TreeExecutable, Just TreeSymlink) -> replacefile True + _ -> ifM (liftIO $ doesDirectoryExist item) + -- a conflict between a file and a directory + -- leaves the directory, so since a directory + -- is there, it must be what was wanted + ( noop + -- probably a file with conflict markers is + -- in the work tree; replace with grafted + -- file content (this is needed when + -- the annexed file is unlocked) + , replacefile False + ) + + resolveby ks a = do + {- Remove conflicted file from index so merge can be resolved. + - If there's a sibling conflicted file, remove it too. -} + Annex.Queue.addCommand [] "rm" + [ Param "--quiet" + , Param "-f" + , Param "--cached" + , Param "--" + ] + (catMaybes [Just file, sibfile]) + liftIO $ maybe noop + (removeWhenExistsWith R.removeLink . toRawFilePath) + sibfile + void a + return (ks, Just file) + +{- git-merge moves conflicting files away to files + - named something like f~HEAD or f~branch or just f, but the + - exact name chosen can vary. Once the conflict is resolved, + - this cruft can be deleted. To avoid deleting legitimate + - files that look like this, only delete files that are + - A) not staged in git and + - B) have a name related to the merged files and + - C) are pointers to or have the content of keys that were involved + - in the merge. + -} +cleanConflictCruft :: [Key] -> [FilePath] -> InodeMap -> Annex () +cleanConflictCruft resolvedks resolvedfs unstagedmap = do + is <- S.fromList . map (inodeCacheToKey Strongly) . concat + <$> mapM Database.Keys.getInodeCaches resolvedks + forM_ (M.toList unstagedmap) $ \(i, f) -> + whenM (matchesresolved is i f) $ + liftIO $ removeWhenExistsWith R.removeLink (toRawFilePath f) + where + fs = S.fromList resolvedfs + ks = S.fromList resolvedks + inks = maybe False (flip S.member ks) + matchesresolved is i f + | S.member f fs || S.member (conflictCruftBase f) fs = anyM id + [ pure $ either (const False) (`S.member` is) i + , inks <$> isAnnexLink (toRawFilePath f) + , inks <$> liftIO (isPointerFile (toRawFilePath f)) + ] + | otherwise = return False + +conflictCruftBase :: FilePath -> FilePath +conflictCruftBase f = reverse $ drop 1 $ dropWhile (/= '~') $ reverse f + +{- When possible, reuse an existing file from the srcmap as the + - content of a worktree file in the resolved merge. It must have the + - same name as the origfile, or a name that git would use for conflict + - cruft. And, its inode cache must be a known one for the key. -} +reuseOldFile :: InodeMap -> Key -> FilePath -> FilePath -> Annex Bool +reuseOldFile srcmap key origfile destfile = do + is <- map (inodeCacheToKey Strongly) + <$> Database.Keys.getInodeCaches key + liftIO $ go $ mapMaybe (\i -> M.lookup (Right i) srcmap) is + where + go [] = return False + go (f:fs) + | f == origfile || conflictCruftBase f == origfile = + ifM (doesFileExist f) + ( do + renameFile f destfile + return True + , go fs + ) + | otherwise = go fs + +commitResolvedMerge :: Git.Branch.CommitMode -> Annex Bool +commitResolvedMerge commitmode = do + commitquiet <- Git.Branch.CommitQuiet <$> commandProgressDisabled + inRepo $ Git.Branch.commitCommand commitmode commitquiet + [ Param "--no-verify" + , Param "-m" + , Param "git-annex automatic merge conflict fix" + ] + +type InodeMap = M.Map (Either FilePath InodeCacheKey) FilePath + +inodeMap :: Annex ([RawFilePath], IO Bool) -> Annex InodeMap +inodeMap getfiles = do + (fs, cleanup) <- getfiles + fsis <- forM fs $ \f -> do + s <- liftIO $ R.getSymbolicLinkStatus f + let f' = fromRawFilePath f + if isSymbolicLink s + then pure $ Just (Left f', f') + else withTSDelta (\d -> liftIO $ toInodeCache d f s) + >>= return . \case + Just i -> Just (Right (inodeCacheToKey Strongly i), f') + Nothing -> Nothing + void $ liftIO cleanup + return $ M.fromList $ catMaybes fsis diff --git a/Annex/BloomFilter.hs b/Annex/BloomFilter.hs new file mode 100644 index 0000000000..571f1c6c17 --- /dev/null +++ b/Annex/BloomFilter.hs @@ -0,0 +1,54 @@ +{- git-annex bloom filter + - + - Copyright 2010-2015 Joey Hess + - + - Licensed under the GNU AGPL version 3 or higher. + -} + +module Annex.BloomFilter where + +import Annex.Common +import qualified Annex +import Utility.Bloom + +import Control.Monad.ST + +{- A bloom filter capable of holding half a million keys with a + - false positive rate of 1 in 10000000 uses around 16 mb of memory, + - so will easily fit on even my lowest memory systems. + -} +bloomCapacity :: Annex Int +bloomCapacity = fromMaybe 500000 . annexBloomCapacity <$> Annex.getGitConfig +bloomAccuracy :: Annex Int +bloomAccuracy = fromMaybe 10000000 . annexBloomAccuracy <$> Annex.getGitConfig +bloomBitsHashes :: Annex (Int, Int) +bloomBitsHashes = do + capacity <- bloomCapacity + accuracy <- bloomAccuracy + case safeSuggestSizing capacity (1 / fromIntegral accuracy) of + Left e -> do + warning $ UnquotedString $ + "bloomfilter " ++ e ++ "; falling back to sane value" + -- precaulculated value for 500000 (1/10000000) + return (16777216,23) + Right v -> return v + +{- Creates a bloom filter, and runs an action to populate it. + - + - The action is passed a callback that it can use to feed values into the + - bloom filter. + - + - Once the action completes, the mutable filter is frozen + - for later use. + -} +genBloomFilter :: Hashable v => ((v -> Annex ()) -> Annex ()) -> Annex (Bloom v) +genBloomFilter populate = do + (numbits, numhashes) <- bloomBitsHashes + bloom <- lift $ newMB (cheapHashes numhashes) numbits + populate $ \v -> lift $ insertMB bloom v + lift $ unsafeFreezeMB bloom + where + lift = liftIO . stToIO + +bloomFilter :: [v] -> Bloom v -> [v] +bloomFilter l bloom = filter (\v -> v `notElemB` bloom) l diff --git a/Annex/Branch.hs b/Annex/Branch.hs new file mode 100644 index 0000000000..bcc9ae114d --- /dev/null +++ b/Annex/Branch.hs @@ -0,0 +1,1062 @@ +{- management of the git-annex branch + - + - Copyright 2011-2023 Joey Hess + - + - Licensed under the GNU AGPL version 3 or higher. + -} + +{-# LANGUAGE OverloadedStrings #-} + +module Annex.Branch ( + fullname, + name, + hasOrigin, + hasSibling, + siblingBranches, + create, + getBranch, + UpdateMade(..), + update, + forceUpdate, + updateTo, + get, + getHistorical, + getUnmergedRefs, + RegardingUUID(..), + change, + ChangeOrAppend(..), + changeOrAppend, + maybeChange, + commitMessage, + createMessage, + commit, + forceCommit, + files, + rememberTreeish, + performTransitions, + withIndex, + precache, + overBranchFileContents, + updatedFromTree, +) where + +import qualified Data.ByteString as B +import qualified Data.ByteString.Lazy as L +import qualified Data.Set as S +import qualified Data.Map as M +import Data.Function +import Data.Char +import Data.ByteString.Builder +import Control.Concurrent (threadDelay) +import Control.Concurrent.MVar +import qualified System.FilePath.ByteString as P +import System.PosixCompat.Files (isRegularFile) + +import Annex.Common +import Types.BranchState +import Annex.BranchState +import Annex.Journal +import Annex.GitOverlay +import Annex.Tmp +import qualified Git +import qualified Git.Command +import qualified Git.Ref +import qualified Git.RefLog +import qualified Git.Sha +import qualified Git.Branch +import qualified Git.UnionMerge +import qualified Git.UpdateIndex +import qualified Git.Tree +import qualified Git.LsTree +import Git.LsTree (lsTreeParams) +import qualified Git.HashObject +import Annex.HashObject +import Git.Types (Ref(..), fromRef, fromRef', RefDate, TreeItemType(..)) +import Git.FilePath +import Annex.CatFile +import Git.CatFile (catObjectStreamLsTree) +import Annex.Perms +import Logs +import Logs.Transitions +import Logs.File +import Logs.Trust.Pure +import Logs.Remote.Pure +import Logs.Export.Pure +import Logs.Difference.Pure +import qualified Annex.Queue +import Types.Transitions +import Annex.Branch.Transitions +import qualified Annex +import Annex.Hook +import Utility.Directory.Stream +import Utility.Tmp +import qualified Utility.RawFilePath as R + +{- Name of the branch that is used to store git-annex's information. -} +name :: Git.Ref +name = Git.Ref "git-annex" + +{- Fully qualified name of the branch. -} +fullname :: Git.Ref +fullname = Git.Ref $ "refs/heads/" <> fromRef' name + +{- Branch's name in origin. -} +originname :: Git.Ref +originname = Git.Ref $ "refs/remotes/origin/" <> fromRef' name + +{- Does origin/git-annex exist? -} +hasOrigin :: Annex Bool +hasOrigin = inRepo $ Git.Ref.exists originname + +{- Does the git-annex branch or a sibling foo/git-annex branch exist? -} +hasSibling :: Annex Bool +hasSibling = not . null <$> siblingBranches + +{- List of git-annex (shas, branches), including the main one and any + - from remotes. Duplicates are filtered out. -} +siblingBranches :: Annex [(Git.Sha, Git.Branch)] +siblingBranches = inRepo $ Git.Ref.matchingUniq [name] + +{- Creates the branch, if it does not already exist. -} +create :: Annex () +create = void getBranch + +{- Returns the sha of the branch, creating it first if necessary. -} +getBranch :: Annex Git.Ref +getBranch = maybe (hasOrigin >>= go >>= use) return =<< branchsha + where + go True = do + inRepo $ Git.Command.run + [ Param "branch" + , Param "--no-track" + , Param $ fromRef name + , Param $ fromRef originname + ] + fromMaybe (giveup $ "failed to create " ++ fromRef name) + <$> branchsha + go False = withIndex' True $ do + -- Create the index file. This is not necessary, + -- except to avoid a bug in git 2.37 that causes + -- git write-tree to segfault when the index file does not + -- exist. + inRepo $ flip Git.UpdateIndex.streamUpdateIndex [] + cmode <- annexCommitMode <$> Annex.getGitConfig + cmessage <- createMessage + inRepo $ Git.Branch.commitAlways cmode cmessage fullname [] + use sha = do + setIndexSha sha + return sha + branchsha = inRepo $ Git.Ref.sha fullname + +{- Ensures that the branch and index are up-to-date; should be + - called before data is read from it. Runs only once per git-annex run. -} +update :: Annex BranchState +update = runUpdateOnce $ updateTo =<< siblingBranches + +{- Forces an update even if one has already been run. -} +forceUpdate :: Annex UpdateMade +forceUpdate = updateTo =<< siblingBranches + +{- Merges the specified Refs into the index, if they have any changes not + - already in it. The Branch names are only used in the commit message; + - it's even possible that the provided Branches have not been updated to + - point to the Refs yet. + - + - The branch is fast-forwarded if possible, otherwise a merge commit is + - made. + - + - Before Refs are merged into the index, it's important to first stage the + - journal into the index. Otherwise, any changes in the journal would + - later get staged, and might overwrite changes made during the merge. + - This is only done if some of the Refs do need to be merged. + - + - Also handles performing any Transitions that have not yet been + - performed, in either the local branch, or the Refs. + -} +updateTo :: [(Git.Sha, Git.Branch)] -> Annex UpdateMade +updateTo pairs = ifM (annexMergeAnnexBranches <$> Annex.getGitConfig) + ( updateTo' pairs + , return (UpdateMade False False) + ) + +updateTo' :: [(Git.Sha, Git.Branch)] -> Annex UpdateMade +updateTo' pairs = do + -- ensure branch exists, and get its current ref + branchref <- getBranch + ignoredrefs <- getIgnoredRefs + let unignoredrefs = excludeset ignoredrefs pairs + (tomerge, notnewer) <- if null unignoredrefs + then return ([], []) + else do + mergedrefs <- getMergedRefs + partitionM isnewer $ + excludeset mergedrefs unignoredrefs + {- In a read-only repository, catching permission denied lets + - query operations still work, although they will need to do + - additional work since the refs are not merged. -} + catchPermissionDenied + (const (updatefailedperms tomerge)) + (go branchref tomerge notnewer) + where + excludeset s = filter (\(r, _) -> S.notMember r s) + + isnewer (r, _) = inRepo $ Git.Branch.changed fullname r + + go branchref tomerge notnewer = do + dirty <- journalDirty gitAnnexJournalDir + journalcleaned <- if null tomerge + {- Even when no refs need to be merged, the index + - may still be updated if the branch has gotten ahead + - of the index, or just if the journal is dirty. -} + then ifM (needUpdateIndex branchref) + ( lockJournal $ \jl -> do + forceUpdateIndex jl branchref + {- When there are journalled changes + - as well as the branch being updated, + - a commit needs to be done. -} + when dirty $ + go' branchref dirty [] jl + return True + , if dirty + then ifM (annexAlwaysCommit <$> Annex.getGitConfig) + ( lockJournal $ \jl -> do + go' branchref dirty [] jl + return True + , return False + ) + else return True + ) + else lockJournal $ \jl -> do + go' branchref dirty tomerge jl + return True + journalclean <- if journalcleaned + then not <$> privateUUIDsKnown + else pure False + addMergedRefs notnewer + return $ UpdateMade + { refsWereMerged = not (null tomerge) + , journalClean = journalclean + } + + go' branchref dirty tomerge jl = stagejournalwhen dirty jl $ do + let (refs, branches) = unzip tomerge + merge_desc <- if null tomerge + then commitMessage + else return $ "merging " ++ + unwords (map Git.Ref.describe branches) ++ + " into " ++ fromRef name + localtransitions <- getLocalTransitions + unless (null tomerge) $ do + showSideAction (UnquotedString merge_desc) + mapM_ checkBranchDifferences refs + mergeIndex jl refs + let commitrefs = nub $ fullname:refs + ifM (handleTransitions jl localtransitions commitrefs) + ( runAnnexHook postUpdateAnnexHook + , do + ff <- if dirty + then return False + else inRepo $ Git.Branch.fastForward fullname refs + if ff + then updateIndex jl branchref + else commitIndex jl branchref merge_desc commitrefs + ) + addMergedRefs tomerge + invalidateCache + + stagejournalwhen dirty jl a + | dirty = stageJournal jl a + | otherwise = withIndex a + + -- Preparing for read-only branch access with unmerged remote refs. + updatefailedperms tomerge = do + let refs = map fst tomerge + -- Gather any transitions that are new to either the + -- local branch or a remote ref, which will need to be + -- applied on the fly. + localts <- getLocalTransitions + remotets <- mapM getRefTransitions refs + ts <- if all (localts ==) remotets + then return [] + else + let tcs = mapMaybe getTransitionCalculator $ + knownTransitionList $ + combineTransitions (localts:remotets) + in if null tcs + then return [] + else do + config <- Annex.getGitConfig + trustmap <- calcTrustMap <$> getStaged trustLog + remoteconfigmap <- calcRemoteConfigMap <$> getStaged remoteLog + return $ map (\c -> c trustmap remoteconfigmap config) tcs + return $ UpdateFailedPermissions + { refsUnmerged = refs + , newTransitions = ts + } + +{- Gets the content of a file, which may be in the journal, or in the index + - (and committed to the branch). + - + - Returns an empty string if the file doesn't exist yet. + - + - Updates the branch if necessary, to ensure the most up-to-date available + - content is returned. + - + - When permissions prevented updating the branch, reads the content from the + - journal, plus the branch, plus all unmerged refs. In this case, any + - transitions that have not been applied to all refs will be applied on + - the fly. + -} +get :: RawFilePath -> Annex L.ByteString +get file = do + st <- update + case getCache file st of + Just content -> return content + Nothing -> do + content <- if journalIgnorable st + then getRef fullname file + else if null (unmergedRefs st) + then getLocal file + else unmergedbranchfallback st + setCache file content + return content + where + unmergedbranchfallback st = do + l <- getLocal file + bs <- forM (unmergedRefs st) $ \ref -> getRef ref file + let content = l <> mconcat bs + return $ applytransitions (unhandledTransitions st) content + applytransitions [] content = content + applytransitions (changer:rest) content = case changer file content of + PreserveFile -> applytransitions rest content + ChangeFile builder -> do + let content' = toLazyByteString builder + if L.null content' + -- File is deleted, can't run any other + -- transitions on it. + then content' + else applytransitions rest content' + +{- When the git-annex branch is unable to be updated due to permissions, + - and there are other git-annex branches that have not been merged into + - it, this gets the refs of those branches. -} +getUnmergedRefs :: Annex [Git.Ref] +getUnmergedRefs = unmergedRefs <$> update + +{- Used to cache the value of a file, which has been read from the branch + - using some optimised method. The journal has to be checked, in case + - it has a newer version of the file that has not reached the branch yet. + -} +precache :: RawFilePath -> L.ByteString -> Annex () +precache file branchcontent = do + st <- getState + content <- if journalIgnorable st + then pure branchcontent + else getJournalFileStale (GetPrivate True) file >>= return . \case + NoJournalledContent -> branchcontent + JournalledContent journalcontent -> journalcontent + PossiblyStaleJournalledContent journalcontent -> + branchcontent <> journalcontent + setCache file content + +{- Like get, but does not merge the branch, so the info returned may not + - reflect changes in remotes. + - (Changing the value this returns, and then merging is always the + - same as using get, and then changing its value.) -} +getLocal :: RawFilePath -> Annex L.ByteString +getLocal = getLocal' (GetPrivate True) + +getLocal' :: GetPrivate -> RawFilePath -> Annex L.ByteString +getLocal' getprivate file = do + fastDebug "Annex.Branch" ("read " ++ fromRawFilePath file) + go =<< getJournalFileStale getprivate file + where + go NoJournalledContent = getRef fullname file + go (JournalledContent journalcontent) = return journalcontent + go (PossiblyStaleJournalledContent journalcontent) = do + v <- getRef fullname file + return (v <> journalcontent) + +{- Gets the content of a file as staged in the branch's index. -} +getStaged :: RawFilePath -> Annex L.ByteString +getStaged = getRef indexref + where + -- This makes git cat-file be run with ":file", + -- so it looks at the index. + indexref = Ref "" + +getHistorical :: RefDate -> RawFilePath -> Annex L.ByteString +getHistorical date file = + -- This check avoids some ugly error messages when the reflog + -- is empty. + ifM (null <$> inRepo (Git.RefLog.get' [Param (fromRef fullname), Param "-n1"])) + ( giveup ("No reflog for " ++ fromRef fullname) + , getRef (Git.Ref.dateRef fullname date) file + ) + +getRef :: Ref -> RawFilePath -> Annex L.ByteString +getRef ref file = withIndex $ catFile ref file + +{- Applies a function to modify the content of a file. + - + - Note that this does not cause the branch to be merged, it only + - modifies the current content of the file on the branch. + -} +change :: Journalable content => RegardingUUID -> RawFilePath -> (L.ByteString -> content) -> Annex () +change ru file f = lockJournal $ \jl -> f <$> getToChange ru file >>= set jl ru file + +{- Applies a function which can modify the content of a file, or not. -} +maybeChange :: Journalable content => RegardingUUID -> RawFilePath -> (L.ByteString -> Maybe content) -> Annex () +maybeChange ru file f = lockJournal $ \jl -> do + v <- getToChange ru file + case f v of + Just jv -> + let b = journalableByteString jv + in when (v /= b) $ set jl ru file b + _ -> noop + +data ChangeOrAppend t = Change t | Append t + +{- Applies a function that can either modify the content of the file, + - or append to the file. Appending can be more efficient when several + - lines are written to a file in succession. + - + - When annex.alwayscompact=false, the function is not passed the content + - of the journal file when the journal file already exists, and whatever + - value it provides is always appended to the journal file. That avoids + - reading the journal file, and so can be faster when many lines are being + - written to it. The information that is recorded will be effectively the + - same, only obsolete log lines will not get compacted. + - + - Currently, only appends when annex.alwayscompact=false. That is to + - avoid appending when an older version of git-annex is also in use in the + - same repository. An interrupted append could leave the journal file in a + - state that would confuse the older version. This is planned to be + - changed in a future repository version. + -} +changeOrAppend :: Journalable content => RegardingUUID -> RawFilePath -> (L.ByteString -> ChangeOrAppend content) -> Annex () +changeOrAppend ru file f = lockJournal $ \jl -> + checkCanAppendJournalFile jl ru file >>= \case + Just appendable -> ifM (annexAlwaysCompact <$> Annex.getGitConfig) + ( do + oldc <- getToChange ru file + case f oldc of + Change newc -> set jl ru file newc + Append toappend -> + set jl ru file $ + oldc <> journalableByteString toappend + -- Use this instead in v11 + -- or whatever. + -- append jl file appendable toappend + , case f mempty of + -- Append even though a change was + -- requested; since mempty was passed in, + -- the lines requested to change are + -- minimized. + Change newc -> append jl file appendable newc + Append toappend -> append jl file appendable toappend + ) + Nothing -> do + oldc <- getToChange ru file + case f oldc of + Change newc -> set jl ru file newc + -- Journal file does not exist yet, so + -- cannot append and have to write it all. + Append toappend -> set jl ru file $ + oldc <> journalableByteString toappend + +{- Only get private information when the RegardingUUID is itself private. -} +getToChange :: RegardingUUID -> RawFilePath -> Annex L.ByteString +getToChange ru f = flip getLocal' f . GetPrivate =<< regardingPrivateUUID ru + +{- Records new content of a file into the journal. + - + - This is not exported; all changes have to be made via change. This + - ensures that information that was written to the branch is not + - overwritten. Also, it avoids a get followed by a set without taking into + - account whether private information was gotten from the private + - git-annex index, and should not be written to the public git-annex + - branch. + -} +set :: Journalable content => JournalLocked -> RegardingUUID -> RawFilePath -> content -> Annex () +set jl ru f c = do + journalChanged + setJournalFile jl ru f c + fastDebug "Annex.Branch" ("set " ++ fromRawFilePath f) + -- Could cache the new content, but it would involve + -- evaluating a Journalable Builder twice, which is not very + -- efficient. Instead, assume that it's not common to need to read + -- a log file immediately after writing it. + invalidateCache + +{- Appends content to the journal file. -} +append :: Journalable content => JournalLocked -> RawFilePath -> AppendableJournalFile -> content -> Annex () +append jl f appendable toappend = do + journalChanged + appendJournalFile jl appendable toappend + fastDebug "Annex.Branch" ("append " ++ fromRawFilePath f) + invalidateCache + +{- Commit message used when making a commit of whatever data has changed + - to the git-annex branch. -} +commitMessage :: Annex String +commitMessage = fromMaybe "update" <$> getCommitMessage + +{- Commit message used when creating the branch. -} +createMessage :: Annex String +createMessage = fromMaybe "branch created" <$> getCommitMessage + +getCommitMessage :: Annex (Maybe String) +getCommitMessage = do + config <- Annex.getGitConfig + case annexCommitMessageCommand config of + Nothing -> return (annexCommitMessage config) + Just cmd -> catchDefaultIO (annexCommitMessage config) $ + Just <$> liftIO (readProcess "sh" ["-c", cmd]) + +{- Stages the journal, and commits staged changes to the branch. -} +commit :: String -> Annex () +commit = whenM (journalDirty gitAnnexJournalDir) . forceCommit + +{- Commits the current index to the branch even without any journalled + - changes. -} +forceCommit :: String -> Annex () +forceCommit message = lockJournal $ \jl -> + stageJournal jl $ do + ref <- getBranch + commitIndex jl ref message [fullname] + +{- Commits the staged changes in the index to the branch. + - + - Ensures that the branch's index file is first updated to merge the state + - of the branch at branchref, before running the commit action. This + - is needed because the branch may have had changes pushed to it, that + - are not yet reflected in the index. + - + - The branchref value can have been obtained using getBranch at any + - previous point, though getting it a long time ago makes the race + - more likely to occur. + - + - Note that changes may be pushed to the branch at any point in time! + - So, there's a race. If the commit is made using the newly pushed tip of + - the branch as its parent, and that ref has not yet been merged into the + - index, then the result is that the commit will revert the pushed + - changes, since they have not been merged into the index. This race + - is detected and another commit made to fix it. + - + - (It's also possible for the branch to be overwritten, + - losing the commit made here. But that's ok; the data is still in the + - index and will get committed again later.) + -} +commitIndex :: JournalLocked -> Git.Ref -> String -> [Git.Ref] -> Annex () +commitIndex jl branchref message parents = do + showStoringStateAction + commitIndex' jl branchref message message 0 parents +commitIndex' :: JournalLocked -> Git.Ref -> String -> String -> Integer -> [Git.Ref] -> Annex () +commitIndex' jl branchref message basemessage retrynum parents = do + updateIndex jl branchref + cmode <- annexCommitMode <$> Annex.getGitConfig + committedref <- inRepo $ Git.Branch.commitAlways cmode message fullname parents + setIndexSha committedref + parentrefs <- commitparents <$> catObject committedref + when (racedetected branchref parentrefs) $ + fixrace committedref parentrefs + where + -- look for "parent ref" lines and return the refs + commitparents = map (Git.Ref . snd) . filter isparent . + map (toassoc . L.toStrict) . L.split newline + newline = fromIntegral (ord '\n') + toassoc = separate' (== (fromIntegral (ord ' '))) + isparent (k,_) = k == "parent" + + {- The race can be detected by checking the commit's + - parent, which will be the newly pushed branch, + - instead of the expected ref that the index was updated to. -} + racedetected expectedref parentrefs + | expectedref `elem` parentrefs = False -- good parent + | otherwise = True -- race! + + {- To recover from the race, union merge the lost refs + - into the index. -} + fixrace committedref lostrefs = do + showSideAction "recovering from race" + let retrynum' = retrynum+1 + -- small sleep to let any activity that caused + -- the race settle down + liftIO $ threadDelay (100000 + fromInteger retrynum') + mergeIndex jl lostrefs + let racemessage = basemessage ++ " (recovery from race #" ++ show retrynum' ++ "; expected commit parent " ++ show branchref ++ " but found " ++ show lostrefs ++ " )" + commitIndex' jl committedref racemessage basemessage retrynum' [committedref] + +{- Lists all files on the branch. including ones in the journal + - that have not been committed yet. + - + - There may be duplicates in the list, when the journal has files that + - have not been written to the branch yet. + - + - In a read-only repository that has other git-annex branches that have + - not been merged in, returns Nothing, because it's not possible to + - efficiently handle that. + -} +files :: Annex (Maybe ([RawFilePath], IO Bool)) +files = do + st <- update + if not (null (unmergedRefs st)) + then return Nothing + else do + (bfs, cleanup) <- branchFiles + jfs <- journalledFiles + pjfs <- journalledFilesPrivate + -- ++ forces the content of the first list to be + -- buffered in memory, so use journalledFiles, + -- which should be much smaller most of the time. + -- branchFiles will stream as the list is consumed. + let l = jfs ++ pjfs ++ bfs + return (Just (l, cleanup)) + +{- Lists all files currently in the journal, but not files in the private + - journal. -} +journalledFiles :: Annex [RawFilePath] +journalledFiles = getJournalledFilesStale gitAnnexJournalDir + +journalledFilesPrivate :: Annex [RawFilePath] +journalledFilesPrivate = ifM privateUUIDsKnown + ( getJournalledFilesStale gitAnnexPrivateJournalDir + , return [] + ) + +{- Files in the branch, not including any from journalled changes, + - and without updating the branch. -} +branchFiles :: Annex ([RawFilePath], IO Bool) +branchFiles = withIndex $ inRepo branchFiles' + +branchFiles' :: Git.Repo -> IO ([RawFilePath], IO Bool) +branchFiles' = Git.Command.pipeNullSplit' $ + lsTreeParams Git.LsTree.LsTreeRecursive (Git.LsTree.LsTreeLong False) + fullname + [Param "--name-only"] + +{- Populates the branch's index file with the current branch contents. + - + - This is only done when the index doesn't yet exist, and the index + - is used to build up changes to be committed to the branch, and merge + - in changes from other branches. + -} +genIndex :: Git.Repo -> IO () +genIndex g = Git.UpdateIndex.streamUpdateIndex g + [Git.UpdateIndex.lsTree fullname g] + +{- Merges the specified refs into the index. + - Any changes staged in the index will be preserved. -} +mergeIndex :: JournalLocked -> [Git.Ref] -> Annex () +mergeIndex jl branches = do + prepareModifyIndex jl + withHashObjectHandle $ \hashhandle -> + withCatFileHandle $ \ch -> + inRepo $ \g -> Git.UnionMerge.mergeIndex hashhandle ch g branches + +{- Removes any stale git lock file, to avoid git falling over when + - updating the index. + - + - Since all modifications of the index are performed inside this module, + - and only when the journal is locked, the fact that the journal has to be + - locked when this is called ensures that no other process is currently + - modifying the index. So any index.lock file must be stale, caused + - by git running when the system crashed, or the repository's disk was + - removed, etc. + -} +prepareModifyIndex :: JournalLocked -> Annex () +prepareModifyIndex _jl = do + index <- fromRepo gitAnnexIndex + void $ liftIO $ tryIO $ R.removeLink (index <> ".lock") + +{- Runs an action using the branch's index file. -} +withIndex :: Annex a -> Annex a +withIndex = withIndex' False +withIndex' :: Bool -> Annex a -> Annex a +withIndex' bootstrapping a = withIndexFile AnnexIndexFile $ \f -> do + checkIndexOnce $ unlessM (liftIO $ doesFileExist f) $ do + unless bootstrapping create + createAnnexDirectory $ toRawFilePath $ takeDirectory f + unless bootstrapping $ inRepo genIndex + a + +{- Updates the branch's index to reflect the current contents of the branch. + - Any changes staged in the index will be preserved. + - + - Compares the ref stored in the lock file with the current + - ref of the branch to see if an update is needed. + -} +updateIndex :: JournalLocked -> Git.Ref -> Annex () +updateIndex jl branchref = whenM (needUpdateIndex branchref) $ + forceUpdateIndex jl branchref + +forceUpdateIndex :: JournalLocked -> Git.Ref -> Annex () +forceUpdateIndex jl branchref = do + withIndex $ mergeIndex jl [fullname] + setIndexSha branchref + +{- Checks if the index needs to be updated. -} +needUpdateIndex :: Git.Ref -> Annex Bool +needUpdateIndex branchref = do + f <- fromRawFilePath <$> fromRepo gitAnnexIndexStatus + committedref <- Git.Ref . firstLine' <$> + liftIO (catchDefaultIO mempty $ B.readFile f) + return (committedref /= branchref) + +{- Record that the branch's index has been updated to correspond to a + - given ref of the branch. -} +setIndexSha :: Git.Ref -> Annex () +setIndexSha ref = do + f <- fromRepo gitAnnexIndexStatus + writeLogFile f $ fromRef ref ++ "\n" + runAnnexHook postUpdateAnnexHook + +{- Stages the journal into the index, and runs an action that + - commits the index to the branch. Note that the action is run + - inside withIndex so will automatically use the branch's index. + - + - Before staging, this removes any existing git index file lock. + - This is safe to do because stageJournal is the only thing that + - modifies this index file, and only one can run at a time, because + - the journal is locked. So any existing git index file lock must be + - stale, and the journal must contain any data that was in the process + - of being written to the index file when it crashed. + -} +stageJournal :: JournalLocked -> Annex () -> Annex () +stageJournal jl commitindex = withIndex $ withOtherTmp $ \tmpdir -> do + prepareModifyIndex jl + g <- gitRepo + let dir = gitAnnexJournalDir g + (jlogf, jlogh) <- openjlog (fromRawFilePath tmpdir) + withHashObjectHandle $ \h -> + withJournalHandle gitAnnexJournalDir $ \jh -> + Git.UpdateIndex.streamUpdateIndex g + [genstream dir h jh jlogh] + commitindex + liftIO $ cleanup (fromRawFilePath dir) jlogh jlogf + where + genstream dir h jh jlogh streamer = readDirectory jh >>= \case + Nothing -> return () + Just file -> do + let path = dir P. toRawFilePath file + unless (dirCruft file) $ whenM (isfile path) $ do + sha <- Git.HashObject.hashFile h path + hPutStrLn jlogh file + streamer $ Git.UpdateIndex.updateIndexLine + sha TreeFile (asTopFilePath $ fileJournal $ toRawFilePath file) + genstream dir h jh jlogh streamer + isfile file = isRegularFile <$> R.getFileStatus file + -- Clean up the staged files, as listed in the temp log file. + -- The temp file is used to avoid needing to buffer all the + -- filenames in memory. + cleanup dir jlogh jlogf = do + hFlush jlogh + hSeek jlogh AbsoluteSeek 0 + stagedfs <- lines <$> hGetContents jlogh + mapM_ (removeFile . (dir )) stagedfs + hClose jlogh + removeWhenExistsWith (R.removeLink) (toRawFilePath jlogf) + openjlog tmpdir = liftIO $ openTmpFileIn tmpdir "jlog" + +getLocalTransitions :: Annex Transitions +getLocalTransitions = + parseTransitionsStrictly "local" + <$> getLocal transitionsLog + +{- This is run after the refs have been merged into the index, + - but before the result is committed to the branch. + - (Which is why it's passed the contents of the local branches's + - transition log before that merge took place.) + - + - When the refs contain transitions that have not yet been done locally, + - the transitions are performed on the index, and a new branch + - is created from the result. + - + - When there are transitions recorded locally that have not been done + - to the remote refs, the transitions are performed in the index, + - and committed to the existing branch. In this case, the untransitioned + - remote refs cannot be merged into the branch (since transitions + - throw away history), so they are added to the list of refs to ignore, + - to avoid re-merging content from them again. + -} +handleTransitions :: JournalLocked -> Transitions -> [Git.Ref] -> Annex Bool +handleTransitions jl localts refs = do + remotets <- mapM getRefTransitions refs + if all (localts ==) remotets + then return False + else do + let m = M.fromList (zip refs remotets) + let allts = combineTransitions (localts:remotets) + let (transitionedrefs, untransitionedrefs) = + partition (\r -> M.lookup r m == Just allts) refs + performTransitionsLocked jl allts (localts /= allts) transitionedrefs + ignoreRefs untransitionedrefs + return True + +{- Performs the specified transitions on the contents of the index file, + - commits it to the branch, or creates a new branch. + -} +performTransitions :: Transitions -> Bool -> [Ref] -> Annex () +performTransitions ts neednewlocalbranch transitionedrefs = lockJournal $ \jl -> + performTransitionsLocked jl ts neednewlocalbranch transitionedrefs +performTransitionsLocked :: JournalLocked -> Transitions -> Bool -> [Ref] -> Annex () +performTransitionsLocked jl ts neednewlocalbranch transitionedrefs = do + -- For simplicity & speed, we're going to use the Annex.Queue to + -- update the git-annex branch, while it usually holds changes + -- for the head branch. Flush any such changes. + Annex.Queue.flush + -- Stop any running git cat-files, to ensure that the + -- getStaged calls below use the current index, and not some older + -- one. + catFileStop + withIndex $ do + prepareModifyIndex jl + run $ mapMaybe getTransitionCalculator tlist + Annex.Queue.flush + if neednewlocalbranch + then do + cmode <- annexCommitMode <$> Annex.getGitConfig + committedref <- inRepo $ Git.Branch.commitAlways cmode message fullname transitionedrefs + setIndexSha committedref + else do + ref <- getBranch + commitIndex jl ref message (nub $ fullname:transitionedrefs) + regraftexports + where + message + | neednewlocalbranch && null transitionedrefs = "new branch for transition " ++ tdesc + | otherwise = "continuing transition " ++ tdesc + tdesc = show $ map describeTransition tlist + tlist = knownTransitionList ts + + {- The changes to make to the branch are calculated and applied to + - the branch directly, rather than going through the journal, + - which would be innefficient. (And the journal is not designed + - to hold changes to every file in the branch at once.) + - + - When a file in the branch is changed by transition code, + - its new content is remembered and fed into the code for subsequent + - transitions. + -} + run [] = noop + run changers = do + config <- Annex.getGitConfig + trustmap <- calcTrustMap <$> getStaged trustLog + remoteconfigmap <- calcRemoteConfigMap <$> getStaged remoteLog + -- partially apply, improves performance + let changers' = map (\c -> c trustmap remoteconfigmap config) changers + (fs, cleanup) <- branchFiles + forM_ fs $ \f -> do + content <- getStaged f + apply changers' f content + liftIO $ void cleanup + + apply [] _ _ = return () + apply (changer:rest) file content = case changer file content of + PreserveFile -> apply rest file content + ChangeFile builder -> do + let content' = toLazyByteString builder + if L.null content' + then do + Annex.Queue.addUpdateIndex + =<< inRepo (Git.UpdateIndex.unstageFile file) + -- File is deleted; can't run any other + -- transitions on it. + return () + else do + sha <- hashBlob content' + Annex.Queue.addUpdateIndex $ Git.UpdateIndex.pureStreamer $ + Git.UpdateIndex.updateIndexLine sha TreeFile (asTopFilePath file) + apply rest file content' + + -- Trees mentioned in export.log were grafted into the old + -- git-annex branch to make sure they remain available. Re-graft + -- the trees into the new branch. + regraftexports = do + l <- exportedTreeishes . M.elems . parseExportLogMap + <$> getStaged exportLog + forM_ l $ \t -> + rememberTreeishLocked t (asTopFilePath exportTreeGraftPoint) jl + +checkBranchDifferences :: Git.Ref -> Annex () +checkBranchDifferences ref = do + theirdiffs <- allDifferences . parseDifferencesLog + <$> catFile ref differenceLog + mydiffs <- annexDifferences <$> Annex.getGitConfig + when (theirdiffs /= mydiffs) $ + giveup "Remote repository is tuned in incompatible way; cannot be merged with local repository." + +ignoreRefs :: [Git.Sha] -> Annex () +ignoreRefs rs = do + old <- getIgnoredRefs + let s = S.unions [old, S.fromList rs] + f <- fromRepo gitAnnexIgnoredRefs + writeLogFile f $ + unlines $ map fromRef $ S.elems s + +getIgnoredRefs :: Annex (S.Set Git.Sha) +getIgnoredRefs = + S.fromList . mapMaybe Git.Sha.extractSha . fileLines' <$> content + where + content = do + f <- fromRawFilePath <$> fromRepo gitAnnexIgnoredRefs + liftIO $ catchDefaultIO mempty $ B.readFile f + +addMergedRefs :: [(Git.Sha, Git.Branch)] -> Annex () +addMergedRefs [] = return () +addMergedRefs new = do + old <- getMergedRefs' + -- Keep only the newest sha for each branch. + let l = nubBy ((==) `on` snd) (new ++ old) + f <- fromRepo gitAnnexMergedRefs + writeLogFile f $ + unlines $ map (\(s, b) -> fromRef s ++ '\t' : fromRef b) l + +getMergedRefs :: Annex (S.Set Git.Sha) +getMergedRefs = S.fromList . map fst <$> getMergedRefs' + +getMergedRefs' :: Annex [(Git.Sha, Git.Branch)] +getMergedRefs' = do + f <- fromRawFilePath <$> fromRepo gitAnnexMergedRefs + s <- liftIO $ catchDefaultIO mempty $ B.readFile f + return $ map parse $ fileLines' s + where + parse l = + let (s, b) = separate' (== (fromIntegral (ord '\t'))) l + in (Ref s, Ref b) + +{- Grafts a treeish into the branch at the specified location, + - and then removes it. This ensures that the treeish won't get garbage + - collected, and will always be available as long as the git-annex branch + - is available. + - + - Returns the sha of the git commit made to the git-annex branch. + -} +rememberTreeish :: Git.Ref -> TopFilePath -> Annex Git.Sha +rememberTreeish treeish graftpoint = lockJournal $ + rememberTreeishLocked treeish graftpoint +rememberTreeishLocked :: Git.Ref -> TopFilePath -> JournalLocked -> Annex Git.Sha +rememberTreeishLocked treeish graftpoint jl = do + branchref <- getBranch + updateIndex jl branchref + origtree <- fromMaybe (giveup "unable to determine git-annex branch tree") <$> + inRepo (Git.Ref.tree branchref) + addedt <- inRepo $ Git.Tree.graftTree treeish graftpoint origtree + cmode <- annexCommitMode <$> Annex.getGitConfig + c <- inRepo $ Git.Branch.commitTree cmode + ["graft"] [branchref] addedt + c' <- inRepo $ Git.Branch.commitTree cmode + ["graft cleanup"] [c] origtree + inRepo $ Git.Branch.update' fullname c' + -- The tree in c' is the same as the tree in branchref, + -- and the index was updated to that above, so it's safe to + -- say that the index contains c'. + setIndexSha c' + return c' + +{- Runs an action on the content of selected files from the branch. + - This is much faster than reading the content of each file in turn, + - because it lets git cat-file stream content without blocking. + - + - The action is passed a callback that it can repeatedly call to read + - the next file and its contents. When there are no more files, the + - callback will return Nothing. + - + - In some cases the callback may return the same file more than once, + - with different content. This happens rarely, only when the journal + - contains additional information, and the last version of the + - file it returns is the most current one. + - + - In a read-only repository that has other git-annex branches that have + - not been merged in, returns Nothing, because it's not possible to + - efficiently handle that. + -} +overBranchFileContents + :: (RawFilePath -> Maybe v) + -> (Annex (Maybe (v, RawFilePath, Maybe L.ByteString)) -> Annex a) + -> Annex (Maybe a) +overBranchFileContents select go = do + st <- update + if not (null (unmergedRefs st)) + then return Nothing + else Just <$> overBranchFileContents' select go st + +overBranchFileContents' + :: (RawFilePath -> Maybe v) + -> (Annex (Maybe (v, RawFilePath, Maybe L.ByteString)) -> Annex a) + -> BranchState + -> Annex a +overBranchFileContents' select go st = do + g <- Annex.gitRepo + (l, cleanup) <- inRepo $ Git.LsTree.lsTree + Git.LsTree.LsTreeRecursive + (Git.LsTree.LsTreeLong False) + fullname + let select' f = fmap (\v -> (v, f)) (select f) + buf <- liftIO newEmptyMVar + let go' reader = go $ liftIO reader >>= \case + Just ((v, f), content) -> do + content' <- checkjournal f content + return (Just (v, f, content')) + Nothing + | journalIgnorable st -> return Nothing + -- The journal did not get committed to the + -- branch, and may contain files that + -- are not present in the branch, which + -- need to be provided to the action still. + -- This can cause the action to be run a + -- second time with a file it already ran on. + | otherwise -> liftIO (tryTakeMVar buf) >>= \case + Nothing -> do + jfs <- journalledFiles + pjfs <- journalledFilesPrivate + drain buf jfs pjfs + Just (jfs, pjfs) -> drain buf jfs pjfs + catObjectStreamLsTree l (select' . getTopFilePath . Git.LsTree.file) g go' + `finally` liftIO (void cleanup) + where + -- Check the journal, in case it did not get committed to the branch + checkjournal f branchcontent + | journalIgnorable st = return branchcontent + | otherwise = getJournalFileStale (GetPrivate True) f >>= return . \case + NoJournalledContent -> branchcontent + JournalledContent journalledcontent -> + Just journalledcontent + PossiblyStaleJournalledContent journalledcontent -> + Just (fromMaybe mempty branchcontent <> journalledcontent) + + drain buf fs pfs = case getnext fs pfs of + Just (v, f, fs', pfs') -> do + liftIO $ putMVar buf (fs', pfs') + content <- getJournalFileStale (GetPrivate True) f >>= \case + NoJournalledContent -> return Nothing + JournalledContent journalledcontent -> + return (Just journalledcontent) + PossiblyStaleJournalledContent journalledcontent -> do + -- This is expensive, but happens + -- only when there is a private + -- journal file. + content <- getRef fullname f + return (Just (content <> journalledcontent)) + return (Just (v, f, content)) + Nothing -> do + liftIO $ putMVar buf ([], []) + return Nothing + + getnext [] [] = Nothing + getnext (f:fs) pfs = case select f of + Nothing -> getnext fs pfs + Just v -> Just (v, f, fs, pfs) + getnext [] (pf:pfs) = case select pf of + Nothing -> getnext [] pfs + Just v -> Just (v, pf, [], pfs) + +{- Check if the git-annex branch has been updated from the oldtree. + - If so, returns the tuple of the old and new trees. -} +updatedFromTree :: Git.Sha -> Annex (Maybe (Git.Sha, Git.Sha)) +updatedFromTree oldtree = + inRepo (Git.Ref.tree fullname) >>= \case + Just currtree | currtree /= oldtree -> + return $ Just (oldtree, currtree) + _ -> return Nothing diff --git a/Annex/Branch/Transitions.hs b/Annex/Branch/Transitions.hs new file mode 100644 index 0000000000..d7f45cb067 --- /dev/null +++ b/Annex/Branch/Transitions.hs @@ -0,0 +1,108 @@ +{- git-annex branch transitions + - + - Copyright 2013-2021 Joey Hess + - + - Licensed under the GNU AGPL version 3 or higher. + -} + +module Annex.Branch.Transitions ( + getTransitionCalculator, + filterBranch, +) where + +import Common +import Logs +import Logs.Transitions +import qualified Logs.UUIDBased as UUIDBased +import qualified Logs.Presence.Pure as Presence +import qualified Logs.Chunk.Pure as Chunk +import qualified Logs.MetaData.Pure as MetaData +import qualified Logs.Remote.Pure as Remote +import Logs.MapLog +import Types.TrustLevel +import Types.UUID +import Types.MetaData +import Types.Remote +import Types.Transitions +import Types.GitConfig (GitConfig) +import Types.ProposedAccepted +import Annex.SpecialRemote.Config + +import qualified Data.Map as M +import qualified Data.Set as S +import qualified Data.Attoparsec.ByteString.Lazy as A +import Data.ByteString.Builder + +getTransitionCalculator :: Transition -> Maybe (TrustMap -> M.Map UUID RemoteConfig -> GitConfig -> TransitionCalculator) +getTransitionCalculator ForgetGitHistory = Nothing +getTransitionCalculator ForgetDeadRemotes = Just dropDead + +-- Removes data about all dead repos. +-- +-- The trust log is not changed, because other, unmerged clones +-- may contain other data about the dead repos. So we need to remember +-- which are dead to later remove that. +-- +-- When the remote log contains a sameas-uuid pointing to a dead uuid, +-- the uuid of that remote configuration is also effectively dead, +-- though not in the trust log. There may be per-remote state stored using +-- the latter uuid, that also needs to be removed. The sameas-uuid +-- is not removed from the remote log, for the same reason the trust log +-- is not changed. +dropDead :: TrustMap -> M.Map UUID RemoteConfig -> GitConfig -> TransitionCalculator +dropDead trustmap remoteconfigmap gc f content + | f == trustLog = PreserveFile + | f == remoteLog = ChangeFile $ + Remote.buildRemoteConfigLog $ + mapLogWithKey minimizesameasdead $ + filterMapLog (notdead trustmap) id $ + Remote.parseRemoteConfigLog content + | otherwise = filterBranch (notdead trustmap') gc f content + where + notdead m u = M.findWithDefault def u m /= DeadTrusted + trustmap' = trustmap `M.union` + M.map (const DeadTrusted) (M.filter sameasdead remoteconfigmap) + sameasdead cm = + case toUUID . fromProposedAccepted <$> M.lookup sameasUUIDField cm of + Nothing -> False + Just u' -> M.lookup u' trustmap == Just DeadTrusted + minimizesameasdead u l + | M.lookup u trustmap' == Just DeadTrusted = + l { UUIDBased.value = minimizesameasdead' (UUIDBased.value l) } + | otherwise = l + minimizesameasdead' c = M.restrictKeys c (S.singleton sameasUUIDField) + +filterBranch :: (UUID -> Bool) -> GitConfig -> TransitionCalculator +filterBranch wantuuid gc f content = case getLogVariety gc f of + Just OldUUIDBasedLog -> ChangeFile $ + UUIDBased.buildLogOld byteString $ + filterMapLog wantuuid id $ + UUIDBased.parseLogOld A.takeByteString content + Just NewUUIDBasedLog -> ChangeFile $ + UUIDBased.buildLogNew byteString $ + filterMapLog wantuuid id $ + UUIDBased.parseLogNew A.takeByteString content + Just (ChunkLog _) -> ChangeFile $ + Chunk.buildLog $ filterMapLog wantuuid fst $ + Chunk.parseLog content + Just (LocationLog _) -> ChangeFile $ Presence.buildLog $ + Presence.compactLog $ + filterLocationLog wantuuid $ + Presence.parseLog content + Just (UrlLog _) -> PreserveFile + Just RemoteMetaDataLog -> ChangeFile $ MetaData.buildLog $ + filterRemoteMetaDataLog wantuuid $ + MetaData.simplifyLog $ MetaData.parseLog content + Just OtherLog -> PreserveFile + Nothing -> PreserveFile + +filterMapLog :: (UUID -> Bool) -> (k -> UUID) -> MapLog k v -> MapLog k v +filterMapLog wantuuid getuuid = filterMapLogWith (\k _v -> wantuuid (getuuid k)) + +filterLocationLog :: (UUID -> Bool) -> [Presence.LogLine] -> [Presence.LogLine] +filterLocationLog wantuuid = filter $ + wantuuid . toUUID . Presence.fromLogInfo . Presence.info + +filterRemoteMetaDataLog :: (UUID -> Bool) -> MetaData.Log MetaData -> MetaData.Log MetaData +filterRemoteMetaDataLog wantuuid = + MetaData.filterOutEmpty . MetaData.filterRemoteMetaData wantuuid diff --git a/Annex/BranchState.hs b/Annex/BranchState.hs new file mode 100644 index 0000000000..95d860e467 --- /dev/null +++ b/Annex/BranchState.hs @@ -0,0 +1,134 @@ +{- git-annex branch state management + - + - Runtime state about the git-annex branch, and a small cache. + - + - Copyright 2011-2022 Joey Hess + - + - Licensed under the GNU AGPL version 3 or higher. + -} + +module Annex.BranchState where + +import Annex.Common +import Types.BranchState +import Types.Transitions +import qualified Annex +import Logs +import qualified Git + +import qualified Data.ByteString.Lazy as L + +getState :: Annex BranchState +getState = Annex.getState Annex.branchstate + +changeState :: (BranchState -> BranchState) -> Annex () +changeState changer = Annex.changeState $ \s -> + s { Annex.branchstate = changer (Annex.branchstate s) } + +{- Runs an action to check that the index file exists, if it's not been + - checked before in this run of git-annex. -} +checkIndexOnce :: Annex () -> Annex () +checkIndexOnce a = unlessM (indexChecked <$> getState) $ do + a + changeState $ \s -> s { indexChecked = True } + +data UpdateMade + = UpdateMade + { refsWereMerged :: Bool + , journalClean :: Bool + } + | UpdateFailedPermissions + { refsUnmerged :: [Git.Sha] + , newTransitions :: [TransitionCalculator] + } + +{- Runs an action to update the branch, if it's not been updated before + - in this run of git-annex. + - + - When interactive access is enabled, the journal is always checked when + - reading values from the branch, and so this does not need to update + - the branch. + - + - When the action leaves the journal clean, by staging anything that + - was in it, an optimisation is enabled: The journal does not need to + - be checked going forward, until new information gets written to it. + - + - When the action is unable to update the branch due to a permissions + - problem, the journal is still read every time. + -} +runUpdateOnce :: Annex UpdateMade -> Annex BranchState +runUpdateOnce update = do + st <- getState + if branchUpdated st || needInteractiveAccess st + then return st + else do + um <- update + let stf = case um of + UpdateMade {} -> \st' -> st' + { branchUpdated = True + , journalIgnorable = journalClean um + } + UpdateFailedPermissions {} -> \st' -> st' + { branchUpdated = True + , journalIgnorable = False + , unmergedRefs = refsUnmerged um + , unhandledTransitions = newTransitions um + , cachedFileContents = [] + } + changeState stf + return (stf st) + +{- Avoids updating the branch. A useful optimisation when the branch + - is known to have not changed, or git-annex won't be relying on info + - queried from it being as up-to-date as possible. -} +disableUpdate :: Annex () +disableUpdate = changeState $ \s -> s { branchUpdated = True } + +{- Called when a change is made to the journal. -} +journalChanged :: Annex () +journalChanged = do + -- Optimisation: Typically journalIgnorable will already be True + -- (when one thing gets journalled, often other things do to), + -- so avoid an unnecessary write to the MVar that changeState + -- would do. + -- + -- This assumes that another thread is not setting journalIgnorable + -- at the same time, but since runUpdateOnce is the only + -- thing that sets it, and it only runs once, that + -- should not happen. + st <- getState + when (journalIgnorable st) $ + changeState $ \st' -> st' { journalIgnorable = False } + +{- When git-annex is somehow interactive, eg in --batch mode, + - and needs to always notice changes made to the journal by other + - processes, this disables optimisations that avoid normally reading the + - journal. + - + - It also avoids using the cache, so changes committed by other processes + - will be seen. + -} +enableInteractiveBranchAccess :: Annex () +enableInteractiveBranchAccess = changeState $ \s -> s + { needInteractiveAccess = True + , journalIgnorable = False + } + +setCache :: RawFilePath -> L.ByteString -> Annex () +setCache file content = changeState $ \s -> s + { cachedFileContents = add (cachedFileContents s) } + where + add l + | length l < logFilesToCache = (file, content) : l + | otherwise = (file, content) : Prelude.init l + +getCache :: RawFilePath -> BranchState -> Maybe L.ByteString +getCache file state = go (cachedFileContents state) + where + go [] = Nothing + go ((f,c):rest) + | f == file && not (needInteractiveAccess state) = Just c + | otherwise = go rest + +invalidateCache :: Annex () +invalidateCache = changeState $ \s -> s { cachedFileContents = [] } diff --git a/Annex/CatFile.hs b/Annex/CatFile.hs new file mode 100644 index 0000000000..35162b91a1 --- /dev/null +++ b/Annex/CatFile.hs @@ -0,0 +1,221 @@ +{- git cat-file interface, with handle automatically stored in the Annex monad + - + - Copyright 2011-2021 Joey Hess + - + - Licensed under the GNU AGPL version 3 or higher. + -} + +{-# LANGUAGE BangPatterns #-} + +module Annex.CatFile ( + catFile, + catFileDetails, + catObject, + catTree, + catCommit, + catObjectDetails, + withCatFileHandle, + catObjectMetaData, + catFileStop, + catKey, + catKey', + catSymLinkTarget, + catKeyFile, + catKeyFileHEAD, + catKeyFileHidden, + catObjectMetaDataHidden, +) where + +import qualified Data.ByteString.Lazy as L +import qualified Data.Map as M +import System.PosixCompat.Types +import Control.Concurrent.STM + +import Annex.Common +import qualified Git +import qualified Git.CatFile +import qualified Annex +import Git.Types +import Git.FilePath +import Git.Index +import qualified Git.Ref +import Annex.Link +import Annex.CurrentBranch +import Types.AdjustedBranch +import Types.CatFileHandles +import Utility.ResourcePool + +catFile :: Git.Branch -> RawFilePath -> Annex L.ByteString +catFile branch file = withCatFileHandle $ \h -> + liftIO $ Git.CatFile.catFile h branch file + +catFileDetails :: Git.Branch -> RawFilePath -> Annex (Maybe (L.ByteString, Sha, ObjectType)) +catFileDetails branch file = withCatFileHandle $ \h -> + liftIO $ Git.CatFile.catFileDetails h branch file + +catObject :: Git.Ref -> Annex L.ByteString +catObject ref = withCatFileHandle $ \h -> + liftIO $ Git.CatFile.catObject h ref + +catObjectMetaData :: Git.Ref -> Annex (Maybe (Sha, Integer, ObjectType)) +catObjectMetaData ref = withCatFileMetaDataHandle $ \h -> + liftIO $ Git.CatFile.catObjectMetaData h ref + +catTree :: Git.Ref -> Annex [(FilePath, FileMode)] +catTree ref = withCatFileHandle $ \h -> + liftIO $ Git.CatFile.catTree h ref + +catCommit :: Git.Ref -> Annex (Maybe Commit) +catCommit ref = withCatFileHandle $ \h -> + liftIO $ Git.CatFile.catCommit h ref + +catObjectDetails :: Git.Ref -> Annex (Maybe (L.ByteString, Sha, ObjectType)) +catObjectDetails ref = withCatFileHandle $ \h -> + liftIO $ Git.CatFile.catObjectDetails h ref + +{- There can be multiple index files, and a different cat-file is needed + - for each. That is selected by setting GIT_INDEX_FILE in the gitEnv + - before running this. -} +withCatFileHandle :: (Git.CatFile.CatFileHandle -> Annex a) -> Annex a +withCatFileHandle = withCatFileHandle' + Git.CatFile.catFileStart + catFileMap + (\v m -> v { catFileMap = m }) + +withCatFileMetaDataHandle :: (Git.CatFile.CatFileMetaDataHandle -> Annex a) -> Annex a +withCatFileMetaDataHandle = withCatFileHandle' + Git.CatFile.catFileMetaDataStart + catFileMetaDataMap + (\v m -> v { catFileMetaDataMap = m }) + +withCatFileHandle' + :: (Repo -> IO hdl) + -> (CatMap -> M.Map FilePath (ResourcePool hdl)) + -> (CatMap -> M.Map FilePath (ResourcePool hdl) -> CatMap) + -> (hdl -> Annex a) + -> Annex a +withCatFileHandle' startcat get set a = do + cfh <- Annex.getState Annex.catfilehandles + indexfile <- fromMaybe "" . maybe Nothing (lookup indexEnv) + <$> fromRepo gitEnv + p <- case cfh of + CatFileHandlesNonConcurrent m -> case M.lookup indexfile (get m) of + Just p -> return p + Nothing -> do + p <- mkResourcePoolNonConcurrent startcatfile + let !m' = set m (M.insert indexfile p (get m)) + Annex.changeState $ \s -> s + { Annex.catfilehandles = CatFileHandlesNonConcurrent m' } + return p + CatFileHandlesPool tm -> do + m <- liftIO $ atomically $ takeTMVar tm + case M.lookup indexfile (get m) of + Just p -> do + liftIO $ atomically $ putTMVar tm m + return p + Nothing -> do + p <- mkResourcePool maxCatFiles + let !m' = set m (M.insert indexfile p (get m)) + liftIO $ atomically $ putTMVar tm m' + return p + withResourcePool p startcatfile a + where + startcatfile = inRepo startcat + +{- A lot of git cat-file processes are unlikely to improve concurrency, + - because a query to them takes only a little bit of CPU, and tends to be + - bottlenecked on disk. Also, they each open a number of files, so + - using too many might run out of file handles. So, only start a maximum + - of 2. + - + - Note that each different index file gets its own pool of cat-files; + - this is the size of each pool. In all, 4 times this many cat-files + - may end up running. + -} +maxCatFiles :: Int +maxCatFiles = 2 + +{- Stops all running cat-files. Should only be run when it's known that + - nothing is using the handles, eg at shutdown. -} +catFileStop :: Annex () +catFileStop = do + cfh <- Annex.getState Annex.catfilehandles + m <- case cfh of + CatFileHandlesNonConcurrent m -> do + Annex.changeState $ \s -> s { Annex.catfilehandles = CatFileHandlesNonConcurrent emptyCatMap } + return m + CatFileHandlesPool tm -> + liftIO $ atomically $ swapTMVar tm emptyCatMap + liftIO $ forM_ (M.elems (catFileMap m)) $ \p -> + freeResourcePool p Git.CatFile.catFileStop + liftIO $ forM_ (M.elems (catFileMetaDataMap m)) $ \p -> + freeResourcePool p Git.CatFile.catFileMetaDataStop + +{- From ref to a symlink or a pointer file, get the key. -} +catKey :: Ref -> Annex (Maybe Key) +catKey ref = catObjectMetaData ref >>= \case + Just (_, sz, _) -> catKey' ref sz + Nothing -> return Nothing + +catKey' :: Ref -> FileSize -> Annex (Maybe Key) +catKey' ref sz + -- Avoid catting large files, that cannot be symlinks or + -- pointer files, which would require buffering their + -- content in memory, as well as a lot of IO. + | sz <= fromIntegral maxPointerSz = + parseLinkTargetOrPointer . L.toStrict <$> catObject ref +catKey' _ _ = return Nothing + +{- Gets a symlink target. -} +catSymLinkTarget :: Sha -> Annex RawFilePath +catSymLinkTarget sha = fromInternalGitPath . L.toStrict <$> get + where + -- Avoid buffering the whole file content, which might be large. + -- 8192 is enough if it really is a symlink. + get = L.take 8192 <$> catObject sha + +{- From a file in the repository back to the key. + - + - Ideally, this should reflect the key that's staged in the index, + - not the key that's committed to HEAD. Unfortunately, git cat-file + - does not refresh the index file after it's started up, so things + - newly staged in the index won't show up. It does, however, notice + - when branches change. + - + - For command-line git-annex use, that doesn't matter. It's perfectly + - reasonable for things staged in the index after the currently running + - git-annex process to not be noticed by it. However, we do want to see + - what's in the index, since it may have uncommitted changes not in HEAD + - + - For the assistant, this is much more of a problem, since it commits + - files and then needs to be able to immediately look up their keys. + - OTOH, the assistant doesn't keep changes staged in the index for very + - long at all before committing them -- and it won't look at the keys + - of files until after committing them. + - + - So, this gets info from the index, unless running as a daemon. + -} +catKeyFile :: RawFilePath -> Annex (Maybe Key) +catKeyFile f = ifM (Annex.getState Annex.daemon) + ( catKeyFileHEAD f + , maybe (pure Nothing) catKey =<< inRepo (Git.Ref.fileRef f) + ) + +catKeyFileHEAD :: RawFilePath -> Annex (Maybe Key) +catKeyFileHEAD f = maybe (pure Nothing) catKey + =<< inRepo (Git.Ref.fileFromRef Git.Ref.headRef f) + +{- Look in the original branch from whence an adjusted branch is based + - to find the file. But only when the adjustment hides some files. -} +catKeyFileHidden :: RawFilePath -> CurrBranch -> Annex (Maybe Key) +catKeyFileHidden = hiddenCat catKey + +catObjectMetaDataHidden :: RawFilePath -> CurrBranch -> Annex (Maybe (Sha, Integer, ObjectType)) +catObjectMetaDataHidden = hiddenCat catObjectMetaData + +hiddenCat :: (Ref -> Annex (Maybe a)) -> RawFilePath -> CurrBranch -> Annex (Maybe a) +hiddenCat a f (Just origbranch, Just adj) + | adjustmentHidesFiles adj = + maybe (pure Nothing) a + =<< inRepo (Git.Ref.fileFromRef origbranch f) +hiddenCat _ _ _ = return Nothing diff --git a/Annex/ChangedRefs.hs b/Annex/ChangedRefs.hs new file mode 100644 index 0000000000..7a9ce8a34f --- /dev/null +++ b/Annex/ChangedRefs.hs @@ -0,0 +1,111 @@ +{- Waiting for changed git refs + - + - Copyright 2014-2016 Joey Hess + - + - Licensed under the GNU AGPL version 3 or higher. + -} + +{-# LANGUAGE OverloadedStrings #-} + +module Annex.ChangedRefs + ( ChangedRefs(..) + , ChangedRefsHandle + , waitChangedRefs + , drainChangedRefs + , stopWatchingChangedRefs + , watchChangedRefs + ) where + +import Annex.Common +import Utility.DirWatcher +import Utility.DirWatcher.Types +import Utility.Directory.Create +import qualified Git +import Git.Sha +import qualified Utility.SimpleProtocol as Proto + +import Control.Concurrent +import Control.Concurrent.STM +import Control.Concurrent.STM.TBMChan +import qualified Data.ByteString as S +import qualified System.FilePath.ByteString as P + +newtype ChangedRefs = ChangedRefs [Git.Ref] + deriving (Show) + +instance Proto.Serializable ChangedRefs where + serialize (ChangedRefs l) = unwords $ map Git.fromRef l + deserialize = Just . ChangedRefs . map (Git.Ref . encodeBS) . words + +data ChangedRefsHandle = ChangedRefsHandle DirWatcherHandle (TBMChan Git.Sha) + +-- | Wait for one or more git refs to change. +-- +-- When possible, coalesce ref writes that occur closely together +-- in time. Delay up to 0.05 seconds to get more ref writes. +waitChangedRefs :: ChangedRefsHandle -> IO ChangedRefs +waitChangedRefs (ChangedRefsHandle _ chan) = + atomically (readTBMChan chan) >>= \case + Nothing -> return $ ChangedRefs [] + Just r -> do + threadDelay 50000 + rs <- atomically $ loop [] + return $ ChangedRefs (r:rs) + where + loop rs = tryReadTBMChan chan >>= \case + Just (Just r) -> loop (r:rs) + _ -> return rs + +-- | Remove any changes that might be buffered in the channel, +-- without waiting for any new changes. +drainChangedRefs :: ChangedRefsHandle -> IO () +drainChangedRefs (ChangedRefsHandle _ chan) = atomically go + where + go = tryReadTBMChan chan >>= \case + Just (Just _) -> go + _ -> return () + +stopWatchingChangedRefs :: ChangedRefsHandle -> IO () +stopWatchingChangedRefs h@(ChangedRefsHandle wh chan) = do + stopWatchDir wh + atomically $ closeTBMChan chan + drainChangedRefs h + +watchChangedRefs :: Annex (Maybe ChangedRefsHandle) +watchChangedRefs = do + -- This channel is used to accumulate notifications, + -- because the DirWatcher might have multiple threads that find + -- changes at the same time. It is bounded to allow a watcher + -- to be started once and reused, without too many changes being + -- buffered in memory. + chan <- liftIO $ newTBMChanIO 100 + + g <- gitRepo + let gittop = Git.localGitDir g + let refdir = gittop P. "refs" + liftIO $ createDirectoryUnder [gittop] refdir + + let notifyhook = Just $ notifyHook chan + let hooks = mkWatchHooks + { addHook = notifyhook + , modifyHook = notifyhook + } + + if canWatch + then do + h <- liftIO $ watchDir + (fromRawFilePath refdir) + (const False) True hooks id + return $ Just $ ChangedRefsHandle h chan + else return Nothing + +notifyHook :: TBMChan Git.Sha -> FilePath -> Maybe FileStatus -> IO () +notifyHook chan reffile _ + | ".lock" `isSuffixOf` reffile = noop + | otherwise = void $ do + sha <- catchDefaultIO Nothing $ + extractSha <$> S.readFile reffile + -- When the channel is full, there is probably no reader + -- running, or ref changes have been occurring very fast, + -- so it's ok to not write the change to it. + maybe noop (void . atomically . tryWriteTBMChan chan) sha diff --git a/Annex/CheckAttr.hs b/Annex/CheckAttr.hs new file mode 100644 index 0000000000..6ad8fafce6 --- /dev/null +++ b/Annex/CheckAttr.hs @@ -0,0 +1,74 @@ +{- git check-attr interface + - + - Copyright 2012-2020 Joey Hess + - + - Licensed under the GNU AGPL version 3 or higher. + -} + +module Annex.CheckAttr ( + annexAttrs, + checkAttr, + checkAttrs, + checkAttrStop, + mkConcurrentCheckAttrHandle, +) where + +import Annex.Common +import qualified Git.CheckAttr as Git +import qualified Annex +import Utility.ResourcePool +import Types.Concurrency +import Annex.Concurrent.Utility + +{- All gitattributes used by git-annex. -} +annexAttrs :: [Git.Attr] +annexAttrs = + [ "annex.backend" + , "annex.largefiles" + , "annex.numcopies" + , "annex.mincopies" + ] + +checkAttr :: Git.Attr -> RawFilePath -> Annex String +checkAttr attr file = withCheckAttrHandle $ \h -> do + r <- liftIO $ Git.checkAttr h attr file + if r == Git.unspecifiedAttr + then return "" + else return r + +checkAttrs :: [Git.Attr] -> RawFilePath -> Annex [String] +checkAttrs attrs file = withCheckAttrHandle $ \h -> + liftIO $ Git.checkAttrs h attrs file + +withCheckAttrHandle :: (Git.CheckAttrHandle -> Annex a) -> Annex a +withCheckAttrHandle a = + maybe mkpool go =<< Annex.getState Annex.checkattrhandle + where + go p = withResourcePool p start a + start = inRepo $ Git.checkAttrStart annexAttrs + mkpool = do + -- This only runs in non-concurrent code paths; + -- a concurrent pool is set up earlier when needed. + p <- mkResourcePoolNonConcurrent start + Annex.changeState $ \s -> s { Annex.checkattrhandle = Just p } + go p + +mkConcurrentCheckAttrHandle :: Concurrency -> Annex (ResourcePool Git.CheckAttrHandle) +mkConcurrentCheckAttrHandle c = + Annex.getState Annex.checkattrhandle >>= \case + Just p@(ResourcePool {}) -> return p + _ -> mkResourcePool =<< liftIO (maxCheckAttrs c) + +{- git check-attr is typically CPU bound, and is not likely to be the main + - bottleneck for any command. So limit to the number of CPU cores, maximum, + - while respecting the -Jn value. + -} +maxCheckAttrs :: Concurrency -> IO Int +maxCheckAttrs = concurrencyUpToCpus + +checkAttrStop :: Annex () +checkAttrStop = maybe noop stop =<< Annex.getState Annex.checkattrhandle + where + stop p = do + liftIO $ freeResourcePool p Git.checkAttrStop + Annex.changeState $ \s -> s { Annex.checkattrhandle = Nothing } diff --git a/Annex/CheckIgnore.hs b/Annex/CheckIgnore.hs new file mode 100644 index 0000000000..d3c03f210a --- /dev/null +++ b/Annex/CheckIgnore.hs @@ -0,0 +1,64 @@ +{- git check-ignore interface, with handle automatically stored in + - the Annex monad + - + - Copyright 2013-2020 Joey Hess + - + - Licensed under the GNU AGPL version 3 or higher. + -} + +module Annex.CheckIgnore ( + CheckGitIgnore(..), + checkIgnored, + checkIgnoreStop, + mkConcurrentCheckIgnoreHandle, +) where + +import Annex.Common +import qualified Git.CheckIgnore as Git +import qualified Annex +import Utility.ResourcePool +import Types.Concurrency +import Annex.Concurrent.Utility + +newtype CheckGitIgnore = CheckGitIgnore Bool + +checkIgnored :: CheckGitIgnore -> RawFilePath -> Annex Bool +checkIgnored (CheckGitIgnore False) _ = pure False +checkIgnored (CheckGitIgnore True) file = + ifM (Annex.getRead Annex.force) + ( pure False + , withCheckIgnoreHandle $ \h -> liftIO $ Git.checkIgnored h file + ) + +withCheckIgnoreHandle :: (Git.CheckIgnoreHandle -> Annex a) -> Annex a +withCheckIgnoreHandle a = + maybe mkpool go =<< Annex.getState Annex.checkignorehandle + where + go p = withResourcePool p start a + start = inRepo Git.checkIgnoreStart + mkpool = do + -- This only runs in non-concurrent code paths; + -- a concurrent pool is set up earlier when needed. + p <- mkResourcePoolNonConcurrent start + Annex.changeState $ \s -> s { Annex.checkignorehandle = Just p } + go p + +mkConcurrentCheckIgnoreHandle :: Concurrency -> Annex (ResourcePool Git.CheckIgnoreHandle) +mkConcurrentCheckIgnoreHandle c = + Annex.getState Annex.checkignorehandle >>= \case + Just p@(ResourcePool {}) -> return p + _ -> mkResourcePool =<< liftIO (maxCheckIgnores c) + +{- git check-ignore is typically CPU bound, and is not likely to be the main + - bottleneck for any command. So limit to the number of CPU cores, maximum, + - while respecting the -Jn value. + -} +maxCheckIgnores :: Concurrency -> IO Int +maxCheckIgnores = concurrencyUpToCpus + +checkIgnoreStop :: Annex () +checkIgnoreStop = maybe noop stop =<< Annex.getState Annex.checkignorehandle + where + stop p = do + liftIO $ freeResourcePool p Git.checkIgnoreStop + Annex.changeState $ \s -> s { Annex.checkignorehandle = Nothing } diff --git a/Annex/Common.hs b/Annex/Common.hs new file mode 100644 index 0000000000..0fc602205a --- /dev/null +++ b/Annex/Common.hs @@ -0,0 +1,16 @@ +{-# LANGUAGE CPP #-} + +module Annex.Common (module X) where + +import Common as X +import Types as X +import Key as X +import Types.UUID as X +import Annex as X (gitRepo, inRepo, fromRepo, calcRepo, calcRepo') +import Annex.Locations as X +import Annex.Debug as X (fastDebug, debug) +import Messages as X +import Git.Quote as X +#ifndef mingw32_HOST_OS +import System.Posix.IO as X hiding (createPipe, append) +#endif diff --git a/Annex/Concurrent.hs b/Annex/Concurrent.hs new file mode 100644 index 0000000000..72ea40318f --- /dev/null +++ b/Annex/Concurrent.hs @@ -0,0 +1,113 @@ +{- git-annex concurrent state + - + - Copyright 2015-2022 Joey Hess + - + - Licensed under the GNU AGPL version 3 or higher. + -} + +module Annex.Concurrent ( + module Annex.Concurrent, + module Annex.Concurrent.Utility +) where + +import Annex +import Annex.Common +import Annex.Concurrent.Utility +import qualified Annex.Queue +import Types.Concurrency +import Types.CatFileHandles +import Annex.CatFile +import Annex.CheckAttr +import Annex.HashObject +import Annex.CheckIgnore + +import qualified Data.Map as M + +setConcurrency :: ConcurrencySetting -> Annex () +setConcurrency (ConcurrencyCmdLine s) = setConcurrency' s ConcurrencyCmdLine +setConcurrency (ConcurrencyGitConfig s) = setConcurrency' s ConcurrencyGitConfig + +setConcurrency' :: Concurrency -> (Concurrency -> ConcurrencySetting) -> Annex () +setConcurrency' NonConcurrent f = + Annex.changeState $ \s -> s + { Annex.concurrency = f NonConcurrent + } +setConcurrency' c f = do + oldc <- Annex.getState Annex.concurrency + case oldc of + ConcurrencyCmdLine NonConcurrent -> fromnonconcurrent + ConcurrencyGitConfig NonConcurrent -> fromnonconcurrent + _ + | oldc == newc -> return () + | otherwise -> + Annex.changeState $ \s -> s + { Annex.concurrency = newc + } + where + newc = f c + fromnonconcurrent = do + catFileStop + checkAttrStop + hashObjectStop + checkIgnoreStop + cfh <- liftIO catFileHandlesPool + cah <- mkConcurrentCheckAttrHandle c + hoh <- mkConcurrentHashObjectHandle c + cih <- mkConcurrentCheckIgnoreHandle c + Annex.changeState $ \s -> s + { Annex.concurrency = newc + , Annex.catfilehandles = cfh + , Annex.checkattrhandle = Just cah + , Annex.hashobjecthandle = Just hoh + , Annex.checkignorehandle = Just cih + } + +{- Allows forking off a thread that uses a copy of the current AnnexState + - to run an Annex action. + - + - The returned IO action can be used to start the thread. + - It returns an Annex action that must be run in the original + - calling context to merge the forked AnnexState back into the + - current AnnexState. + -} +forkState :: Annex a -> Annex (IO (Annex a)) +forkState a = do + rd <- Annex.getRead id + st <- dupState + return $ do + (ret, (newst, _rd)) <- run (st, rd) a + return $ do + mergeState newst + return ret + +{- Returns a copy of the current AnnexState that is safe to be + - used when forking off a thread. + - + - After an Annex action is run using this AnnexState, it + - should be merged back into the current Annex's state, + - by calling mergeState. + -} +dupState :: Annex AnnexState +dupState = do + st <- Annex.getState id + -- Make sure that concurrency is enabled, if it was not already, + -- so the concurrency-safe resource pools are set up. + st' <- case getConcurrency' (Annex.concurrency st) of + NonConcurrent -> do + setConcurrency (ConcurrencyCmdLine (Concurrent 1)) + Annex.getState id + _ -> return st + return $ st' + -- each thread has its own repoqueue + { Annex.repoqueue = Nothing + -- no errors from this thread yet + , Annex.errcounter = 0 + } + +{- Merges the passed AnnexState into the current Annex state. -} +mergeState :: AnnexState -> Annex () +mergeState st = do + forM_ (M.toList $ Annex.cleanupactions st) $ + uncurry addCleanupAction + Annex.Queue.mergeFrom st + changeState $ \s -> s { errcounter = errcounter s + errcounter st } diff --git a/Annex/Concurrent/Utility.hs b/Annex/Concurrent/Utility.hs new file mode 100644 index 0000000000..2810f6da6b --- /dev/null +++ b/Annex/Concurrent/Utility.hs @@ -0,0 +1,31 @@ +{- git-annex concurrency utilities + - + - Copyright 2020 Joey Hess + - + - Licensed under the GNU AGPL version 3 or higher. + -} + +module Annex.Concurrent.Utility where + +import Annex +import Types.Concurrency + +import GHC.Conc + +getConcurrency :: Annex Concurrency +getConcurrency = getConcurrency' <$> getState concurrency + +getConcurrency' :: ConcurrencySetting -> Concurrency +getConcurrency' (ConcurrencyCmdLine c) = c +getConcurrency' (ConcurrencyGitConfig c) = c + +{- Honor the requested level of concurrency, but only up to the number of + - CPU cores. Useful for things that are known to be CPU bound. -} +concurrencyUpToCpus :: Concurrency -> IO Int +concurrencyUpToCpus c = do + let cn = case c of + Concurrent n -> n + NonConcurrent -> 1 + ConcurrentPerCpu -> 1 + pn <- getNumProcessors + return (min cn pn) diff --git a/Annex/Content.hs b/Annex/Content.hs new file mode 100644 index 0000000000..693c1de2da --- /dev/null +++ b/Annex/Content.hs @@ -0,0 +1,949 @@ +{- git-annex file content managing + - + - Copyright 2010-2023 Joey Hess + - + - Licensed under the GNU AGPL version 3 or higher. + -} + +{-# LANGUAGE CPP #-} +{-# LANGUAGE OverloadedStrings #-} + +module Annex.Content ( + inAnnex, + inAnnex', + inAnnexSafe, + inAnnexCheck, + objectFileExists, + lockContentShared, + lockContentForRemoval, + ContentRemovalLock, + RetrievalSecurityPolicy(..), + getViaTmp, + getViaTmpFromDisk, + verificationOfContentFailed, + checkDiskSpaceToGet, + checkSecureHashes, + prepTmp, + withTmp, + checkDiskSpace, + needMoreDiskSpace, + moveAnnex, + populatePointerFile, + linkToAnnex, + linkFromAnnex, + linkFromAnnex', + LinkAnnexResult(..), + unlinkAnnex, + checkedCopyFile, + linkOrCopy, + linkOrCopy', + sendAnnex, + prepSendAnnex, + prepSendAnnex', + removeAnnex, + moveBad, + KeyLocation(..), + listKeys, + listKeys', + saveState, + downloadUrl, + preseedTmp, + dirKeys, + withObjectLoc, + staleKeysPrune, + pruneTmpWorkDirBefore, + isUnmodified, + isUnmodifiedCheap, + verifyKeyContentPostRetrieval, + verifyKeyContent, + VerifyConfig, + VerifyConfigA(..), + Verification(..), + unVerified, + withTmpWorkDir, + KeyStatus(..), + isKeyUnlockedThin, + getKeyStatus, + getKeyFileStatus, + cleanObjectDirs, + contentSize, +) where + +import System.IO.Unsafe (unsafeInterleaveIO) +import qualified Data.Set as S + +import Annex.Common +import Annex.Content.Presence +import Annex.Content.LowLevel +import Annex.Content.PointerFile +import Annex.Verify +import qualified Git +import qualified Annex +import qualified Annex.Queue +import qualified Annex.Branch +import qualified Annex.Url as Url +import qualified Backend +import qualified Database.Keys +import Git.FilePath +import Annex.Perms +import Annex.Link +import Annex.LockPool +import Annex.UUID +import Annex.InodeSentinal +import Annex.ReplaceFile +import Annex.AdjustedBranch (adjustedBranchRefresh) +import Annex.DirHashes +import Messages.Progress +import Types.Remote (RetrievalSecurityPolicy(..), VerifyConfigA(..)) +import Types.NumCopies +import Types.Key +import Types.Transfer +import Logs.Transfer +import Logs.Location +import Utility.InodeCache +import Utility.CopyFile +import Utility.Metered +#ifndef mingw32_HOST_OS +import Utility.FileMode +#endif +import qualified Utility.RawFilePath as R + +import qualified System.FilePath.ByteString as P +import System.PosixCompat.Files (isSymbolicLink, linkCount) + +{- Prevents the content from being removed while the action is running. + - Uses a shared lock. + - + - If locking fails, or the content is not present, throws an exception + - rather than running the action. + -} +lockContentShared :: Key -> (VerifiedCopy -> Annex a) -> Annex a +lockContentShared key a = lockContentUsing lock key notpresent $ + ifM (inAnnex key) + ( do + u <- getUUID + withVerifiedCopy LockedCopy u (return True) a + , notpresent + ) + where + notpresent = giveup $ "failed to lock content: not present" +#ifndef mingw32_HOST_OS + lock _ (Just lockfile) = + ( posixLocker tryLockShared lockfile + , Just (posixLocker tryLockExclusive lockfile) + ) + lock contentfile Nothing = + ( tryLockShared Nothing contentfile + , Nothing + ) +#else + lock = winLocker lockShared +#endif + +{- Exclusively locks content, while performing an action that + - might remove it. + - + - If locking fails, throws an exception rather than running the action. + - + - When the content file itself is used as the lock file, + - and locking fails because the the content is not present, runs the + - fallback action instead. However, the content is not guaranteed to be + - present when this succeeds. + -} +lockContentForRemoval :: Key -> Annex a -> (ContentRemovalLock -> Annex a) -> Annex a +lockContentForRemoval key fallback a = lockContentUsing lock key fallback $ + a (ContentRemovalLock key) + where +#ifndef mingw32_HOST_OS + lock _ (Just lockfile) = (posixLocker tryLockExclusive lockfile, Nothing) + {- No lock file, so the content file itself is locked. + - Since content files are stored with the write bit + - disabled, have to fiddle with permissions to open + - for an exclusive lock. -} + lock contentfile Nothing = + let lck = bracket_ + (thawContent contentfile) + (freezeContent contentfile) + (tryLockExclusive Nothing contentfile) + in (lck, Nothing) +#else + lock = winLocker lockExclusive +#endif + +{- Passed the object content file, and maybe a separate lock file to use, + - when the content file itself should not be locked. -} +type ContentLocker = RawFilePath -> Maybe LockFile -> (Annex (Maybe LockHandle), Maybe (Annex (Maybe LockHandle))) + +#ifndef mingw32_HOST_OS +posixLocker :: (Maybe ModeSetter -> LockFile -> Annex (Maybe LockHandle)) -> LockFile -> Annex (Maybe LockHandle) +posixLocker takelock lockfile = do + mode <- annexFileMode + modifyContentDirWhenExists lockfile $ + takelock (Just mode) lockfile +#else +winLocker :: (LockFile -> IO (Maybe LockHandle)) -> ContentLocker +winLocker takelock _ (Just lockfile) = + let lck = do + modifyContentDir lockfile $ + void $ liftIO $ tryIO $ + writeFile (fromRawFilePath lockfile) "" + liftIO $ takelock lockfile + in (lck, Nothing) +-- never reached; windows always uses a separate lock file +winLocker _ _ Nothing = (return Nothing, Nothing) +#endif + +{- The fallback action is run if the ContentLocker throws an IO exception + - and the content is not present. It's not guaranteed to always run when + - the content is not present, because the content file is not always + - the file that is locked. -} +lockContentUsing :: ContentLocker -> Key -> Annex a -> Annex a -> Annex a +lockContentUsing contentlocker key fallback a = withContentLockFile key $ \mlockfile -> do + contentfile <- calcRepo (gitAnnexLocation key) + let (locker, sharedtoexclusive) = contentlocker contentfile mlockfile + bracket + (lock locker mlockfile) + (either (const noop) (unlock sharedtoexclusive mlockfile)) + go + where + alreadylocked = giveup "content is locked" + failedtolock e = giveup $ "failed to lock content: " ++ show e + +#ifndef mingw32_HOST_OS + lock locker mlockfile = +#else + lock locker _mlockfile = +#endif + tryIO $ locker >>= \case + Nothing -> alreadylocked + Just h -> +#ifndef mingw32_HOST_OS + case mlockfile of + Nothing -> return h + Just lockfile -> + ifM (checkSaneLock lockfile h) + ( return h + , alreadylocked + ) +#else + return h +#endif + + go (Right _) = a + go (Left e) = ifM (inAnnex key) + ( failedtolock e + , fallback + ) + +#ifndef mingw32_HOST_OS + unlock sharedtoexclusive mlockfile lck = case (sharedtoexclusive, mlockfile) of + -- We have a shared lock, so other processes may also + -- have shared locks of the same lock file. To avoid + -- deleting the lock file when there are other shared + -- locks, try to convert to an exclusive lock, and only + -- delete it when that succeeds. + -- + -- Since other processes might be doing the same, + -- a race is possible where we open the lock file + -- and then another process takes the exclusive lock and + -- deletes it, leaving us with an invalid lock. To avoid + -- that race, checkSaneLock is used after taking the lock + -- here, and above. + (Just exclusivelocker, Just lockfile) -> do + liftIO $ dropLock lck + exclusivelocker >>= \case + Nothing -> return () + Just h -> do + whenM (checkSaneLock lockfile h) $ do + cleanuplockfile lockfile + liftIO $ dropLock h + -- We have an exclusive lock, so no other process can have + -- the lock file locked, and so it's safe to remove it, as + -- long as all lock attempts use checkSaneLock. + _ -> do + maybe noop cleanuplockfile mlockfile + liftIO $ dropLock lck +#else + unlock _ mlockfile lck = do + -- Can't delete a locked file on Windows, + -- so close our lock first. If there are other shared + -- locks, they will prevent the file deletion from + -- happening. + liftIO $ dropLock lck + maybe noop cleanuplockfile mlockfile +#endif + + cleanuplockfile lockfile = void $ tryNonAsync $ do + thawContentDir lockfile + liftIO $ removeWhenExistsWith R.removeLink lockfile + cleanObjectDirs lockfile + +{- Runs an action, passing it the temp file to get, + - and if the action succeeds, verifies the file matches + - the key and moves the file into the annex as a key's content. -} +getViaTmp :: RetrievalSecurityPolicy -> VerifyConfig -> Key -> AssociatedFile -> Maybe FileSize -> (RawFilePath -> Annex (Bool, Verification)) -> Annex Bool +getViaTmp rsp v key af sz action = + checkDiskSpaceToGet key sz False $ + getViaTmpFromDisk rsp v key af action + +{- Like getViaTmp, but does not check that there is enough disk space + - for the incoming key. For use when the key content is already on disk + - and not being copied into place. -} +getViaTmpFromDisk :: RetrievalSecurityPolicy -> VerifyConfig -> Key -> AssociatedFile -> (RawFilePath -> Annex (Bool, Verification)) -> Annex Bool +getViaTmpFromDisk rsp v key af action = checkallowed $ do + tmpfile <- prepTmp key + resuming <- liftIO $ R.doesPathExist tmpfile + (ok, verification) <- action tmpfile + -- When the temp file already had content, we don't know if + -- that content is good or not, so only trust if it the action + -- Verified it in passing. Otherwise, force verification even + -- if the VerifyConfig normally disables it. + let verification' = if resuming + then case verification of + Verified -> Verified + _ -> MustVerify + else verification + if ok + then ifM (verifyKeyContentPostRetrieval rsp v verification' key tmpfile) + ( pruneTmpWorkDirBefore tmpfile (moveAnnex key af) + , do + verificationOfContentFailed tmpfile + return False + ) + -- On transfer failure, the tmp file is left behind, in case + -- caller wants to resume its transfer + else return False + where + -- Avoid running the action to get the content when the + -- RetrievalSecurityPolicy would cause verification to always fail. + checkallowed a = case rsp of + RetrievalAllKeysSecure -> a + RetrievalVerifiableKeysSecure -> ifM (isVerifiable key) + ( a + , ifM (annexAllowUnverifiedDownloads <$> Annex.getGitConfig) + ( a + , warnUnverifiableInsecure key >> return False + ) + ) + +{- When the content of a file that was successfully transferred from a remote + - fails to verify, use this to display a message so the user knows why it + - failed, and to clean up the corrupted content. + - + - The bad content is not retained, because the transfer of it succeeded. + - So it's not incomplete and a resume using it will not work. While + - some protocols like rsync could recover such a bad content file, + - they are assumed to not write out bad data to a file in the first place. + - Most protocols, including the P2P protocol, pick up downloads where they + - left off, and so if the bad content were not deleted, repeated downloads + - would continue to fail. + -} +verificationOfContentFailed :: RawFilePath -> Annex () +verificationOfContentFailed tmpfile = do + warning "Verification of content failed" + pruneTmpWorkDirBefore tmpfile + (liftIO . removeWhenExistsWith R.removeLink) + +{- Checks if there is enough free disk space to download a key + - to its temp file. + - + - When the temp file already exists, count the space it is using as + - free, since the download will overwrite it or resume. + - + - Wen there's enough free space, runs the download action. + -} +checkDiskSpaceToGet :: Key -> Maybe FileSize -> a -> Annex a -> Annex a +checkDiskSpaceToGet key sz unabletoget getkey = do + tmp <- fromRepo (gitAnnexTmpObjectLocation key) + e <- liftIO $ doesFileExist (fromRawFilePath tmp) + alreadythere <- liftIO $ if e + then getFileSize tmp + else return 0 + ifM (checkDiskSpace sz Nothing key alreadythere True) + ( do + -- The tmp file may not have been left writable + when e $ thawContent tmp + getkey + , return unabletoget + ) + +prepTmp :: Key -> Annex RawFilePath +prepTmp key = do + tmp <- fromRepo $ gitAnnexTmpObjectLocation key + createAnnexDirectory (parentDir tmp) + return tmp + +{- Prepares a temp file for a key, runs an action on it, and cleans up + - the temp file. If the action throws an exception, the temp file is + - left behind, which allows for resuming. + -} +withTmp :: Key -> (RawFilePath -> Annex a) -> Annex a +withTmp key action = do + tmp <- prepTmp key + res <- action tmp + pruneTmpWorkDirBefore tmp (liftIO . removeWhenExistsWith R.removeLink) + return res + +{- Moves a key's content into .git/annex/objects/ + - + - When a key has associated pointer files, the object is hard + - linked (or copied) to the files, and the object file is left thawed. + - + - What if the key there already has content? This could happen for + - various reasons; perhaps the same content is being annexed again. + - Perhaps there has been a hash collision generating the keys. + - + - The current strategy is to assume that in this case it's safe to delete + - one of the two copies of the content; and the one already in the annex + - is left there, assuming it's the original, canonical copy. + - + - I considered being more paranoid, and checking that both files had + - the same content. Decided against it because A) users explicitly choose + - a backend based on its hashing properties and so if they're dealing + - with colliding files it's their own fault and B) adding such a check + - would not catch all cases of colliding keys. For example, perhaps + - a remote has a key; if it's then added again with different content then + - the overall system now has two different pieces of content for that + - key, and one of them will probably get deleted later. So, adding the + - check here would only raise expectations that git-annex cannot truly + - meet. + - + - May return false, when a particular variety of key is not being + - accepted into the repository. Will display a warning message in this + - case. May also throw exceptions in some cases. + -} +moveAnnex :: Key -> AssociatedFile -> RawFilePath -> Annex Bool +moveAnnex key af src = ifM (checkSecureHashes' key) + ( do + withObjectLoc key storeobject + return True + , return False + ) + where + storeobject dest = ifM (liftIO $ R.doesPathExist dest) + ( alreadyhave + , adjustedBranchRefresh af $ modifyContentDir dest $ do + liftIO $ moveFile src dest + -- Freeze the object file now that it is in place. + -- Waiting until now to freeze it allows for freeze + -- hooks that prevent moving the file. + freezeContent dest + g <- Annex.gitRepo + fs <- map (`fromTopFilePath` g) + <$> Database.Keys.getAssociatedFiles key + unless (null fs) $ do + destic <- withTSDelta $ + liftIO . genInodeCache dest + ics <- mapM (populatePointerFile (Restage True) key dest) fs + Database.Keys.addInodeCaches key + (catMaybes (destic:ics)) + ) + alreadyhave = liftIO $ R.removeLink src + +checkSecureHashes :: Key -> Annex (Maybe String) +checkSecureHashes key = ifM (Backend.isCryptographicallySecureKey key) + ( return Nothing + , ifM (annexSecureHashesOnly <$> Annex.getGitConfig) + ( return $ Just $ "annex.securehashesonly blocked adding " ++ decodeBS (formatKeyVariety (fromKey keyVariety key)) ++ " key" + , return Nothing + ) + ) + +checkSecureHashes' :: Key -> Annex Bool +checkSecureHashes' key = checkSecureHashes key >>= \case + Nothing -> return True + Just msg -> do + warning $ UnquotedString $ msg ++ " to annex objects" + return False + +data LinkAnnexResult = LinkAnnexOk | LinkAnnexFailed | LinkAnnexNoop + deriving (Eq) + +{- Populates the annex object file by hard linking or copying a source + - file to it. -} +linkToAnnex :: Key -> RawFilePath -> Maybe InodeCache -> Annex LinkAnnexResult +linkToAnnex key src srcic = ifM (checkSecureHashes' key) + ( do + dest <- calcRepo (gitAnnexLocation key) + modifyContentDir dest $ linkAnnex To key src srcic dest Nothing + , return LinkAnnexFailed + ) + +{- Makes a destination file be a link or copy from the annex object. + - + - linkAnnex stats the file after copying it to add to the inode + - cache. But dest may be a file in the working tree, which could + - get modified immediately after being populated. To avoid such a + - race, call linkAnnex on a temporary file and move it into place + - afterwards. Note that a consequence of this is that, if the file + - already exists, it will be overwritten. + -} +linkFromAnnex :: Key -> RawFilePath -> Maybe FileMode -> Annex LinkAnnexResult +linkFromAnnex key dest destmode = + replaceFile' (const noop) (fromRawFilePath dest) (== LinkAnnexOk) $ \tmp -> + linkFromAnnex' key tmp destmode + +{- This is only safe to use when dest is not a worktree file. -} +linkFromAnnex' :: Key -> RawFilePath -> Maybe FileMode -> Annex LinkAnnexResult +linkFromAnnex' key dest destmode = do + src <- calcRepo (gitAnnexLocation key) + srcic <- withTSDelta (liftIO . genInodeCache src) + linkAnnex From key src srcic dest destmode + +data FromTo = From | To + +{- Hard links or copies from or to the annex object location. + - Updates inode cache. + - + - Freezes or thaws the destination appropriately. + - + - When a hard link is made, the annex object necessarily has to be thawed + - too. So, adding an object to the annex with a hard link can prevent + - losing the content if the source file is deleted, but does not + - guard against modifications. + - + - Nothing is done if the destination file already exists. + -} +linkAnnex :: FromTo -> Key -> RawFilePath -> Maybe InodeCache -> RawFilePath -> Maybe FileMode -> Annex LinkAnnexResult +linkAnnex _ _ _ Nothing _ _ = return LinkAnnexFailed +linkAnnex fromto key src (Just srcic) dest destmode = + withTSDelta (liftIO . genInodeCache dest) >>= \case + Just destic -> do + cs <- Database.Keys.getInodeCaches key + if null cs + then Database.Keys.addInodeCaches key [srcic, destic] + else Database.Keys.addInodeCaches key [srcic] + return LinkAnnexNoop + Nothing -> linkOrCopy key src dest destmode >>= \case + Nothing -> failed + Just r -> do + case fromto of + From -> thawContent dest + To -> case r of + Copied -> freezeContent dest + Linked -> noop + checksrcunchanged + where + failed = do + Database.Keys.addInodeCaches key [srcic] + return LinkAnnexFailed + checksrcunchanged = withTSDelta (liftIO . genInodeCache src) >>= \case + Just srcic' | compareStrong srcic srcic' -> do + destic <- withTSDelta (liftIO . genInodeCache dest) + Database.Keys.addInodeCaches key $ + catMaybes [destic, Just srcic] + return LinkAnnexOk + _ -> do + liftIO $ removeWhenExistsWith R.removeLink dest + failed + +{- Removes the annex object file for a key. Lowlevel. -} +unlinkAnnex :: Key -> Annex () +unlinkAnnex key = do + obj <- calcRepo (gitAnnexLocation key) + modifyContentDir obj $ do + secureErase obj + liftIO $ removeWhenExistsWith R.removeLink obj + +{- Runs an action to transfer an object's content. The action is also + - passed the size of the object. + - + - In some cases, it's possible for the file to change as it's being sent. + - If this happens, runs the rollback action and throws an exception. + - The rollback action should remove the data that was transferred. + -} +sendAnnex :: Key -> Annex () -> (FilePath -> FileSize -> Annex a) -> Annex a +sendAnnex key rollback sendobject = go =<< prepSendAnnex' key + where + go (Just (f, sz, check)) = do + r <- sendobject f sz + check >>= \case + Nothing -> return r + Just err -> do + rollback + giveup err + go Nothing = giveup "content not available to send" + +{- Returns a file that contains an object's content, + - and a check to run after the transfer is complete. + - + - When a file is unlocked, it's possible for its content to + - change as it's being sent. The check detects this case + - and returns False. + - + - Note that the returned check action is, in some cases, run in the + - Annex monad of the remote that is receiving the object, rather than + - the sender. So it cannot rely on Annex state. + -} +prepSendAnnex :: Key -> Annex (Maybe (FilePath, FileSize, Annex Bool)) +prepSendAnnex key = withObjectLoc key $ \f -> do + let retval c cs = return $ Just + (fromRawFilePath f + , inodeCacheFileSize c + , sameInodeCache f cs + ) + cache <- Database.Keys.getInodeCaches key + if null cache + -- Since no inode cache is in the database, this + -- object is not currently unlocked. But that could + -- change while the transfer is in progress, so + -- generate an inode cache for the starting + -- content. + then maybe (return Nothing) (\fc -> retval fc [fc]) + =<< withTSDelta (liftIO . genInodeCache f) + -- Verify that the object is not modified. Usually this + -- only has to check the inode cache, but if the cache + -- is somehow stale, it will fall back to verifying its + -- content. + else withTSDelta (liftIO . genInodeCache f) >>= \case + Just fc -> ifM (isUnmodified' key f fc cache) + ( retval fc (fc:cache) + , return Nothing + ) + Nothing -> return Nothing + +prepSendAnnex' :: Key -> Annex (Maybe (FilePath, FileSize, Annex (Maybe String))) +prepSendAnnex' key = prepSendAnnex key >>= \case + Just (f, sz, checksuccess) -> + let checksuccess' = ifM checksuccess + ( return Nothing + , return (Just "content changed while it was being sent") + ) + in return (Just (f, sz, checksuccess')) + Nothing -> return Nothing + +cleanObjectLoc :: Key -> Annex () -> Annex () +cleanObjectLoc key cleaner = do + file <- calcRepo (gitAnnexLocation key) + void $ tryIO $ thawContentDir file + {- Thawing is not necessary when the file was frozen only + - by removing write perms. But if there is a thaw hook, it may do + - something else that is necessary to allow the file to be + - deleted. + -} + whenM hasThawHook $ + void $ tryIO $ thawContent file + + cleaner + cleanObjectDirs file + +{- Given a filename inside the object directory, tries to remove the object + - directory, as well as the object hash directories. + - + - Does nothing if the object directory is not empty, and does not + - throw an exception if it's unable to remove a directory. -} +cleanObjectDirs :: RawFilePath -> Annex () +cleanObjectDirs f = do + HashLevels n <- objectHashLevels <$> Annex.getGitConfig + liftIO $ go f (succ n) + where + go _ 0 = noop + go file n = do + let dir = parentDir file + maybe noop (const $ go dir (n-1)) + <=< catchMaybeIO $ tryWhenExists $ + removeDirectory (fromRawFilePath dir) + +{- Removes a key's file from .git/annex/objects/ -} +removeAnnex :: ContentRemovalLock -> Annex () +removeAnnex (ContentRemovalLock key) = withObjectLoc key $ \file -> + cleanObjectLoc key $ do + secureErase file + liftIO $ removeWhenExistsWith R.removeLink file + g <- Annex.gitRepo + mapM_ (\f -> void $ tryIO $ resetpointer $ fromTopFilePath f g) + =<< Database.Keys.getAssociatedFiles key + Database.Keys.removeInodeCaches key + where + -- Check associated pointer file for modifications, and reset if + -- it's unmodified. + resetpointer file = unlessM (liftIO $ isSymbolicLink <$> R.getSymbolicLinkStatus file) $ + ifM (isUnmodified key file) + ( adjustedBranchRefresh (AssociatedFile (Just file)) $ + depopulatePointerFile key file + -- Modified file, so leave it alone. + -- If it was a hard link to the annex object, + -- that object might have been frozen as part of the + -- removal process, so thaw it. + , void $ tryIO $ thawContent file + ) + +{- Moves a key out of .git/annex/objects/ into .git/annex/bad, and + - returns the file it was moved to. -} +moveBad :: Key -> Annex RawFilePath +moveBad key = do + src <- calcRepo (gitAnnexLocation key) + bad <- fromRepo gitAnnexBadDir + let dest = bad P. P.takeFileName src + createAnnexDirectory (parentDir dest) + cleanObjectLoc key $ + liftIO $ moveFile src dest + logStatus key InfoMissing + return dest + +data KeyLocation = InAnnex | InAnywhere + +{- InAnnex only lists keys with content in .git/annex/objects. + - InAnywhere lists all keys that have directories in + - .git/annex/objects, whether or not the content is present. + -} +listKeys :: KeyLocation -> Annex [Key] +listKeys keyloc = listKeys' keyloc (const (pure True)) + +{- Due to use of unsafeInterleaveIO, the passed filter action + - will be run in a copy of the Annex state, so any changes it + - makes to the state will not be preserved. -} +listKeys' :: KeyLocation -> (Key -> Annex Bool) -> Annex [Key] +listKeys' keyloc want = do + dir <- fromRepo gitAnnexObjectDir + s <- Annex.getState id + r <- Annex.getRead id + depth <- gitAnnexLocationDepth <$> Annex.getGitConfig + liftIO $ walk (s, r) depth (fromRawFilePath dir) + where + walk s depth dir = do + contents <- catchDefaultIO [] (dirContents dir) + if depth < 2 + then do + contents' <- filterM present contents + keys <- filterM (Annex.eval s . want) $ + mapMaybe (fileKey . P.takeFileName . toRawFilePath) contents' + continue keys [] + else do + let deeper = walk s (depth - 1) + continue [] (map deeper contents) + continue keys [] = return keys + continue keys (a:as) = do + {- Force lazy traversal with unsafeInterleaveIO. -} + morekeys <- unsafeInterleaveIO a + continue (morekeys++keys) as + + inanywhere = case keyloc of + InAnywhere -> True + _ -> False + + present _ | inanywhere = pure True + present d = presentInAnnex d + + presentInAnnex = doesFileExist . contentfile + contentfile d = d takeFileName d + +{- Things to do to record changes to content when shutting down. + - + - It's acceptable to avoid committing changes to the branch, + - especially if performing a short-lived action. + -} +saveState :: Bool -> Annex () +saveState nocommit = doSideAction $ do + Annex.Queue.flush + Database.Keys.flushDb + unless nocommit $ + whenM (annexAlwaysCommit <$> Annex.getGitConfig) $ + Annex.Branch.commit =<< Annex.Branch.commitMessage + +{- Downloads content from any of a list of urls, displaying a progress + - meter. + - + - Only displays error message if all the urls fail to download. + - When listfailedurls is set, lists each url and why it failed. + - Otherwise, only displays one error message, from one of the urls + - that failed. + -} +downloadUrl :: Bool -> Key -> MeterUpdate -> Maybe IncrementalVerifier -> [Url.URLString] -> FilePath -> Url.UrlOptions -> Annex Bool +downloadUrl listfailedurls k p iv urls file uo = + -- Poll the file to handle configurations where an external + -- download command is used. + meteredFile (toRawFilePath file) (Just p) k (go urls []) + where + go (u:us) errs p' = Url.download' p' iv u file uo >>= \case + Right () -> return True + Left err -> do + -- If the incremental verifier was fed anything + -- while the download that failed ran, it's unable + -- to be used for the other urls. + case iv of + Just iv' -> + liftIO $ positionIncrementalVerifier iv' >>= \case + Just n | n > 0 -> unableIncrementalVerifier iv' + _ -> noop + Nothing -> noop + go us ((u, err) : errs) p' + go [] [] _ = return False + go [] errs@((_, err):_) _ = do + if listfailedurls + then warning $ UnquotedString $ + unlines $ flip map errs $ \(u, err') -> + u ++ " " ++ err' + else warning $ UnquotedString err + return False + +{- Copies a key's content, when present, to a temp file. + - This is used to speed up some rsyncs. -} +preseedTmp :: Key -> FilePath -> Annex Bool +preseedTmp key file = go =<< inAnnex key + where + go False = return False + go True = do + ok <- copy + when ok $ thawContent (toRawFilePath file) + return ok + copy = ifM (liftIO $ doesFileExist file) + ( return True + , do + s <- fromRawFilePath <$> (calcRepo $ gitAnnexLocation key) + liftIO $ ifM (doesFileExist s) + ( copyFileExternal CopyTimeStamps s file + , return False + ) + ) + +{- Finds files directly inside a directory like gitAnnexBadDir + - (not in subdirectories) and returns the corresponding keys. -} +dirKeys :: (Git.Repo -> RawFilePath) -> Annex [Key] +dirKeys dirspec = do + dir <- fromRawFilePath <$> fromRepo dirspec + ifM (liftIO $ doesDirectoryExist dir) + ( do + contents <- liftIO $ getDirectoryContents dir + files <- liftIO $ filterM doesFileExist $ + map (dir ) contents + return $ mapMaybe (fileKey . P.takeFileName . toRawFilePath) files + , return [] + ) + +{- Looks in the specified directory for bad/tmp keys, and returns a list + - of those that might still have value, or might be stale and removable. + - + - Also, stale keys that can be proven to have no value + - (ie, their content is already present) are deleted. + -} +staleKeysPrune :: (Git.Repo -> RawFilePath) -> Bool -> Annex [Key] +staleKeysPrune dirspec nottransferred = do + contents <- dirKeys dirspec + + dups <- filterM inAnnex contents + let stale = contents `exclude` dups + + dir <- fromRepo dirspec + forM_ dups $ \k -> + pruneTmpWorkDirBefore (dir P. keyFile k) + (liftIO . R.removeLink) + + if nottransferred + then do + inprogress <- S.fromList . map (transferKey . fst) + <$> getTransfers + return $ filter (`S.notMember` inprogress) stale + else return stale + +{- Prune the work dir associated with the specified content file, + - before performing an action that deletes the file, or moves it away. + - + - This preserves the invariant that the workdir never exists without + - the content file. + -} +pruneTmpWorkDirBefore :: RawFilePath -> (RawFilePath -> Annex a) -> Annex a +pruneTmpWorkDirBefore f action = do + let workdir = fromRawFilePath $ gitAnnexTmpWorkDir f + liftIO $ whenM (doesDirectoryExist workdir) $ + removeDirectoryRecursive workdir + action f + +{- Runs an action, passing it a temporary work directory where + - it can write files while receiving the content of a key. + - + - Preserves the invariant that the workdir never exists without the + - content file, by creating an empty content file first. + - + - On exception, or when the action returns Nothing, + - the temporary work directory is retained (unless + - empty), so anything in it can be used on resume. + -} +withTmpWorkDir :: Key -> (RawFilePath -> Annex (Maybe a)) -> Annex (Maybe a) +withTmpWorkDir key action = do + -- Create the object file if it does not exist. This way, + -- staleKeysPrune only has to look for object files, and can + -- clean up gitAnnexTmpWorkDir for those it finds. + obj <- prepTmp key + let obj' = fromRawFilePath obj + unlessM (liftIO $ doesFileExist obj') $ do + liftIO $ writeFile obj' "" + setAnnexFilePerm obj + let tmpdir = gitAnnexTmpWorkDir obj + createAnnexDirectory tmpdir + res <- action tmpdir + case res of + Just _ -> liftIO $ removeDirectoryRecursive (fromRawFilePath tmpdir) + Nothing -> liftIO $ void $ tryIO $ removeDirectory (fromRawFilePath tmpdir) + return res + +{- Finds items in the first, smaller list, that are not + - present in the second, larger list. + - + - Constructing a single set, of the list that tends to be + - smaller, appears more efficient in both memory and CPU + - than constructing and taking the S.difference of two sets. -} +exclude :: Ord a => [a] -> [a] -> [a] +exclude [] _ = [] -- optimisation +exclude smaller larger = S.toList $ remove larger $ S.fromList smaller + where + remove a b = foldl (flip S.delete) b a + +data KeyStatus + = KeyMissing + | KeyPresent + | KeyUnlockedThin + -- ^ An annex.thin worktree file is hard linked to the object. + | KeyLockedThin + -- ^ The object has hard links, but the file being fscked + -- is not the one that hard links to it. + deriving (Show) + +isKeyUnlockedThin :: KeyStatus -> Bool +isKeyUnlockedThin KeyUnlockedThin = True +isKeyUnlockedThin KeyLockedThin = False +isKeyUnlockedThin KeyPresent = False +isKeyUnlockedThin KeyMissing = False + +getKeyStatus :: Key -> Annex KeyStatus +getKeyStatus key = catchDefaultIO KeyMissing $ do + afs <- not . null <$> Database.Keys.getAssociatedFiles key + obj <- calcRepo (gitAnnexLocation key) + multilink <- ((> 1) . linkCount <$> liftIO (R.getFileStatus obj)) + return $ if multilink && afs + then KeyUnlockedThin + else KeyPresent + +getKeyFileStatus :: Key -> RawFilePath -> Annex KeyStatus +getKeyFileStatus key file = do + s <- getKeyStatus key + case s of + KeyUnlockedThin -> catchDefaultIO KeyUnlockedThin $ + ifM (isJust <$> isAnnexLink file) + ( return KeyLockedThin + , return KeyUnlockedThin + ) + _ -> return s + +{- Gets the size of the content of a key when it is present. + - Useful when the key does not have keySize set. + - + - When the object file appears possibly modified with annex.thin set, does + - not do an expensive verification that the content is good, just returns + - Nothing. + -} +contentSize :: Key -> Annex (Maybe FileSize) +contentSize key = catchDefaultIO Nothing $ + withObjectLoc key $ \loc -> + withTSDelta (liftIO . genInodeCache loc) >>= \case + Just ic -> ifM (unmodified ic) + ( return (Just (inodeCacheFileSize ic)) + , return Nothing + ) + Nothing -> return Nothing + where + unmodified ic = + ifM (annexThin <$> Annex.getGitConfig) + ( isUnmodifiedCheap' key ic + , return True + ) diff --git a/Annex/Content/LowLevel.hs b/Annex/Content/LowLevel.hs new file mode 100644 index 0000000000..9d732f6a6e --- /dev/null +++ b/Annex/Content/LowLevel.hs @@ -0,0 +1,141 @@ +{- git-annex low-level content functions + - + - Copyright 2010-2024 Joey Hess + - + - Licensed under the GNU AGPL version 3 or higher. + -} + +{-# LANGUAGE CPP #-} + +module Annex.Content.LowLevel where + +import Annex.Common +import Logs.Transfer +import qualified Annex +import Utility.DiskFree +import Utility.FileMode +import Utility.DataUnits +import Utility.CopyFile +import qualified Utility.RawFilePath as R + +import qualified System.FilePath.ByteString as P +import System.PosixCompat.Files (linkCount) + +{- Runs the secure erase command if set, otherwise does nothing. + - File may or may not be deleted at the end; caller is responsible for + - making sure it's deleted. -} +secureErase :: RawFilePath -> Annex () +secureErase file = maybe noop go =<< annexSecureEraseCommand <$> Annex.getGitConfig + where + go basecmd = void $ liftIO $ + boolSystem "sh" [Param "-c", Param $ gencmd basecmd] + gencmd = massReplace [ ("%file", shellEscape (fromRawFilePath file)) ] + +data LinkedOrCopied = Linked | Copied + +{- Hard links or copies src to dest, which must not already exist. + - + - Only uses a hard link when annex.thin is enabled and when src is + - not already hardlinked to elsewhere. + - + - Checks disk reserve before copying against the size of the key, + - and will fail if not enough space, or if the dest file already exists. + - + - The FileMode, if provided, influences the mode of the dest file. + - In particular, if it has an execute bit set, the dest file's + - execute bit will be set. The mode is not fully copied over because + - git doesn't support file modes beyond execute. + -} +linkOrCopy :: Key -> RawFilePath -> RawFilePath -> Maybe FileMode -> Annex (Maybe LinkedOrCopied) +linkOrCopy = linkOrCopy' (annexThin <$> Annex.getGitConfig) + +linkOrCopy' :: Annex Bool -> Key -> RawFilePath -> RawFilePath -> Maybe FileMode -> Annex (Maybe LinkedOrCopied) +linkOrCopy' canhardlink key src dest destmode = catchDefaultIO Nothing $ + ifM canhardlink + ( hardlink + , copy =<< getstat + ) + where + hardlink = do + s <- getstat + if linkCount s > 1 + then copy s + else liftIO (R.createLink src dest >> preserveGitMode dest destmode >> return (Just Linked)) + `catchIO` const (copy s) + copy s = ifM (checkedCopyFile' key src dest destmode s) + ( return (Just Copied) + , return Nothing + ) + getstat = liftIO $ R.getFileStatus src + +{- Checks disk space before copying. -} +checkedCopyFile :: Key -> RawFilePath -> RawFilePath -> Maybe FileMode -> Annex Bool +checkedCopyFile key src dest destmode = catchBoolIO $ + checkedCopyFile' key src dest destmode + =<< liftIO (R.getFileStatus src) + +checkedCopyFile' :: Key -> RawFilePath -> RawFilePath -> Maybe FileMode -> FileStatus -> Annex Bool +checkedCopyFile' key src dest destmode s = catchBoolIO $ do + sz <- liftIO $ getFileSize' src s + ifM (checkDiskSpace' sz (Just $ P.takeDirectory dest) key 0 True) + ( liftIO $ + copyFileExternal CopyAllMetaData (fromRawFilePath src) (fromRawFilePath dest) + <&&> preserveGitMode dest destmode + , return False + ) + +preserveGitMode :: RawFilePath -> Maybe FileMode -> IO Bool +preserveGitMode f (Just mode) + | isExecutable mode = catchBoolIO $ do + modifyFileMode f $ addModes executeModes + return True + | otherwise = catchBoolIO $ do + modifyFileMode f $ removeModes executeModes + return True +preserveGitMode _ _ = return True + +{- Checks that there is disk space available to store a given key, + - in a destination directory (or the annex) printing a warning if not. + - + - If the destination is on the same filesystem as the annex, + - checks for any other running downloads, removing the amount of data still + - to be downloaded from the free space. This way, we avoid overcommitting + - when doing concurrent downloads. + -} +checkDiskSpace :: Maybe FileSize -> Maybe RawFilePath -> Key -> Integer -> Bool -> Annex Bool +checkDiskSpace msz destdir key = checkDiskSpace' sz destdir key + where + sz = fromMaybe 1 (fromKey keySize key <|> msz) + +checkDiskSpace' :: FileSize -> Maybe RawFilePath -> Key -> Integer -> Bool -> Annex Bool +checkDiskSpace' sz destdir key alreadythere samefilesystem = ifM (Annex.getRead Annex.force) + ( return True + , do + -- We can't get inprogress and free at the same + -- time, and both can be changing, so there's a + -- small race here. Err on the side of caution + -- by getting inprogress first, so if it takes + -- a while, we'll see any decrease in the free + -- disk space. + inprogress <- if samefilesystem + then sizeOfDownloadsInProgress (/= key) + else pure 0 + dir >>= liftIO . getDiskFree . fromRawFilePath >>= \case + Just have -> do + reserve <- annexDiskReserve <$> Annex.getGitConfig + let delta = sz + reserve - have - alreadythere + inprogress + let ok = delta <= 0 + unless ok $ + warning $ UnquotedString $ + needMoreDiskSpace delta + return ok + _ -> return True + ) + where + dir = maybe (fromRepo gitAnnexDir) return destdir + +needMoreDiskSpace :: Integer -> String +needMoreDiskSpace n = "not enough free space, need " ++ + roughSize storageUnits True n ++ " more" ++ forcemsg + where + forcemsg = " (use --force to override this check or adjust annex.diskreserve)" diff --git a/Annex/Content/PointerFile.hs b/Annex/Content/PointerFile.hs new file mode 100644 index 0000000000..c2acc9ab93 --- /dev/null +++ b/Annex/Content/PointerFile.hs @@ -0,0 +1,71 @@ +{- git-annex pointer files + - + - Copyright 2010-2018 Joey Hess + - + - Licensed under the GNU AGPL version 3 or higher. + -} + +{-# LANGUAGE CPP #-} + +module Annex.Content.PointerFile where + +import Annex.Common +import Annex.Perms +import Annex.Link +import Annex.ReplaceFile +import Annex.InodeSentinal +import Annex.Content.LowLevel +import Utility.InodeCache +import qualified Utility.RawFilePath as R +#if ! defined(mingw32_HOST_OS) +import Utility.Touch +import qualified System.Posix.Files as Posix +#endif + +import System.PosixCompat.Files (fileMode) + +{- Populates a pointer file with the content of a key. + - + - If the file already has some other content, it is not modified. + - + - Returns an InodeCache if it populated the pointer file. + -} +populatePointerFile :: Restage -> Key -> RawFilePath -> RawFilePath -> Annex (Maybe InodeCache) +populatePointerFile restage k obj f = go =<< liftIO (isPointerFile f) + where + go (Just k') | k == k' = do + let f' = fromRawFilePath f + destmode <- liftIO $ catchMaybeIO $ fileMode <$> R.getFileStatus f + liftIO $ removeWhenExistsWith R.removeLink f + (ic, populated) <- replaceWorkTreeFile f' $ \tmp -> do + ok <- linkOrCopy k obj tmp destmode >>= \case + Just _ -> thawContent tmp >> return True + Nothing -> liftIO (writePointerFile tmp k destmode) >> return False + ic <- withTSDelta (liftIO . genInodeCache tmp) + return (ic, ok) + maybe noop (restagePointerFile restage f) ic + if populated + then return ic + else return Nothing + go _ = return Nothing + +{- Removes the content from a pointer file, replacing it with a pointer. + - + - Does not check if the pointer file is modified. -} +depopulatePointerFile :: Key -> RawFilePath -> Annex () +depopulatePointerFile key file = do + st <- liftIO $ catchMaybeIO $ R.getFileStatus file + let mode = fmap fileMode st + secureErase file + liftIO $ removeWhenExistsWith R.removeLink file + ic <- replaceWorkTreeFile (fromRawFilePath file) $ \tmp -> do + liftIO $ writePointerFile tmp key mode +#if ! defined(mingw32_HOST_OS) + -- Don't advance mtime; this avoids unnecessary re-smudging + -- by git in some cases. + liftIO $ maybe noop + (\t -> touch tmp t False) + (fmap Posix.modificationTimeHiRes st) +#endif + withTSDelta (liftIO . genInodeCache tmp) + maybe noop (restagePointerFile (Restage True) file) ic diff --git a/Annex/Content/Presence.hs b/Annex/Content/Presence.hs new file mode 100644 index 0000000000..2eb0016ddd --- /dev/null +++ b/Annex/Content/Presence.hs @@ -0,0 +1,215 @@ +{- git-annex object content presence + - + - Copyright 2010-2022 Joey Hess + - + - Licensed under the GNU AGPL version 3 or higher. + -} + +{-# LANGUAGE CPP #-} +{-# LANGUAGE OverloadedStrings #-} + +module Annex.Content.Presence ( + inAnnex, + inAnnex', + inAnnexSafe, + inAnnexCheck, + objectFileExists, + withObjectLoc, + isUnmodified, + isUnmodified', + isUnmodifiedCheap, + isUnmodifiedCheap', + withContentLockFile, + contentLockFile, +) where + +import Annex.Content.Presence.LowLevel +import Annex.Common +import qualified Annex +import Annex.LockPool +import Annex.LockFile +import Annex.Version +import Types.RepoVersion +import qualified Database.Keys +import Annex.InodeSentinal +import Utility.InodeCache +import qualified Utility.RawFilePath as R +import qualified Git +import Config + +#ifdef mingw32_HOST_OS +import Annex.Perms +#endif + +import qualified System.FilePath.ByteString as P + +{- Checks if a given key's content is currently present. -} +inAnnex :: Key -> Annex Bool +inAnnex key = inAnnexCheck key $ liftIO . R.doesPathExist + +{- Runs an arbitrary check on a key's content. -} +inAnnexCheck :: Key -> (RawFilePath -> Annex Bool) -> Annex Bool +inAnnexCheck key check = inAnnex' id False check key + +{- inAnnex that performs an arbitrary check of the key's content. -} +inAnnex' :: (a -> Bool) -> a -> (RawFilePath -> Annex a) -> Key -> Annex a +inAnnex' isgood bad check key = withObjectLoc key $ \loc -> do + r <- check loc + if isgood r + then ifM (annexThin <$> Annex.getGitConfig) + -- When annex.thin is set, the object file + -- could be modified; make sure it's not. + -- (Suppress any messages about + -- checksumming, to avoid them cluttering + -- the display.) + ( ifM (doQuietAction $ isUnmodified key loc) + ( return r + , return bad + ) + , return r + ) + else return bad + +{- Like inAnnex, checks if the object file for a key exists, + - but there are no guarantees it has the right content. -} +objectFileExists :: Key -> Annex Bool +objectFileExists key = + calcRepo (gitAnnexLocation key) + >>= liftIO . R.doesPathExist + +{- A safer check; the key's content must not only be present, but + - is not in the process of being removed. -} +inAnnexSafe :: Key -> Annex (Maybe Bool) +inAnnexSafe key = inAnnex' (fromMaybe True) (Just False) go key + where + is_locked = Nothing + is_unlocked = Just True + is_missing = Just False + + go contentfile = withContentLockFile key $ flip checklock contentfile + +#ifndef mingw32_HOST_OS + checklock Nothing contentfile = checkOr is_missing contentfile + {- The content file must exist, but the lock file generally + - won't exist unless a removal is in process. -} + checklock (Just lockfile) contentfile = + ifM (liftIO $ doesFileExist (fromRawFilePath contentfile)) + ( checkOr is_unlocked lockfile + , return is_missing + ) + checkOr d lockfile = checkLocked lockfile >>= return . \case + Nothing -> d + Just True -> is_locked + Just False -> is_unlocked +#else + checklock Nothing contentfile = liftIO $ ifM (doesFileExist (fromRawFilePath contentfile)) + ( lockShared contentfile >>= \case + Nothing -> return is_locked + Just lockhandle -> do + dropLock lockhandle + return is_unlocked + , return is_missing + ) + {- In Windows, see if we can take a shared lock. If so, + - remove the lock file to clean up after ourselves. -} + checklock (Just lockfile) contentfile = + ifM (liftIO $ doesFileExist (fromRawFilePath contentfile)) + ( modifyContentDir lockfile $ liftIO $ + lockShared lockfile >>= \case + Nothing -> return is_locked + Just lockhandle -> do + dropLock lockhandle + void $ tryIO $ removeWhenExistsWith R.removeLink lockfile + return is_unlocked + , return is_missing + ) +#endif + +{- Runs an action with the lock file to use to lock a key's content. + - When the content file itself should be locked, runs the action with + - Nothing. + - + - In v9 and below, while the action is running, a shared lock is held of the + - gitAnnexContentLockLock. That prevents the v10 upgrade, which changes how + - content locking works, from running at the same time as content is locked + - using the old method. + -} +withContentLockFile :: Key -> (Maybe RawFilePath -> Annex a) -> Annex a +withContentLockFile k a = do + v <- getVersion + if versionNeedsWritableContentFiles v + then fromRepo gitAnnexContentLockLock >>= \lck -> withSharedLock lck $ do + {- While the lock is held, check to see if the git + - config has changed, and reload it if so. This + - updates the annex.version after the v10 upgrade, + - so that a process that started in a v9 repository + - will switch over to v10 content lock files at the + - right time. -} + gitdir <- fromRepo Git.localGitDir + let gitconfig = gitdir P. "config" + ic <- withTSDelta (liftIO . genInodeCache gitconfig) + oldic <- Annex.getState Annex.gitconfiginodecache + v' <- if fromMaybe False (compareStrong <$> ic <*> oldic) + then pure v + else do + Annex.changeState $ \s -> + s { Annex.gitconfiginodecache = ic } + reloadConfig + getVersion + go (v') + else go v + where + go v = contentLockFile k v >>= a + +contentLockFile :: Key -> Maybe RepoVersion -> Annex (Maybe RawFilePath) +#ifndef mingw32_HOST_OS +{- Older versions of git-annex locked content files themselves, but newer + - versions use a separate lock file, to better support repos shared + - among users in eg a group. -} +contentLockFile key v + | versionNeedsWritableContentFiles v = pure Nothing + | otherwise = Just <$> calcRepo (gitAnnexContentLock key) +#else +{- Windows always has to use a separate lock file from the content, since + - locking the actual content file would interfere with the user's + - use of it. -} +contentLockFile key _ = Just <$> calcRepo (gitAnnexContentLock key) +#endif + +{- Performs an action, passing it the location to use for a key's content. -} +withObjectLoc :: Key -> (RawFilePath -> Annex a) -> Annex a +withObjectLoc key a = a =<< calcRepo (gitAnnexLocation key) + +{- Check if a file contains the unmodified content of the key. + - + - The expensive way to tell is to do a verification of its content. + - The cheaper way is to see if the InodeCache for the key matches the + - file. -} +isUnmodified :: Key -> RawFilePath -> Annex Bool +isUnmodified key f = + withTSDelta (liftIO . genInodeCache f) >>= \case + Just fc -> do + ic <- Database.Keys.getInodeCaches key + isUnmodified' key f fc ic + Nothing -> return False + +isUnmodified' :: Key -> RawFilePath -> InodeCache -> [InodeCache] -> Annex Bool +isUnmodified' = isUnmodifiedLowLevel Database.Keys.addInodeCaches + +{- Cheap check if a file contains the unmodified content of the key, + - only checking the InodeCache of the key. + - + - When the InodeCache is stale, this may incorrectly report that a file is + - modified. + - + - Note that, on systems not supporting high-resolution mtimes, + - this may report a false positive when repeated edits are made to a file + - within a small time window (eg 1 second). + -} +isUnmodifiedCheap :: Key -> RawFilePath -> Annex Bool +isUnmodifiedCheap key f = maybe (pure False) (isUnmodifiedCheap' key) + =<< withTSDelta (liftIO . genInodeCache f) + +isUnmodifiedCheap' :: Key -> InodeCache -> Annex Bool +isUnmodifiedCheap' key fc = isUnmodifiedCheapLowLevel fc + =<< Database.Keys.getInodeCaches key diff --git a/Annex/Content/Presence/LowLevel.hs b/Annex/Content/Presence/LowLevel.hs new file mode 100644 index 0000000000..6f50c187b2 --- /dev/null +++ b/Annex/Content/Presence/LowLevel.hs @@ -0,0 +1,36 @@ +{- git-annex object content presence, low-level functions + - + - Copyright 2010-2021 Joey Hess + - + - Licensed under the GNU AGPL version 3 or higher. + -} + +module Annex.Content.Presence.LowLevel where + +import Annex.Common +import Annex.Verify +import Annex.InodeSentinal +import Utility.InodeCache + +isUnmodifiedLowLevel :: (Key -> [InodeCache] -> Annex ()) -> Key -> RawFilePath -> InodeCache -> [InodeCache] -> Annex Bool +isUnmodifiedLowLevel addinodecaches key f fc ic = + isUnmodifiedCheapLowLevel fc ic <||> expensivecheck + where + expensivecheck = ifM (verifyKeyContent key f) + ( do + -- The file could have been modified while it was + -- being verified. Detect that. + ifM (geti >>= maybe (return False) (compareInodeCaches fc)) + ( do + -- Update the InodeCache to avoid + -- performing this expensive check again. + addinodecaches key [fc] + return True + , return False + ) + , return False + ) + geti = withTSDelta (liftIO . genInodeCache f) + +isUnmodifiedCheapLowLevel :: InodeCache -> [InodeCache] -> Annex Bool +isUnmodifiedCheapLowLevel fc ic = anyM (compareInodeCaches fc) ic diff --git a/Annex/CopyFile.hs b/Annex/CopyFile.hs new file mode 100644 index 0000000000..55c7d908e2 --- /dev/null +++ b/Annex/CopyFile.hs @@ -0,0 +1,179 @@ +{- Copying files. + - + - Copyright 2011-2022 Joey Hess + - + - Licensed under the GNU AGPL version 3 or higher. + -} + +{-# LANGUAGE CPP #-} + +module Annex.CopyFile where + +import Annex.Common +import Utility.Metered +import Utility.CopyFile +import Utility.FileMode +import Utility.Touch +import Utility.Hash (IncrementalVerifier(..)) +import qualified Utility.RawFilePath as R + +import Control.Concurrent +import qualified Data.ByteString as S +import Data.Time.Clock.POSIX +import System.PosixCompat.Files (fileMode) + +-- To avoid the overhead of trying copy-on-write every time, it's tried +-- once and if it fails, is not tried again. +newtype CopyCoWTried = CopyCoWTried (MVar Bool) + +newCopyCoWTried :: IO CopyCoWTried +newCopyCoWTried = CopyCoWTried <$> newEmptyMVar + +{- Copies a file is copy-on-write is supported. Otherwise, returns False. + - + - The destination file must not exist yet (or may exist but be empty), + - or it will fail to make a CoW copy, and will return false. + -} +tryCopyCoW :: CopyCoWTried -> FilePath -> FilePath -> MeterUpdate -> IO Bool +tryCopyCoW (CopyCoWTried copycowtried) src dest meterupdate = + -- If multiple threads reach this at the same time, they + -- will both try CoW, which is acceptable. + ifM (isEmptyMVar copycowtried) + ( ifM destfilealreadypopulated + ( return False + , do + ok <- docopycow + void $ tryPutMVar copycowtried ok + return ok + ) + , ifM (readMVar copycowtried) + ( do + -- CoW is known to work, so delete + -- dest if it exists in order to do a fast + -- CoW copy. + void $ tryIO $ removeFile dest + docopycow + , return False + ) + ) + where + docopycow = watchFileSize dest' meterupdate $ const $ + copyCoW CopyTimeStamps src dest + + dest' = toRawFilePath dest + + -- Check if the dest file already exists, which would prevent + -- probing CoW. If the file exists but is empty, there's no benefit + -- to resuming from it when CoW does not work, so remove it. + destfilealreadypopulated = + tryIO (R.getFileStatus dest') >>= \case + Left _ -> return False + Right st -> do + sz <- getFileSize' dest' st + if sz == 0 + then tryIO (removeFile dest) >>= \case + Right () -> return False + Left _ -> return True + else return True + +data CopyMethod = CopiedCoW | Copied + +{- Copies from src to dest, updating a meter. Preserves mode and mtime. + - Uses copy-on-write if it is supported. If the the destination already + - exists, an interrupted copy will resume where it left off. + - + - The IncrementalVerifier is updated with the content of the file as it's + - being copied. But it is not finalized at the end. + - + - When copy-on-write is used, the IncrementalVerifier is not fed + - the content of the file, and verification using it will fail. + - + - Note that, when the destination file already exists, it's read both + - to start calculating the hash, and also to verify that its content is + - the same as the start of the source file. It's possible that the + - destination file was created from some other source file, + - (eg when isStableKey is false), and doing this avoids getting a + - corrupted file in such cases. + -} +fileCopier :: CopyCoWTried -> FilePath -> FilePath -> MeterUpdate -> Maybe IncrementalVerifier -> IO CopyMethod +#ifdef mingw32_HOST_OS +fileCopier _ src dest meterupdate iv = docopy +#else +fileCopier copycowtried src dest meterupdate iv = + ifM (tryCopyCoW copycowtried src dest meterupdate) + ( do + maybe noop unableIncrementalVerifier iv + return CopiedCoW + , docopy + ) +#endif + where + docopy = do + -- The file might have had the write bit removed, + -- so make sure we can write to it. + void $ tryIO $ allowWrite dest' + + withBinaryFile src ReadMode $ \hsrc -> + fileContentCopier hsrc dest meterupdate iv + + -- Copy src mode and mtime. + mode <- fileMode <$> R.getFileStatus (toRawFilePath src) + mtime <- utcTimeToPOSIXSeconds <$> getModificationTime src + R.setFileMode dest' mode + touch dest' mtime False + + return Copied + + dest' = toRawFilePath dest + +{- Copies content from a handle to a destination file. Does not + - use copy-on-write, and does not copy file mode and mtime. + -} +fileContentCopier :: Handle -> FilePath -> MeterUpdate -> Maybe IncrementalVerifier -> IO () +fileContentCopier hsrc dest meterupdate iv = + withBinaryFile dest ReadWriteMode $ \hdest -> do + sofar <- compareexisting hdest zeroBytesProcessed + docopy hdest sofar + where + docopy hdest sofar = do + s <- S.hGet hsrc defaultChunkSize + if s == S.empty + then return () + else do + let sofar' = addBytesProcessed sofar (S.length s) + S.hPut hdest s + maybe noop (flip updateIncrementalVerifier s) iv + meterupdate sofar' + docopy hdest sofar' + + -- Leaves hdest and hsrc seeked to wherever the two diverge, + -- so typically hdest will be seeked to end, and hsrc to the same + -- position. + compareexisting hdest sofar = do + s <- S.hGet hdest defaultChunkSize + if s == S.empty + then return sofar + else do + s' <- getnoshort (S.length s) hsrc + if s == s' + then do + maybe noop (flip updateIncrementalVerifier s) iv + let sofar' = addBytesProcessed sofar (S.length s) + meterupdate sofar' + compareexisting hdest sofar' + else do + seekbefore hdest s + seekbefore hsrc s' + return sofar + + seekbefore h s = hSeek h RelativeSeek (fromIntegral (-1*S.length s)) + + -- Like hGet, but never returns less than the requested number of + -- bytes, unless it reaches EOF. + getnoshort n h = do + s <- S.hGet h n + if S.length s == n || S.empty == s + then return s + else do + s' <- getnoshort (n - S.length s) h + return (s <> s') diff --git a/Annex/CurrentBranch.hs b/Annex/CurrentBranch.hs new file mode 100644 index 0000000000..f6ae28442f --- /dev/null +++ b/Annex/CurrentBranch.hs @@ -0,0 +1,41 @@ +{- currently checked out branch + - + - Copyright 2018 Joey Hess + - + - Licensed under the GNU AGPL version 3 or higher. + -} + +module Annex.CurrentBranch where + +import Annex.Common +import Types.AdjustedBranch +import Annex.AdjustedBranch.Name +import qualified Annex +import qualified Git +import qualified Git.Branch + +type CurrBranch = (Maybe Git.Branch, Maybe Adjustment) + +{- Gets the currently checked out branch. + - When on an adjusted branch, gets the original branch, and the adjustment. + - + - Cached for speed. + - + - Until a commit is made in a new repository, no branch is checked out. + - Since git-annex may make the first commit, this does not cache + - the absence of a branch. + -} +getCurrentBranch :: Annex CurrBranch +getCurrentBranch = maybe cache return + =<< Annex.getState Annex.cachedcurrentbranch + where + cache = inRepo Git.Branch.current >>= \case + Just b -> do + let v = case adjustedToOriginal b of + Nothing -> (Just b, Nothing) + Just (adj, origbranch) -> + (Just origbranch, Just adj) + Annex.changeState $ \s -> + s { Annex.cachedcurrentbranch = Just v } + return v + Nothing -> return (Nothing, Nothing) diff --git a/Annex/Debug.hs b/Annex/Debug.hs new file mode 100644 index 0000000000..fb7d7eef77 --- /dev/null +++ b/Annex/Debug.hs @@ -0,0 +1,35 @@ +{- git-annex debugging + - + - Copyright 2021-2023 Joey Hess + - + - Licensed under the GNU AGPL version 3 or higher. + -} + +module Annex.Debug ( + DebugSelector(..), + DebugSource(..), + debug, + fastDebug, + fastDebug', + configureDebug, + debugSelectorFromGitConfig, + parseDebugSelector, +) where + +import Common +import qualified Annex +import Utility.Debug hiding (fastDebug) +import qualified Utility.Debug +import Annex.Debug.Utility + +-- | This is faster than using debug, because the DebugSelector +-- is read from the Annex monad, which avoids any IORef access overhead +-- when debugging is not enabled. +fastDebug :: DebugSource -> String -> Annex.Annex () +fastDebug src msg = do + rd <- Annex.getRead id + fastDebug' rd src msg + +fastDebug' :: Annex.AnnexRead -> DebugSource -> String -> Annex.Annex () +fastDebug' rd src msg = when (Annex.debugenabled rd) $ + liftIO $ Utility.Debug.fastDebug (Annex.debugselector rd) src msg diff --git a/Annex/Debug/Utility.hs b/Annex/Debug/Utility.hs new file mode 100644 index 0000000000..79186d840d --- /dev/null +++ b/Annex/Debug/Utility.hs @@ -0,0 +1,32 @@ +{- git-annex debugging, utility functions + - + - Copyright 2021 Joey Hess + - + - Licensed under the GNU AGPL version 3 or higher. + -} + +module Annex.Debug.Utility ( + debugSelectorFromGitConfig, + parseDebugSelector, + DebugSelector, +) where + +import Types.GitConfig +import Utility.Debug +import Utility.Split +import Utility.FileSystemEncoding + +import qualified Data.ByteString as S + +debugSelectorFromGitConfig :: GitConfig -> DebugSelector +debugSelectorFromGitConfig = + maybe NoDebugSelector parseDebugSelector . annexDebugFilter + +parseDebugSelector :: String -> DebugSelector +parseDebugSelector = DebugSelector . matchDebugSource . splitSelectorNames + +splitSelectorNames :: String -> [S.ByteString] +splitSelectorNames = map encodeBS . splitc ',' + +matchDebugSource :: [S.ByteString] -> DebugSource -> Bool +matchDebugSource names (DebugSource s) = any (`S.isInfixOf` s) names diff --git a/Annex/Difference.hs b/Annex/Difference.hs new file mode 100644 index 0000000000..fa874476fd --- /dev/null +++ b/Annex/Difference.hs @@ -0,0 +1,60 @@ +{- git-annex repository differences + - + - Copyright 2015 Joey Hess + - + - Licensed under the GNU AGPL version 3 or higher. + -} + +{-# LANGUAGE OverloadedStrings #-} + +module Annex.Difference ( + module Types.Difference, + setDifferences, +) where + +import Annex.Common +import Types.Difference +import Logs.Difference +import Config +import Annex.UUID +import Logs.UUID +import Annex.Version +import qualified Annex + +import qualified Data.Map as M + +-- Differences are only allowed to be tweaked when initializing a +-- repository for the first time, and then only if there is not another +-- known uuid. If the repository was cloned from elsewhere, it inherits +-- the existing settings. +-- +-- Must be called before setVersion, so it can check if this is the first +-- time the repository is being initialized. +setDifferences :: Annex () +setDifferences = do + u <- getUUID + otherds <- allDifferences <$> recordedDifferences + ds <- mappend otherds . annexDifferences <$> Annex.getGitConfig + when (ds /= mempty) $ do + ds' <- ifM (isJust <$> getVersion) + ( do + oldds <- recordedDifferencesFor u + when (ds /= oldds) $ + warning "Cannot change tunable parameters in already initialized repository." + return oldds + , if otherds == mempty + then ifM (any (/= u) . M.keys <$> uuidDescMap) + ( do + warning "Cannot change tunable parameters in a clone of an existing repository." + return mempty + , return ds + ) + else if otherds /= ds + then do + warning "The specified tunable parameters differ from values being used in other clones of this repository." + return otherds + else return ds + ) + forM_ (listDifferences ds') $ \d -> + setConfig (differenceConfigKey d) (differenceConfigVal d) + recordDifferences ds' u diff --git a/Annex/DirHashes.hs b/Annex/DirHashes.hs new file mode 100644 index 0000000000..7311acf3e6 --- /dev/null +++ b/Annex/DirHashes.hs @@ -0,0 +1,90 @@ +{- git-annex file locations + - + - Copyright 2010-2019 Joey Hess + - + - Licensed under the GNU AGPL version 3 or higher. + -} + +module Annex.DirHashes ( + Hasher, + HashLevels(..), + objectHashLevels, + branchHashLevels, + branchHashDir, + dirHashes, + hashDirMixed, + hashDirLower, + display_32bits_as_dir +) where + +import Data.Default +import Data.Bits +import qualified Data.ByteArray as BA +import qualified Data.ByteArray.Encoding as BA +import qualified Data.ByteString as S +import qualified System.FilePath.ByteString as P + +import Common +import Key +import Types.GitConfig +import Types.Difference +import Utility.Hash +import Utility.MD5 + +type Hasher = Key -> RawFilePath + +-- Number of hash levels to use. 2 is the default. +newtype HashLevels = HashLevels Int + +instance Default HashLevels where + def = HashLevels 2 + +objectHashLevels :: GitConfig -> HashLevels +objectHashLevels = configHashLevels OneLevelObjectHash + +branchHashLevels :: GitConfig -> HashLevels +branchHashLevels = configHashLevels OneLevelBranchHash + +configHashLevels :: Difference -> GitConfig -> HashLevels +configHashLevels d config + | hasDifference d (annexDifferences config) = HashLevels 1 + | otherwise = def + +branchHashDir :: GitConfig -> Key -> S.ByteString +branchHashDir = hashDirLower . branchHashLevels + +{- Two different directory hashes may be used. The mixed case hash + - came first, and is fine, except for the problem of case-strict + - filesystems such as Linux VFAT (mounted with shortname=mixed), + - which do not allow using a directory "XX" when "xx" already exists. + - To support that, some git-annex repositories use the lower case-hash. + - All special remotes use the lower-case hash for new data, but old data + - may still use the mixed case hash. -} +dirHashes :: [HashLevels -> Hasher] +dirHashes = [hashDirLower, hashDirMixed] + +hashDirs :: HashLevels -> Int -> S.ByteString -> RawFilePath +hashDirs (HashLevels 1) sz s = P.addTrailingPathSeparator $ S.take sz s +hashDirs _ sz s = P.addTrailingPathSeparator $ h P. t + where + (h, t) = S.splitAt sz s + +hashDirLower :: HashLevels -> Hasher +hashDirLower n k = hashDirs n 3 $ S.pack $ take 6 $ conv $ + md5s $ serializeKey' $ nonChunkKey k + where + conv v = BA.unpack $ + (BA.convertToBase BA.Base16 v :: BA.Bytes) + +{- This was originally using Data.Hash.MD5 from MissingH. This new version +- is faster, but ugly as it has to replicate the 4 Word32's that produced. -} +hashDirMixed :: HashLevels -> Hasher +hashDirMixed n k = hashDirs n 2 $ S.pack $ take 4 $ + concatMap display_32bits_as_dir $ + encodeWord32 $ map fromIntegral $ BA.unpack $ + Utility.Hash.md5s $ serializeKey' $ nonChunkKey k + where + encodeWord32 (b1:b2:b3:b4:rest) = + (shiftL b4 24 .|. shiftL b3 16 .|. shiftL b2 8 .|. b1) + : encodeWord32 rest + encodeWord32 _ = [] diff --git a/Annex/Drop.hs b/Annex/Drop.hs new file mode 100644 index 0000000000..f59d6f17d6 --- /dev/null +++ b/Annex/Drop.hs @@ -0,0 +1,131 @@ +{- dropping of unwanted content + - + - Copyright 2012-2021 Joey Hess + - + - Licensed under the GNU AGPL version 3 or higher. + -} + +{-# LANGUAGE OverloadedStrings #-} + +module Annex.Drop where + +import Annex.Common +import Logs.Trust +import Annex.NumCopies +import Types.Remote (uuid, appendonly, config, remotetype, thirdPartyPopulated) +import qualified Remote +import qualified Command.Drop +import Command +import Annex.Wanted +import Annex.Content +import Annex.SpecialRemote.Config +import qualified Database.Keys + +import qualified Data.Set as S + +type Reason = String + +{- Drop a key from local and/or remote when allowed by the preferred content, + - required content, and numcopies settings. + - + - Skips trying to drop from remotes that are appendonly, since those drops + - would presumably fail. Also skips dropping from exporttree/importtree remotes, + - which don't allow dropping individual keys, and from thirdPartyPopulated + - remotes. + - + - The UUIDs are ones where the content is believed to be present. + - The Remote list can include other remotes that do not have the content; + - only ones that match the UUIDs will be dropped from. + - + - If allowed to drop fromhere, that drop will be done last. This is done + - because local drops do not need any LockedCopy evidence, and so dropping + - from local last allows the content to be removed from more remotes. + - + - A VerifiedCopy can be provided as an optimisation when eg, a key + - has just been uploaded to a remote. + - + - The runner is used to run CommandStart sequentially, it's typically + - callCommandAction. + -} +handleDropsFrom :: [UUID] -> [Remote] -> Reason -> Bool -> Key -> AssociatedFile -> SeekInput -> [VerifiedCopy] -> (CommandStart -> CommandCleanup) -> Annex () +handleDropsFrom locs rs reason fromhere key afile si preverified runner = do + fs <- Database.Keys.getAssociatedFilesIncluding afile key + n <- getcopies fs + void $ if fromhere && checkcopies n Nothing + then go fs rs n >>= dropl fs + else go fs rs n + where + getcopies fs = do + (untrusted, have) <- trustPartition UnTrusted locs + (numcopies, mincopies) <- getSafestNumMinCopies' afile key fs + return (length have, numcopies, mincopies, S.fromList untrusted) + + {- Check that we have enough copies still to drop the content. + - When the remote being dropped from is untrusted, it was not + - counted as a copy, so having only numcopies suffices. Otherwise, + - we need more than numcopies to safely drop. + - + - This is not the final check that it's safe to drop, but it + - avoids doing extra work to do that check later in cases where it + - will surely fail. + -} + checkcopies (have, numcopies, mincopies, _untrusted) Nothing = + have > fromNumCopies numcopies && have > fromMinCopies mincopies + checkcopies (have, numcopies, mincopies, untrusted) (Just u) + | S.member u untrusted = have >= fromNumCopies numcopies && have >= fromMinCopies mincopies + | otherwise = have > fromNumCopies numcopies && have > fromMinCopies mincopies + + decrcopies (have, numcopies, mincopies, untrusted) Nothing = + (have - 1, numcopies, mincopies, untrusted) + decrcopies v@(_have, _numcopies, _mincopies, untrusted) (Just u) + | S.member u untrusted = v + | otherwise = decrcopies v Nothing + + go _ [] n = pure n + go fs (r:rest) n + | uuid r `S.notMember` slocs = go fs rest n + | appendonly r = go fs rest n + | exportTree (config r) = go fs rest n + | importTree (config r) = go fs rest n + | thirdPartyPopulated (remotetype r) = go fs rest n + | checkcopies n (Just $ Remote.uuid r) = + dropr fs r n >>= go fs rest + | otherwise = pure n + + checkdrop fs n u a = + let afs = map (AssociatedFile . Just) fs + pcc = Command.Drop.PreferredContentChecked True + in ifM (wantDrop True u (Just key) afile (Just afs)) + ( dodrop n u (a pcc) + , return n + ) + + dodrop n@(have, numcopies, mincopies, _untrusted) u a = + ifM (safely $ runner $ a numcopies mincopies) + ( do + fastDebug "Annex.Drop" $ unwords + [ "dropped" + , case afile of + AssociatedFile Nothing -> serializeKey key + AssociatedFile (Just af) -> fromRawFilePath af + , "(from " ++ maybe "here" show u ++ ")" + , "(copies now " ++ show (have - 1) ++ ")" + , ": " ++ reason + ] + return $ decrcopies n u + , return n + ) + + dropl fs n = checkdrop fs n Nothing $ \pcc numcopies mincopies -> + stopUnless (inAnnex key) $ + Command.Drop.startLocal pcc afile ai si numcopies mincopies key preverified (Command.Drop.DroppingUnused False) + + dropr fs r n = checkdrop fs n (Just $ Remote.uuid r) $ \pcc numcopies mincopies -> + Command.Drop.startRemote pcc afile ai si numcopies mincopies key (Command.Drop.DroppingUnused False) r + + ai = mkActionItem (key, afile) + + slocs = S.fromList locs + + safely a = either (const False) id <$> tryNonAsync a + diff --git a/Annex/Environment.hs b/Annex/Environment.hs new file mode 100644 index 0000000000..2b917f4fa2 --- /dev/null +++ b/Annex/Environment.hs @@ -0,0 +1,73 @@ +{- git-annex environment + - + - Copyright 2012-2023 Joey Hess + - + - Licensed under the GNU AGPL version 3 or higher. + -} + +{-# LANGUAGE OverloadedStrings #-} + +module Annex.Environment ( + checkEnvironment, + checkEnvironmentIO, + ensureCommit, +) where + +import Annex.Common +import Utility.UserInfo +import qualified Git.Config +import Config +import Utility.Env.Set + +import Control.Exception + +{- Checks that the system's environment allows git to function. + - Git requires a GECOS username, or suitable git configuration, or + - environment variables. When none of those are set, this will set the + - environment variables. + - + - Git also requires the system have a hostname containing a dot. + - Otherwise, it tries various methods to find a FQDN, and will fail if it + - does not. To avoid replicating that code here, which would break if its + - methods change, this function does not check the hostname is valid. + - Instead, git-annex init calls ensureCommit, which makes sure that git + - gets set up to allow committing. + -} +checkEnvironment :: Annex () +checkEnvironment = do + gitusername <- fromRepo $ Git.Config.getMaybe "user.name" + when (isNothing gitusername || gitusername == Just "") $ + unlessM userConfigOnly $ + liftIO checkEnvironmentIO + +checkEnvironmentIO :: IO () +checkEnvironmentIO = whenM (isNothing <$> myUserGecos) $ do + username <- either (const "unknown") id <$> myUserName + ensureEnv "GIT_AUTHOR_NAME" username + ensureEnv "GIT_COMMITTER_NAME" username + where + -- existing environment is not overwritten + ensureEnv var val = setEnv var val False + +{- Runs an action that commits to the repository, and if it fails, + - sets user.email and user.name to a dummy value and tries the action again. + - + - Note that user.email and user.name are left set afterwards, so this only + - needs to be used once to make sure that future commits will succeed. + -} +ensureCommit :: Annex a -> Annex a +ensureCommit a = either retry return =<< tryNonAsync a + where + retry e = ifM userConfigOnly + ( liftIO (throwIO e) + , do + name <- liftIO $ either (const "unknown") id <$> myUserName + setConfig "user.name" name + setConfig "user.email" name + a + ) + +userConfigOnly :: Annex Bool +userConfigOnly = do + v <- fromRepo $ Git.Config.getMaybe "user.useconfigonly" + return (fromMaybe False (Git.Config.isTrueFalse' =<< v)) diff --git a/Annex/Export.hs b/Annex/Export.hs new file mode 100644 index 0000000000..60039ef3b9 --- /dev/null +++ b/Annex/Export.hs @@ -0,0 +1,72 @@ +{- git-annex exports + - + - Copyright 2017-2021 Joey Hess + - + - Licensed under the GNU AGPL version 3 or higher. + -} + +{-# LANGUAGE OverloadedStrings #-} + +module Annex.Export where + +import Annex +import Annex.CatFile +import Types +import Types.Key +import qualified Git +import qualified Types.Remote as Remote +import Git.Quote +import Messages + +import Data.Maybe +import qualified Data.ByteString.Short as S (fromShort, toShort) + +-- From a sha pointing to the content of a file to the key +-- to use to export it. When the file is annexed, it's the annexed key. +-- When the file is stored in git, it's a special type of key to indicate +-- that. +exportKey :: Git.Sha -> Annex Key +exportKey sha = mk <$> catKey sha + where + mk (Just k) = k + mk Nothing = gitShaKey sha + +-- Encodes a git sha as a key. This is used to represent a non-annexed +-- file that is stored on a special remote, which necessarily needs a +-- key. +-- +-- This is not the same as a SHA1 key, because the mapping needs to be +-- bijective, also because git may not always use SHA1, and because git +-- takes a SHA1 of the file size + content, while git-annex SHA1 keys +-- only checksum the content. +gitShaKey :: Git.Sha -> Key +gitShaKey (Git.Ref s) = mkKey $ \kd -> kd + { keyName = S.toShort s + , keyVariety = OtherKey "GIT" + } + +-- Reverse of gitShaKey +keyGitSha :: Key -> Maybe Git.Sha +keyGitSha k + | fromKey keyVariety k == OtherKey "GIT" = + Just (Git.Ref (S.fromShort (fromKey keyName k))) + | otherwise = Nothing + +-- Is a key storing a git sha, and not used for an annexed file? +isGitShaKey :: Key -> Bool +isGitShaKey = isJust . keyGitSha + +warnExportImportConflict :: Remote -> Annex () +warnExportImportConflict r = do + isimport <- Remote.isImportSupported r + isexport <- Remote.isExportSupported r + let (ops, resolvcmd) = case (isexport, isimport) of + (False, True) -> ("imported from", "git-annex import") + (True, False) -> ("exported to", "git-annex export") + _ -> ("exported to and/or imported from", "git-annex export") + toplevelWarning True $ UnquotedString $ unwords + [ "Conflict detected. Different trees have been" + , ops, Remote.name r ++ ". Use" + , resolvcmd + , "to resolve this conflict." + ] diff --git a/Annex/ExternalAddonProcess.hs b/Annex/ExternalAddonProcess.hs new file mode 100644 index 0000000000..e573d2261d --- /dev/null +++ b/Annex/ExternalAddonProcess.hs @@ -0,0 +1,100 @@ +{- External addon processes for special remotes and backends. + - + - Copyright 2013-2024 Joey Hess + - + - Licensed under the GNU AGPL version 3 or higher. + -} + +{-# LANGUAGE OverloadedStrings #-} + +module Annex.ExternalAddonProcess where + +import qualified Annex +import Annex.Common +import Git.Env +import Utility.Shell +import Messages.Progress + +import Control.Concurrent.Async + +data ExternalAddonProcess = ExternalAddonProcess + { externalSend :: Handle + , externalReceive :: Handle + -- Shut down the process. With True, it's forced to stop + -- immediately. + , externalShutdown :: Bool -> IO () + , externalPid :: ExternalAddonPID + , externalProgram :: String + } + +type ExternalAddonPID = Int + +data ExternalAddonStartError + = ProgramNotInstalled String + | ProgramFailure String + +startExternalAddonProcess :: String -> [CommandParam] -> ExternalAddonPID -> Annex (Either ExternalAddonStartError ExternalAddonProcess) +startExternalAddonProcess basecmd ps pid = do + errrelayer <- mkStderrRelayer + g <- Annex.gitRepo + cmdpath <- liftIO $ searchPath basecmd + liftIO $ start errrelayer g cmdpath + where + start errrelayer g cmdpath = do + (cmd, cmdps) <- maybe (pure (basecmd, [])) findShellCommand cmdpath + let basep = (proc cmd (toCommand (cmdps ++ ps))) + { std_in = CreatePipe + , std_out = CreatePipe + , std_err = CreatePipe + } + p <- propgit g basep + tryNonAsync (createProcess p) >>= \case + Right v -> (Right <$> started cmd errrelayer v) + `catchNonAsync` const (runerr cmdpath) + Left _ -> runerr cmdpath + + started cmd errrelayer pall@(Just hin, Just hout, Just herr, ph) = do + stderrelay <- async $ errrelayer ph herr + let shutdown forcestop = do + -- Close the process's stdin, to let it know there + -- are no more requests, so it will exit. + hClose hout + -- Close the procces's stdout as we're not going to + -- process any more output from it. + hClose hin + if forcestop + then cleanupProcess pall + else void (waitForProcess ph) + `onException` cleanupProcess pall + -- This thread will exit after consuming any + -- remaining stderr from the process. + () <- wait stderrelay + hClose herr + return $ ExternalAddonProcess + { externalSend = hin + , externalReceive = hout + , externalPid = pid + , externalShutdown = shutdown + , externalProgram = cmd + } + started _ _ _ = giveup "internal" + + propgit g p = do + environ <- propGitEnv g + return $ p { env = Just environ } + + runerr (Just cmd) = + return $ Left $ ProgramFailure $ + "Cannot run " ++ cmd ++ " -- Make sure it's executable and that its dependencies are installed." + runerr Nothing = do + path <- intercalate ":" <$> getSearchPath + return $ Left $ ProgramNotInstalled $ + "Cannot run " ++ basecmd ++ " -- It is not installed in PATH (" ++ path ++ ")" + +protocolDebug :: ExternalAddonProcess -> Bool -> String -> IO () +protocolDebug external sendto line = debug "Annex.ExternalAddonProcess" $ unwords + [ externalProgram external ++ + "[" ++ show (externalPid external) ++ "]" + , if sendto then "<--" else "-->" + , line + ] diff --git a/Annex/FileMatcher.hs b/Annex/FileMatcher.hs new file mode 100644 index 0000000000..e48931f360 --- /dev/null +++ b/Annex/FileMatcher.hs @@ -0,0 +1,278 @@ +{- git-annex file matching + - + - Copyright 2012-2023 Joey Hess + - + - Licensed under the GNU AGPL version 3 or higher. + -} + +{-# LANGUAGE CPP #-} + +module Annex.FileMatcher ( + GetFileMatcher, + checkFileMatcher, + checkFileMatcher', + checkMatcher, + checkMatcher', + matchAll, + PreferredContentData(..), + preferredContentTokens, + preferredContentParser, + ParseToken, + parsedToMatcher, + mkMatchExpressionParser, + largeFilesMatcher, + AddUnlockedMatcher, + addUnlockedMatcher, + checkAddUnlockedMatcher, + LimitBy(..), + module Types.FileMatcher +) where + +import qualified Data.Map as M + +import Annex.Common +import Limit +import Utility.Matcher +import Types.Group +import Types.FileMatcher +import Types.GitConfig +import Config.GitConfig +import Annex.SpecialRemote.Config (preferreddirField) +import Git.FilePath +import Types.Remote (RemoteConfig) +import Types.ProposedAccepted +import Annex.CheckAttr +import qualified Git.Config +#ifdef WITH_MAGICMIME +import Annex.Magic +#endif + +import Data.Either +import qualified Data.Set as S +import Control.Monad.Writer + +type GetFileMatcher = RawFilePath -> Annex (FileMatcher Annex) + +checkFileMatcher :: GetFileMatcher -> RawFilePath -> Annex Bool +checkFileMatcher getmatcher file = + checkFileMatcher' getmatcher file (return True) + +-- | Allows running an action when no matcher is configured for the file. +checkFileMatcher' :: GetFileMatcher -> RawFilePath -> Annex Bool -> Annex Bool +checkFileMatcher' getmatcher file notconfigured = do + matcher <- getmatcher file + checkMatcher matcher Nothing afile S.empty notconfigured d + where + afile = AssociatedFile (Just file) + -- checkMatcher will never use this, because afile is provided. + d = return True + +checkMatcher :: FileMatcher Annex -> Maybe Key -> AssociatedFile -> AssumeNotPresent -> Annex Bool -> Annex Bool -> Annex Bool +checkMatcher matcher mkey afile notpresent notconfigured d + | isEmpty (fst matcher) = notconfigured + | otherwise = case (mkey, afile) of + (_, AssociatedFile (Just file)) -> + go =<< fileMatchInfo file mkey + (Just key, AssociatedFile Nothing) -> + let i = ProvidedInfo + { providedFilePath = Nothing + , providedKey = Just key + , providedFileSize = Nothing + , providedMimeType = Nothing + , providedMimeEncoding = Nothing + , providedLinkType = Nothing + } + in go (MatchingInfo i) + (Nothing, _) -> d + where + go mi = checkMatcher' matcher mi notpresent + +checkMatcher' :: FileMatcher Annex -> MatchInfo -> AssumeNotPresent -> Annex Bool +checkMatcher' (matcher, (MatcherDesc matcherdesc)) mi notpresent = do + (matches, desc) <- runWriterT $ matchMrun' matcher $ \op -> + matchAction op notpresent mi + explain (mkActionItem mi) $ UnquotedString <$> + describeMatchResult matchDesc desc + ((if matches then "matches " else "does not match ") ++ matcherdesc ++ ": ") + return matches + +fileMatchInfo :: RawFilePath -> Maybe Key -> Annex MatchInfo +fileMatchInfo file mkey = do + matchfile <- getTopFilePath <$> inRepo (toTopFilePath file) + return $ MatchingFile FileInfo + { matchFile = matchfile + , contentFile = file + , matchKey = mkey + } + +matchAll :: Matcher (MatchFiles Annex) +matchAll = generate [] + +parsedToMatcher :: MatcherDesc -> [ParseResult (MatchFiles Annex)] -> Either String (FileMatcher Annex) +parsedToMatcher matcherdesc parsed = case partitionEithers parsed of + ([], vs) -> Right (generate vs, matcherdesc) + (es, _) -> Left $ unwords $ map ("Parse failure: " ++) es + +data ParseToken t + = SimpleToken String (ParseResult t) + | ValueToken String (String -> ParseResult t) + +type ParseResult t = Either String (Token t) + +parseToken :: [ParseToken t] -> String -> ParseResult t +parseToken l t = case syntaxToken t of + Right st -> Right st + Left _ -> go l + where + go [] = Left $ "near " ++ show t + go (SimpleToken s r : _) | s == t = r + go (ValueToken s mkr : _) | s == k = mkr v + go (_ : ps) = go ps + (k, v) = separate (== '=') t + +{- This is really dumb tokenization; there's no support for quoted values. + - Open and close parens are always treated as standalone tokens; + - otherwise tokens must be separated by whitespace. -} +tokenizeMatcher :: String -> [String] +tokenizeMatcher = filter (not . null) . concatMap splitparens . words + where + splitparens = segmentDelim (`elem` "()") + +commonTokens :: LimitBy -> [ParseToken (MatchFiles Annex)] +commonTokens lb = + [ SimpleToken "anything" (simply limitAnything) + , SimpleToken "nothing" (simply limitNothing) + , ValueToken "include" (usev limitInclude) + , ValueToken "exclude" (usev limitExclude) + , ValueToken "largerthan" (usev $ limitSize lb "largerthan" (>)) + , ValueToken "smallerthan" (usev $ limitSize lb "smallerthan" (<)) + , SimpleToken "unused" (simply limitUnused) + ] + +data PreferredContentData = PCD + { matchStandard :: Either String (Matcher (MatchFiles Annex)) + , matchGroupWanted :: Either String (Matcher (MatchFiles Annex)) + , getGroupMap :: Annex GroupMap + , configMap :: M.Map UUID RemoteConfig + , repoUUID :: Maybe UUID + } + +preferredContentTokens :: PreferredContentData -> [ParseToken (MatchFiles Annex)] +preferredContentTokens pcd = + [ SimpleToken "standard" (call "standard" $ matchStandard pcd) + , SimpleToken "groupwanted" (call "groupwanted" $ matchGroupWanted pcd) + , SimpleToken "inpreferreddir" (simply $ limitInDir preferreddir "inpreferreddir") + , SimpleToken "present" (simply $ limitPresent $ repoUUID pcd) + , SimpleToken "securehash" (simply limitSecureHash) + , ValueToken "copies" (usev limitCopies) + , ValueToken "lackingcopies" (usev $ limitLackingCopies "lackingcopies" False) + , ValueToken "approxlackingcopies" (usev $ limitLackingCopies "approxlackingcopies" True) + , ValueToken "inbackend" (usev limitInBackend) + , ValueToken "metadata" (usev limitMetaData) + , ValueToken "inallgroup" (usev $ limitInAllGroup $ getGroupMap pcd) + , ValueToken "onlyingroup" (usev $ limitOnlyInGroup $ getGroupMap pcd) + ] ++ commonTokens LimitAnnexFiles + where + preferreddir = maybe "public" fromProposedAccepted $ + M.lookup preferreddirField =<< (`M.lookup` configMap pcd) =<< repoUUID pcd + +preferredContentParser :: [ParseToken (MatchFiles Annex)] -> String -> [ParseResult (MatchFiles Annex)] +preferredContentParser tokens = map (parseToken tokens) . tokenizeMatcher + +mkMatchExpressionParser :: Annex (String -> [ParseResult (MatchFiles Annex)]) +mkMatchExpressionParser = do +#ifdef WITH_MAGICMIME + magicmime <- liftIO initMagicMime + let mimer n f = ValueToken n (usev $ f magicmime) +#else + let mimer n = ValueToken n $ + const $ Left $ "\""++n++"\" not supported; not built with MagicMime support" +#endif + let parse = parseToken $ + commonTokens LimitDiskFiles ++ +#ifdef WITH_MAGICMIME + [ mimer "mimetype" $ + matchMagic "mimetype" getMagicMimeType providedMimeType userProvidedMimeType + , mimer "mimeencoding" $ + matchMagic "mimeencoding" getMagicMimeEncoding providedMimeEncoding userProvidedMimeEncoding + ] +#else + [ mimer "mimetype" + , mimer "mimeencoding" + ] +#endif + return $ map parse . tokenizeMatcher + +{- Generates a matcher for files large enough (or meeting other criteria) + - to be added to the annex, rather than directly to git. + - + - annex.largefiles is configured in git config, or git attributes, + - or global git-annex config, in that order. + -} +largeFilesMatcher :: Annex GetFileMatcher +largeFilesMatcher = go =<< getGitConfigVal' annexLargeFiles + where + matcherdesc = MatcherDesc "annex.largefiles" + go (HasGitConfig (Just expr)) = do + matcher <- mkmatcher expr "git config" + return $ const $ return matcher + go v = return $ \file -> do + expr <- checkAttr "annex.largefiles" file + if null expr + then case v of + HasGlobalConfig (Just expr') -> + mkmatcher expr' "git-annex config" + _ -> return (matchAll, matcherdesc) + else mkmatcher expr "gitattributes" + + mkmatcher expr cfgfrom = do + parser <- mkMatchExpressionParser + either (badexpr cfgfrom) return $ parsedToMatcher matcherdesc $ parser expr + + badexpr cfgfrom e = giveup $ "bad annex.largefiles configuration in " ++ cfgfrom ++ ": " ++ e + +newtype AddUnlockedMatcher = AddUnlockedMatcher (FileMatcher Annex) + +addUnlockedMatcher :: Annex AddUnlockedMatcher +addUnlockedMatcher = AddUnlockedMatcher <$> + (go =<< getGitConfigVal' annexAddUnlocked) + where + go (HasGitConfig (Just expr)) = mkmatcher expr "git config" + go (HasGlobalConfig (Just expr)) = mkmatcher expr "git annex config" + go _ = matchalways False + + matcherdesc = MatcherDesc "annex.addunlocked" + + mkmatcher :: String -> String -> Annex (FileMatcher Annex) + mkmatcher expr cfgfrom = case Git.Config.isTrueFalse expr of + Just b -> matchalways b + Nothing -> do + parser <- mkMatchExpressionParser + either (badexpr cfgfrom) return $ parsedToMatcher matcherdesc $ parser expr + + badexpr cfgfrom e = giveup $ "bad annex.addunlocked configuration in " ++ cfgfrom ++ ": " ++ e + + matchalways True = return (MOp limitAnything, matcherdesc) + matchalways False = return (MOp limitNothing, matcherdesc) + +checkAddUnlockedMatcher :: AddUnlockedMatcher -> MatchInfo -> Annex Bool +checkAddUnlockedMatcher (AddUnlockedMatcher matcher) mi = + checkMatcher' matcher mi S.empty + +simply :: MatchFiles Annex -> ParseResult (MatchFiles Annex) +simply = Right . Operation + +usev :: MkLimit Annex -> String -> ParseResult (MatchFiles Annex) +usev a v = Operation <$> a v + +call :: String -> Either String (Matcher (MatchFiles Annex)) -> ParseResult (MatchFiles Annex) +call desc (Right sub) = Right $ Operation $ MatchFiles + { matchAction = \notpresent mi -> + matchMrun sub $ \o -> matchAction o notpresent mi + , matchNeedsFileName = any matchNeedsFileName sub + , matchNeedsFileContent = any matchNeedsFileContent sub + , matchNeedsKey = any matchNeedsKey sub + , matchNeedsLocationLog = any matchNeedsLocationLog sub + , matchDesc = matchDescSimple desc + } +call _ (Left err) = Left err diff --git a/Annex/Fixup.hs b/Annex/Fixup.hs new file mode 100644 index 0000000000..a60e4baa0b --- /dev/null +++ b/Annex/Fixup.hs @@ -0,0 +1,155 @@ +{- git-annex repository fixups + - + - Copyright 2013-2020 Joey Hess + - + - Licensed under the GNU AGPL version 3 or higher. + -} + +{-# LANGUAGE OverloadedStrings #-} + +module Annex.Fixup where + +import Git.Types +import Git.Config +import Types.GitConfig +import Utility.Path +import Utility.Path.AbsRel +import Utility.SafeCommand +import Utility.Directory +import Utility.Exception +import Utility.Monad +import Utility.FileSystemEncoding +import qualified Utility.RawFilePath as R +import Utility.PartialPrelude + +import System.IO +import Data.List +import Data.Maybe +import Control.Monad +import Control.Monad.IfElse +import qualified Data.Map as M +import qualified Data.ByteString as S +import System.FilePath.ByteString +import Control.Applicative +import Prelude + +fixupRepo :: Repo -> GitConfig -> IO Repo +fixupRepo r c = do + let r' = disableWildcardExpansion r + r'' <- fixupUnusualRepos r' c + if annexDirect c + then return (fixupDirect r'') + else return r'' + +{- Disable git's built-in wildcard expansion, which is not wanted + - when using it as plumbing by git-annex. -} +disableWildcardExpansion :: Repo -> Repo +disableWildcardExpansion r = r + { gitGlobalOpts = gitGlobalOpts r ++ [Param "--literal-pathspecs"] } + +{- Direct mode repos have core.bare=true, but are not really bare. + - Fix up the Repo to be a non-bare repo, and arrange for git commands + - run by git-annex to be passed parameters that override this setting. -} +fixupDirect :: Repo -> Repo +fixupDirect r@(Repo { location = l@(Local { gitdir = d, worktree = Nothing }) }) = do + r + { location = l { worktree = Just (parentDir d) } + , gitGlobalOpts = gitGlobalOpts r ++ + [ Param "-c" + , Param $ fromConfigKey coreBare ++ "=" ++ boolConfig False + ] + } +fixupDirect r = r + +{- Submodules have their gitdir containing ".git/modules/", and + - have core.worktree set, and also have a .git file in the top + - of the repo. We need to unset core.worktree, and change the .git + - file into a symlink to the git directory. This way, annex symlinks will be + - of the usual .git/annex/object form, and will consistently work + - whether a repo is used as a submodule or not, and wheverever the + - submodule is mounted. + - + - git-worktree directories have a .git file. + - That needs to be converted to a symlink, and .git/annex made a symlink + - to the main repository's git-annex directory. + - The worktree shares git config with the main repository, so the same + - annex uuid and other configuration will be used in the worktree as in + - the main repository. + - + - git clone or init with --separate-git-dir similarly makes a .git file, + - which in that case points to a different git directory. It's + - also converted to a symlink so links to .git/annex will work. + - + - When the filesystem doesn't support symlinks, we cannot make .git + - into a symlink. But we don't need too, since the repo will use adjusted + - unlocked branches. + - + - Don't do any of this if the repo has not been initialized for git-annex + - use yet. + -} +fixupUnusualRepos :: Repo -> GitConfig -> IO Repo +fixupUnusualRepos r@(Repo { location = l@(Local { worktree = Just w, gitdir = d }) }) c + | isNothing (annexVersion c) = return r + | needsSubmoduleFixup r = do + when (coreSymlinks c) $ + (replacedotgit >> unsetcoreworktree) + `catchNonAsync` \e -> hPutStrLn stderr $ + "warning: unable to convert submodule to form that will work with git-annex: " ++ show e + return $ r' + { config = M.delete "core.worktree" (config r) + } + | otherwise = ifM (needsGitLinkFixup r) + ( do + when (coreSymlinks c) $ + (replacedotgit >> worktreefixup) + `catchNonAsync` \e -> hPutStrLn stderr $ + "warning: unable to convert .git file to symlink that will work with git-annex: " ++ show e + return r' + , return r + ) + where + dotgit = w ".git" + + replacedotgit = whenM (doesFileExist (fromRawFilePath dotgit)) $ do + linktarget <- relPathDirToFile w d + removeWhenExistsWith R.removeLink dotgit + R.createSymbolicLink linktarget dotgit + + -- Unsetting a config fails if it's not set, so ignore failure. + unsetcoreworktree = void $ Git.Config.unset "core.worktree" r + + worktreefixup = + -- git-worktree sets up a "commondir" file that contains + -- the path to the main git directory. + -- Using --separate-git-dir does not. + catchDefaultIO Nothing (headMaybe . lines <$> readFile (fromRawFilePath (d "commondir"))) >>= \case + Just gd -> do + -- Make the worktree's git directory + -- contain an annex symlink to the main + -- repository's annex directory. + let linktarget = toRawFilePath gd "annex" + R.createSymbolicLink linktarget + (dotgit "annex") + Nothing -> return () + + -- Repo adjusted, so that symlinks to objects that get checked + -- in will have the usual path, rather than pointing off to the + -- real .git directory. + r' + | coreSymlinks c = r { location = l { gitdir = dotgit } } + | otherwise = r +fixupUnusualRepos r _ = return r + +needsSubmoduleFixup :: Repo -> Bool +needsSubmoduleFixup (Repo { location = (Local { worktree = Just _, gitdir = d }) }) = + (".git" "modules") `S.isInfixOf` d +needsSubmoduleFixup _ = False + +needsGitLinkFixup :: Repo -> IO Bool +needsGitLinkFixup (Repo { location = (Local { worktree = Just wt, gitdir = d }) }) + -- Optimization: Avoid statting .git in the common case; only + -- when the gitdir is not in the usual place inside the worktree + -- might .git be a file. + | wt ".git" == d = return False + | otherwise = doesFileExist (fromRawFilePath (wt ".git")) +needsGitLinkFixup _ = return False diff --git a/Annex/GitOverlay.hs b/Annex/GitOverlay.hs new file mode 100644 index 0000000000..5388c1bfc6 --- /dev/null +++ b/Annex/GitOverlay.hs @@ -0,0 +1,124 @@ +{- Temporarily changing how git-annex runs git commands. + - + - Copyright 2014-2020 Joey Hess + - + - Licensed under the GNU AGPL version 3 or higher. + -} + +module Annex.GitOverlay ( + module Annex.GitOverlay, + AltIndexFile(..), +) where + +import qualified Control.Exception as E + +import Annex.Common +import Types.IndexFiles +import Git +import Git.Types +import Git.Index +import Git.Env +import qualified Annex +import qualified Annex.Queue +import Config.Smudge + +{- Runs an action using a different git index file. -} +withIndexFile :: AltIndexFile -> (FilePath -> Annex a) -> Annex a +withIndexFile i = withAltRepo usecachedgitenv restoregitenv + where + -- This is an optimisation. Since withIndexFile is run repeatedly, + -- typically with the same file, and addGitEnv uses the slow + -- getEnvironment when gitEnv is Nothing, and has to do a + -- nontrivial amount of work, we cache the modified environment + -- the first time, and reuse it in subsequent calls for the same + -- index file. + -- + -- (This could be done at another level; eg when creating the + -- Git object in the first place, but it's more efficient to let + -- the environment be inherited in all calls to git where it + -- does not need to be modified.) + -- + -- Also, the use of AltIndexFile avoids needing to construct + -- the FilePath each time, which saves enough time to be worth the + -- added complication. + usecachedgitenv g = case gitEnv g of + Nothing -> Annex.withState $ \s -> case Annex.cachedgitenv s of + Just (cachedi, cachedf, cachede) | i == cachedi -> + return (s, (g { gitEnv = Just cachede }, cachedf)) + _ -> do + r@(g', f) <- addindex g + let cache = (,,) + <$> Just i + <*> Just f + <*> gitEnv g' + return (s { Annex.cachedgitenv = cache }, r) + Just _ -> liftIO $ addindex g + + addindex g = do + f <- indexEnvVal $ case i of + AnnexIndexFile -> gitAnnexIndex g + ViewIndexFile -> gitAnnexViewIndex g + g' <- addGitEnv g indexEnv f + return (g', f) + + restoregitenv g g' = g' { gitEnv = gitEnv g } + +{- Runs an action using a different git work tree. + - + - Smudge and clean filters are disabled in this work tree. -} +withWorkTree :: FilePath -> Annex a -> Annex a +withWorkTree d a = withAltRepo + (\g -> return $ (g { location = modlocation (location g), gitGlobalOpts = gitGlobalOpts g ++ bypassSmudgeConfig }, ())) + (\g g' -> g' { location = location g, gitGlobalOpts = gitGlobalOpts g }) + (const a) + where + modlocation l@(Local {}) = l { worktree = Just (toRawFilePath d) } + modlocation _ = giveup "withWorkTree of non-local git repo" + +{- Runs an action with the git index file and HEAD, and a few other + - files that are related to the work tree coming from an overlay + - directory other than the usual. This is done by pointing + - GIT_COMMON_DIR at the regular git directory, and GIT_DIR at the + - overlay directory. + - + - Needs git 2.2.0 or newer. + -} +withWorkTreeRelated :: FilePath -> Annex a -> Annex a +withWorkTreeRelated d a = withAltRepo modrepo unmodrepo (const a) + where + modrepo g = liftIO $ do + g' <- addGitEnv g "GIT_COMMON_DIR" . fromRawFilePath + =<< absPath (localGitDir g) + g'' <- addGitEnv g' "GIT_DIR" d + return (g'' { gitEnvOverridesGitDir = True }, ()) + unmodrepo g g' = g' + { gitEnv = gitEnv g + , gitEnvOverridesGitDir = gitEnvOverridesGitDir g + } + +withAltRepo + :: (Repo -> Annex (Repo, t)) + -- ^ modify Repo + -> (Repo -> Repo -> Repo) + -- ^ undo modifications; first Repo is the original and second + -- is the one after running the action. + -> (t -> Annex a) + -> Annex a +withAltRepo modrepo unmodrepo a = do + g <- gitRepo + (g', t) <- modrepo g + q <- Annex.Queue.get + v <- tryNonAsync $ do + Annex.changeState $ \s -> s + { Annex.repo = g' + -- Start a separate queue for any changes made + -- with the modified repo. + , Annex.repoqueue = Nothing + } + a t + void $ tryNonAsync Annex.Queue.flush + Annex.changeState $ \s -> s + { Annex.repo = unmodrepo g (Annex.repo s) + , Annex.repoqueue = Just q + } + either E.throw return v diff --git a/Annex/HashObject.hs b/Annex/HashObject.hs new file mode 100644 index 0000000000..4a0ea187ed --- /dev/null +++ b/Annex/HashObject.hs @@ -0,0 +1,66 @@ +{- git hash-object interface + - + - Copyright 2016-2022 Joey Hess + - + - Licensed under the GNU AGPL version 3 or higher. + -} + +module Annex.HashObject ( + hashFile, + hashBlob, + hashObjectStop, + mkConcurrentHashObjectHandle, + withHashObjectHandle, +) where + +import Annex.Common +import qualified Git.HashObject +import qualified Annex +import Git.Types +import Utility.ResourcePool +import Types.Concurrency +import Annex.Concurrent.Utility + +hashObjectStop :: Annex () +hashObjectStop = maybe noop stop =<< Annex.getState Annex.hashobjecthandle + where + stop p = do + liftIO $ freeResourcePool p Git.HashObject.hashObjectStop + Annex.changeState $ \s -> s { Annex.hashobjecthandle = Nothing } + +hashFile :: RawFilePath -> Annex Sha +hashFile f = withHashObjectHandle $ \h -> + liftIO $ Git.HashObject.hashFile h f + +{- Note that the content will be written to a temp file. + - So it may be faster to use Git.HashObject.hashObject for large + - blob contents. -} +hashBlob :: Git.HashObject.HashableBlob b => b -> Annex Sha +hashBlob content = withHashObjectHandle $ \h -> + liftIO $ Git.HashObject.hashBlob h content + +withHashObjectHandle :: (Git.HashObject.HashObjectHandle -> Annex a) -> Annex a +withHashObjectHandle a = + maybe mkpool go =<< Annex.getState Annex.hashobjecthandle + where + go p = withResourcePool p start a + start = inRepo $ Git.HashObject.hashObjectStart True + mkpool = do + -- This only runs in non-concurrent code paths; + -- a concurrent pool is set up earlier when needed. + p <- mkResourcePoolNonConcurrent start + Annex.changeState $ \s -> s { Annex.hashobjecthandle = Just p } + go p + +mkConcurrentHashObjectHandle :: Concurrency -> Annex (ResourcePool Git.HashObject.HashObjectHandle) +mkConcurrentHashObjectHandle c = + Annex.getState Annex.hashobjecthandle >>= \case + Just p@(ResourcePool {}) -> return p + _ -> mkResourcePool =<< liftIO (maxHashObjects c) + +{- git hash-object is typically CPU bound, and is not likely to be the main + - bottleneck for any command. So limit to the number of CPU cores, maximum, + - while respecting the -Jn value. + -} +maxHashObjects :: Concurrency -> IO Int +maxHashObjects = concurrencyUpToCpus diff --git a/Annex/Hook.hs b/Annex/Hook.hs new file mode 100644 index 0000000000..8c6d648fb0 --- /dev/null +++ b/Annex/Hook.hs @@ -0,0 +1,88 @@ +{- git-annex git hooks + - + - Note that it's important that the content of scripts installed by + - git-annex not change, otherwise removing old hooks using an old + - version of the script would fail. + - + - Copyright 2013-2019 Joey Hess + - + - Licensed under the GNU AGPL version 3 or higher. + -} + +module Annex.Hook where + +import Annex.Common +import qualified Git.Hook as Git +import qualified Annex +import Utility.Shell + +import qualified Data.Map as M + +preCommitHook :: Git.Hook +preCommitHook = Git.Hook "pre-commit" (mkHookScript "git annex pre-commit .") [] + +postReceiveHook :: Git.Hook +postReceiveHook = Git.Hook "post-receive" + -- Only run git-annex post-receive when git-annex supports it, + -- to avoid failing if the repository with this hook is used + -- with an older version of git-annex. + (mkHookScript "if git annex post-receive --help >/dev/null 2>&1; then git annex post-receive; fi") + -- This is an old version of the hook script. + [ mkHookScript "git annex post-receive" + ] + +postCheckoutHook :: Git.Hook +postCheckoutHook = Git.Hook "post-checkout" smudgeHook [] + +postMergeHook :: Git.Hook +postMergeHook = Git.Hook "post-merge" smudgeHook [] + +-- Older versions of git-annex didn't support this command, but neither did +-- they support v7 repositories. +smudgeHook :: String +smudgeHook = mkHookScript "git annex smudge --update" + +preCommitAnnexHook :: Git.Hook +preCommitAnnexHook = Git.Hook "pre-commit-annex" "" [] + +postUpdateAnnexHook :: Git.Hook +postUpdateAnnexHook = Git.Hook "post-update-annex" "" [] + +mkHookScript :: String -> String +mkHookScript s = unlines + [ shebang + , "# automatically configured by git-annex" + , s + ] + +hookWrite :: Git.Hook -> Annex () +hookWrite h = unlessM (inRepo $ Git.hookWrite h) $ + hookWarning h "already exists, not configuring" + +hookUnWrite :: Git.Hook -> Annex () +hookUnWrite h = unlessM (inRepo $ Git.hookUnWrite h) $ + hookWarning h "contents modified; not deleting. Edit it to remove call to git annex." + +hookWarning :: Git.Hook -> String -> Annex () +hookWarning h msg = do + r <- gitRepo + warning $ UnquotedString $ + Git.hookName h ++ " hook (" ++ Git.hookFile h r ++ ") " ++ msg + +{- Runs a hook. To avoid checking if the hook exists every time, + - the existing hooks are cached. -} +runAnnexHook :: Git.Hook -> Annex () +runAnnexHook hook = do + m <- Annex.getState Annex.existinghooks + case M.lookup hook m of + Just True -> run + Just False -> noop + Nothing -> do + exists <- inRepo $ Git.hookExists hook + Annex.changeState $ \s -> s + { Annex.existinghooks = M.insert hook exists m } + when exists run + where + run = unlessM (inRepo $ Git.runHook hook) $ do + h <- fromRepo $ Git.hookFile hook + warning $ UnquotedString $ h ++ " failed" diff --git a/Annex/Import.hs b/Annex/Import.hs new file mode 100644 index 0000000000..2778740382 --- /dev/null +++ b/Annex/Import.hs @@ -0,0 +1,1105 @@ +{- git-annex import from remotes + - + - Copyright 2019-2024 Joey Hess + - + - Licensed under the GNU AGPL version 3 or higher. + -} + +{-# LANGUAGE OverloadedStrings #-} + +module Annex.Import ( + ImportTreeConfig(..), + ImportCommitConfig(..), + buildImportCommit, + buildImportTrees, + recordImportTree, + canImportKeys, + ImportResult(..), + Imported, + importChanges, + importKeys, + makeImportMatcher, + getImportableContents, +) where + +import Annex.Common +import Types.Import +import qualified Types.Remote as Remote +import Git.Types +import Git.Tree +import Git.Sha +import Git.FilePath +import Git.History +import qualified Git.DiffTree +import qualified Git.Ref +import qualified Git.Branch +import qualified Annex +import Annex.Link +import Annex.LockFile +import Annex.Content +import Annex.Export +import Annex.RemoteTrackingBranch +import Annex.HashObject +import Annex.Transfer +import Annex.CheckIgnore +import Annex.CatFile +import Annex.VectorClock +import Command +import Backend +import Types.Key +import Types.KeySource +import Messages.Progress +import Utility.DataUnits +import Utility.Metered +import Utility.Hash (sha1s) +import Logs.Import +import Logs.Export +import Logs.Location +import Logs.PreferredContent +import Types.FileMatcher +import Annex.FileMatcher +import qualified Utility.Matcher +import qualified Database.Export as Export +import qualified Database.ContentIdentifier as CIDDb +import qualified Logs.ContentIdentifier as CIDLog +import Backend.Utilities + +import Control.Concurrent.STM +import qualified Data.Map.Strict as M +import qualified Data.Set as S +import qualified System.FilePath.Posix.ByteString as Posix +import qualified System.FilePath.ByteString as P +import qualified Data.ByteArray.Encoding as BA + +{- Configures how to build an import tree. -} +data ImportTreeConfig + = ImportTree + -- ^ Import the tree as-is from the remote. + | ImportSubTree TopFilePath Sha + -- ^ Import a tree from the remote and graft it into a subdirectory + -- of the existing tree whose Sha is provided, replacing anything + -- that was there before. + deriving (Show) + +{- Configures how to build an import commit. -} +data ImportCommitConfig = ImportCommitConfig + { importCommitTracking :: Maybe Sha + -- ^ Current commit on the remote tracking branch. + , importCommitMode :: Git.Branch.CommitMode + , importCommitMessages :: [String] + } + +{- Buils a commit for an import from a special remote. + - + - When there are no changes to make (importCommitTracking + - already matches what was imported), returns Nothing. + - + - After importing from a remote, exporting the same thing back to the + - remote should be a no-op. So, the export log and database are + - updated to reflect the imported tree. + - + - This does not download any content from a remote. But since it needs the + - Key of imported files to be known, its caller will have to first download + - new files in order to generate keys for them. + -} +buildImportCommit + :: Remote + -> ImportTreeConfig + -> ImportCommitConfig + -> Imported + -> Annex (Maybe Ref) +buildImportCommit remote importtreeconfig importcommitconfig imported = + case importCommitTracking importcommitconfig of + Nothing -> go Nothing + Just trackingcommit -> inRepo (Git.Ref.tree trackingcommit) >>= \case + Nothing -> go Nothing + Just _ -> go (Just trackingcommit) + where + go trackingcommit = do + (importedtree, updatestate) <- recordImportTree remote importtreeconfig imported + buildImportCommit' remote importcommitconfig trackingcommit importedtree >>= \case + Just finalcommit -> do + updatestate + return (Just finalcommit) + Nothing -> return Nothing + +{- Builds a tree for an import from a special remote. + - + - Also returns an action that can be used to update + - all the other state to record the import. + -} +recordImportTree + :: Remote + -> ImportTreeConfig + -> Imported + -> Annex (History Sha, Annex ()) +recordImportTree remote importtreeconfig imported = do + importedtree@(History finaltree _) <- buildImportTrees basetree subdir imported + return (importedtree, updatestate finaltree) + where + basetree = case importtreeconfig of + ImportTree -> emptyTree + ImportSubTree _ sha -> sha + subdir = case importtreeconfig of + ImportTree -> Nothing + ImportSubTree dir _ -> Just dir + + updatestate finaltree = do + importedtree <- case subdir of + Nothing -> pure finaltree + Just dir -> + let subtreeref = Ref $ + fromRef' finaltree + <> ":" + <> getTopFilePath dir + in fromMaybe emptyTree + <$> inRepo (Git.Ref.tree subtreeref) + updateexportdb importedtree + oldexport <- updateexportlog importedtree + updatelocationlog oldexport importedtree + + updateexportdb importedtree = do + db <- Export.openDb (Remote.uuid remote) + Export.writeLockDbWhile db $ do + prevtree <- liftIO $ fromMaybe emptyTree + <$> Export.getExportTreeCurrent db + when (importedtree /= prevtree) $ do + Export.updateExportDb db prevtree importedtree + liftIO $ Export.recordExportTreeCurrent db importedtree + Export.closeDb db + + updateexportlog importedtree = do + oldexport <- getExport (Remote.uuid remote) + recordExport (Remote.uuid remote) importedtree $ ExportChange + { oldTreeish = exportedTreeishes oldexport + , newTreeish = importedtree + } + return oldexport + + -- downloadImport takes care of updating the location log + -- for the local repo when keys are downloaded, and also updates + -- the location log for the remote for keys that are present in it. + -- That leaves updating the location log for the remote for keys + -- that have had the last copy of their content removed from it. + -- + -- This must run after the export database has been updated + -- and flushed to disk, so it can query it. + updatelocationlog oldexport finaltree = do + let stillpresent db k = liftIO $ not . null + <$> Export.getExportedLocation db k + let updater db moldkey _newkey _ = case moldkey of + Just oldkey | not (isGitShaKey oldkey) -> + unlessM (stillpresent db oldkey) $ + logChange oldkey (Remote.uuid remote) InfoMissing + _ -> noop + -- When the remote is versioned, it still contains keys + -- that are not present in the new tree. + unless (Remote.versionedExport (Remote.exportActions remote)) $ do + db <- Export.openDb (Remote.uuid remote) + forM_ (exportedTreeishes oldexport) $ \oldtree -> + Export.runExportDiffUpdater updater db oldtree finaltree + Export.closeDb db + +buildImportCommit' :: Remote -> ImportCommitConfig -> Maybe Sha -> History Sha -> Annex (Maybe Sha) +buildImportCommit' remote importcommitconfig mtrackingcommit imported@(History ti _) = + case mtrackingcommit of + Nothing -> Just <$> mkcommitsunconnected imported + Just trackingcommit -> do + -- Get history of tracking branch to at most + -- one more level deep than what was imported, + -- so we'll have enough history to compare, + -- but not spend too much time getting it. + let maxdepth = succ importeddepth + inRepo (getHistoryToDepth maxdepth trackingcommit) + >>= go trackingcommit + where + go _ Nothing = Just <$> mkcommitsunconnected imported + go trackingcommit (Just h) + -- If the tracking branch head is a merge commit + -- and one side of the merge matches the history, + -- nothing new needs to be committed. + | t == ti && any sametodepth (S.toList s) = return Nothing + -- If the tracking branch matches the history, + -- nothing new needs to be committed. + -- (This is unlikely to happen.) + | sametodepth h' = return Nothing + -- If the imported tree is unchanged, + -- nothing new needs to be committed. + | otherwise = getLastImportedTree remote >>= \case + Just (LastImportedTree lasttree) + | lasttree == ti -> return Nothing + _ -> gencommit trackingcommit h + where + h'@(History t s) = mapHistory historyCommitTree h + + gencommit trackingcommit h = do + importedcommit <- case getRemoteTrackingBranchImportHistory h of + Nothing -> mkcommitsunconnected imported + Just oldimported@(History oldhc _) + | importeddepth == 1 -> + mkcommitconnected imported oldimported + | otherwise -> do + let oldimportedtrees = mapHistory historyCommitTree oldimported + mknewcommits oldhc oldimportedtrees imported + ti' <- addBackExportExcluded remote ti + Just <$> makeRemoteTrackingBranchMergeCommit' + trackingcommit importedcommit ti' + + importeddepth = historyDepth imported + + sametodepth b = imported == truncateHistoryToDepth importeddepth b + + mkcommit parents tree = inRepo $ Git.Branch.commitTree + (importCommitMode importcommitconfig) + (importCommitMessages importcommitconfig) + parents + tree + + -- Start a new history of import commits, not connected to any + -- prior import commits. + mkcommitsunconnected (History importedtree hs) = do + parents <- mapM mkcommitsunconnected (S.toList hs) + mkcommit parents importedtree + + -- Commit the new history connected with the old history. + -- Used when the import is not versioned, so the history depth is 1. + mkcommitconnected (History importedtree _) (History oldhc _) = do + let parents = [historyCommit oldhc] + mkcommit parents importedtree + + -- Reuse the commits from the old imported History when possible. + mknewcommits oldhc old new@(History importedtree hs) + | old == new = return $ historyCommit oldhc + | otherwise = do + parents <- mapM (mknewcommits oldhc old) (S.toList hs) + mkcommit parents importedtree + +{- Builds a history of git trees for an import. + - + - When a subdir is provided, the imported tree is grafted into + - the basetree at that location, replacing any object that was there. + -} +buildImportTrees + :: Ref + -> Maybe TopFilePath + -> Imported + -> Annex (History Sha) +buildImportTrees basetree msubdir (ImportedFull imported) = + buildImportTreesGeneric convertImportTree basetree msubdir imported +buildImportTrees basetree msubdir (ImportedDiff (LastImportedTree oldtree) imported) = do + importtree <- if null (importableContents imported) + then pure oldtree + else applydiff + repo <- Annex.gitRepo + t <- withMkTreeHandle repo $ + graftImportTree basetree msubdir importtree + -- Diffing is not currently implemented when the history is not empty. + return (History t mempty) + where + applydiff = do + let (removed, new) = partition isremoved + (importableContents imported) + newtreeitems <- catMaybes <$> mapM mktreeitem new + let removedfiles = map (mkloc . fst) removed + inRepo $ adjustTree + (pure . Just) + -- ^ keep files that are not added/removed the same + newtreeitems + (\_oldti newti -> newti) + -- ^ prefer newly added version of file + removedfiles + oldtree + + mktreeitem (loc, DiffChanged v) = + Just <$> mkImportTreeItem msubdir loc v + mktreeitem (_, DiffRemoved) = + pure Nothing + + mkloc = asTopFilePath . fromImportLocation + + isremoved (_, v) = v == DiffRemoved + +convertImportTree :: Maybe TopFilePath -> [(ImportLocation, Either Sha Key)] -> Annex Tree +convertImportTree msubdir ls = + treeItemsToTree <$> mapM (uncurry $ mkImportTreeItem msubdir) ls + +mkImportTreeItem :: Maybe TopFilePath -> ImportLocation -> Either Sha Key -> Annex TreeItem +mkImportTreeItem msubdir loc v = case v of + Right k -> do + relf <- fromRepo $ fromTopFilePath topf + symlink <- calcRepo $ gitAnnexLink relf k + linksha <- hashSymlink symlink + return $ TreeItem treepath (fromTreeItemType TreeSymlink) linksha + Left sha -> + return $ TreeItem treepath (fromTreeItemType TreeFile) sha + where + lf = fromImportLocation loc + treepath = asTopFilePath lf + topf = asTopFilePath $ + maybe lf (\sd -> getTopFilePath sd P. lf) msubdir + +{- Builds a history of git trees using ContentIdentifiers. + - + - These are not the final trees that are generated by the import, which + - use Keys. The purpose of these trees is to allow quickly determining + - which files in the import have changed, and which are unchanged, to + - avoid needing to look up the Keys for unchanged ContentIdentifiers. + - When the import has a large number of files, that can be slow. + -} +buildContentIdentifierTree + :: ImportableContentsChunkable Annex (ContentIdentifier, ByteSize) + -> Annex (History Sha, M.Map Sha (ContentIdentifier, ByteSize)) +buildContentIdentifierTree importable = do + mv <- liftIO $ newTVarIO M.empty + r <- buildImportTreesGeneric (convertContentIdentifierTree mv) emptyTree Nothing importable + m <- liftIO $ atomically $ readTVar mv + return (r, m) + +{- For speed, and to avoid bloating the repository, the ContentIdentifiers + - are not actually checked into git, instead a sha1 hash is calculated + - internally. + -} +convertContentIdentifierTree + :: TVar (M.Map Sha (ContentIdentifier, ByteSize)) + -> Maybe TopFilePath + -> [(ImportLocation, (ContentIdentifier, ByteSize))] + -> Annex Tree +convertContentIdentifierTree mv _ ls = do + let (tis, ml) = unzip (map mktreeitem ls) + liftIO $ atomically $ modifyTVar' mv $ + M.union (M.fromList ml) + return (treeItemsToTree tis) + where + mktreeitem (loc, v@((ContentIdentifier cid), _sz)) = + (TreeItem p mode sha1, (sha1, v)) + where + p = asTopFilePath (fromImportLocation loc) + mode = fromTreeItemType TreeFile + -- Note that this hardcodes sha1, even if git has started + -- defaulting to some other checksum method. That should be + -- ok, hopefully. This checksum never needs to be verified + -- by git, which is why this does not bother to prefix the + -- cid with its length, like git would. + sha1 = Ref $ BA.convertToBase BA.Base16 $ sha1s cid + +buildImportTreesGeneric + :: (Maybe TopFilePath -> [(ImportLocation, v)] -> Annex Tree) + -> Ref + -> Maybe TopFilePath + -> ImportableContentsChunkable Annex v + -> Annex (History Sha) +buildImportTreesGeneric converttree basetree msubdir (ImportableContentsComplete importable) = do + repo <- Annex.gitRepo + withMkTreeHandle repo $ buildImportTreesGeneric' converttree basetree msubdir importable +buildImportTreesGeneric converttree basetree msubdir importable@(ImportableContentsChunked {}) = do + repo <- Annex.gitRepo + withMkTreeHandle repo $ \hdl -> + History + <$> go hdl + <*> buildImportTreesHistory converttree basetree msubdir + (importableHistoryComplete importable) hdl + where + go hdl = do + tree <- gochunks [] (importableContentsChunk importable) hdl + importtree <- liftIO $ recordTree' hdl tree + graftImportTree basetree msubdir importtree hdl + + gochunks l c hdl = do + let subdir = importChunkSubDir $ importableContentsSubDir c + -- Full directory prefix where the sub tree is located. + let fullprefix = asTopFilePath $ case msubdir of + Nothing -> subdir + Just d -> getTopFilePath d Posix. subdir + Tree ts <- converttree (Just fullprefix) $ + map (\(p, i) -> (mkImportLocation p, i)) + (importableContentsSubTree c) + -- Record this subtree before getting next chunk, this + -- avoids buffering all the chunks into memory. + tc <- liftIO $ recordSubTree hdl $ + NewSubTree (asTopFilePath subdir) ts + importableContentsNextChunk c >>= \case + Nothing -> return (Tree (tc:l)) + Just c' -> gochunks (tc:l) c' hdl + +buildImportTreesGeneric' + :: (Maybe TopFilePath -> [(ImportLocation, v)] -> Annex Tree) + -> Ref + -> Maybe TopFilePath + -> ImportableContents v + -> MkTreeHandle + -> Annex (History Sha) +buildImportTreesGeneric' converttree basetree msubdir importable hdl = History + <$> buildImportTree converttree basetree msubdir (importableContents importable) hdl + <*> buildImportTreesHistory converttree basetree msubdir (importableHistory importable) hdl + +buildImportTree + :: (Maybe TopFilePath -> [(ImportLocation, v)] -> Annex Tree) + -> Ref + -> Maybe TopFilePath + -> [(ImportLocation, v)] + -> MkTreeHandle + -> Annex Sha +buildImportTree converttree basetree msubdir ls hdl = do + importtree <- liftIO . recordTree' hdl =<< converttree msubdir ls + graftImportTree basetree msubdir importtree hdl + +graftImportTree + :: Ref + -> Maybe TopFilePath + -> Sha + -> MkTreeHandle + -> Annex Sha +graftImportTree basetree msubdir tree hdl = case msubdir of + Nothing -> return tree + Just subdir -> inRepo $ \repo -> + graftTree' tree subdir basetree repo hdl + +buildImportTreesHistory + :: (Maybe TopFilePath -> [(ImportLocation, v)] -> Annex Tree) + -> Ref + -> Maybe TopFilePath + -> [ImportableContents v] + -> MkTreeHandle + -> Annex (S.Set (History Sha)) +buildImportTreesHistory converttree basetree msubdir history hdl = S.fromList + <$> mapM (\ic -> buildImportTreesGeneric' converttree basetree msubdir ic hdl) history + +canImportKeys :: Remote -> Bool -> Bool +canImportKeys remote importcontent = + importcontent || isJust (Remote.importKey ia) + where + ia = Remote.importActions remote + +-- Result of an import. ImportUnfinished indicates that some file failed to +-- be imported. Running again should resume where it left off. +data ImportResult t + = ImportFinished t + | ImportUnfinished + +data Diffed t + = DiffChanged t + | DiffRemoved + deriving (Eq) + +data Imported + = ImportedFull (ImportableContentsChunkable Annex (Either Sha Key)) + | ImportedDiff LastImportedTree (ImportableContents (Diffed (Either Sha Key))) + +newtype LastImportedTree = LastImportedTree Sha + +{- Diffs between the previous and current ContentIdentifier trees, and + - runs importKeys on only the changed files. + - + - This will download the same content as if importKeys were run on all + - files, but this speeds it up significantly when there are a lot of files + - and only a few have changed. importKeys has to look up each + - ContentIdentifier to see if a Key is known for it. This avoids doing + - that lookup on files that have not changed. + - + - Diffing is not currently implemented when there is a History. + -} +importChanges + :: Remote + -> ImportTreeConfig + -> Bool + -> Bool + -> ImportableContentsChunkable Annex (ContentIdentifier, ByteSize) + -> Annex (ImportResult Imported) +importChanges remote importtreeconfig importcontent thirdpartypopulated importablecontents = do + ((History currcidtree currhistory), cidtreemap) <- buildContentIdentifierTree importablecontents + -- diffimport below does not handle history, so when there is + -- history, do a full import. + if not (S.null currhistory) + then fullimport currcidtree + else do + getContentIdentifierTree (Remote.uuid remote) >>= \case + Nothing -> fullimport currcidtree + Just prevcidtree -> candiffimport prevcidtree >>= \case + Nothing -> fullimport currcidtree + Just lastimportedtree -> diffimport cidtreemap prevcidtree currcidtree lastimportedtree + where + remember = recordContentIdentifierTree (Remote.uuid remote) + + -- In order to use a diff, the previous ContentIdentifier tree must + -- not have been garbage collected. Which can happen since there + -- are no git refs to it. + -- + -- Also, a tree must have been imported before, and that tree must + -- also have not been garbage collected (which is less likely to + -- happen due to the remote tracking branch). + candiffimport prevcidtree = + catObjectMetaData prevcidtree >>= \case + Nothing -> return Nothing + Just _ -> getLastImportedTree remote >>= \case + Nothing -> return Nothing + Just lastimported@(LastImportedTree t) -> + ifM (isJust <$> catObjectMetaData t) + ( return (Just lastimported) + , return Nothing + ) + + fullimport currcidtree = + importKeys remote importtreeconfig importcontent thirdpartypopulated importablecontents >>= \case + ImportUnfinished -> return ImportUnfinished + ImportFinished r -> do + remember currcidtree + return $ ImportFinished $ ImportedFull r + + diffimport cidtreemap prevcidtree currcidtree lastimportedtree = do + (diff, cleanup) <- inRepo $ Git.DiffTree.diffTreeRecursive + prevcidtree + currcidtree + let (removed, changed) = partition isremoval diff + let mkicchanged ti = do + v <- M.lookup (Git.DiffTree.dstsha ti) cidtreemap + return (mkloc ti, v) + let ic = ImportableContentsComplete $ ImportableContents + { importableContents = mapMaybe mkicchanged changed + , importableHistory = [] + } + importKeys remote importtreeconfig importcontent thirdpartypopulated ic >>= \case + ImportUnfinished -> do + void $ liftIO cleanup + return ImportUnfinished + ImportFinished (ImportableContentsComplete ic') -> + liftIO cleanup >>= \case + False -> return ImportUnfinished + True -> do + remember currcidtree + return $ ImportFinished $ + ImportedDiff lastimportedtree + (mkdiff ic' removed) + -- importKeys is not passed ImportableContentsChunked + -- above, so it cannot return it + ImportFinished (ImportableContentsChunked {}) -> error "internal" + + isremoval ti = Git.DiffTree.dstsha ti `elem` nullShas + + mkloc = mkImportLocation . getTopFilePath . Git.DiffTree.file + + mkdiff ic removed = ImportableContents + { importableContents = diffremoved ++ diffchanged + , importableHistory = [] + } + where + diffchanged = map + (\(loc, v) -> (loc, DiffChanged v)) + (importableContents ic) + diffremoved = map + (\ti -> (mkloc ti, DiffRemoved)) + removed + +{- Gets the tree that was last imported from the remote + - (or exported to it if an export happened after the last import). + -} +getLastImportedTree :: Remote -> Annex (Maybe LastImportedTree) +getLastImportedTree remote = do + db <- Export.openDb (Remote.uuid remote) + mtree <- liftIO $ Export.getExportTreeCurrent db + Export.closeDb db + return (LastImportedTree <$> mtree) + +{- Downloads all new ContentIdentifiers, or when importcontent is False, + - generates Keys without downloading. + - + - Generates either a Key or a git Sha, depending on annex.largefiles. + - But when importcontent is False, it cannot match on annex.largefiles + - (or generate a git Sha), so always generates Keys. + - + - Supports concurrency when enabled. + - + - Note that, when a ContentIdentifier has been imported before, + - generates the same thing that was imported before, so annex.largefiles + - is not reapplied. + -} +importKeys + :: Remote + -> ImportTreeConfig + -> Bool + -> Bool + -> ImportableContentsChunkable Annex (ContentIdentifier, ByteSize) + -> Annex (ImportResult (ImportableContentsChunkable Annex (Either Sha Key))) +importKeys remote importtreeconfig importcontent thirdpartypopulated importablecontents = do + unless (canImportKeys remote importcontent) $ + giveup "This remote does not support importing without downloading content." + -- This map is used to remember content identifiers that + -- were just imported, before they have necessarily been + -- stored in the database. This way, if the same content + -- identifier appears multiple times in the + -- importablecontents (eg when it has a history), + -- they will only be imported once. + cidmap <- liftIO $ newTVarIO M.empty + -- When concurrency is enabled, this set is needed to + -- avoid two threads both importing the same content identifier. + importing <- liftIO $ newTVarIO S.empty + withciddb $ \db -> do + db' <- CIDDb.needsUpdateFromLog db + >>= maybe (pure db) (CIDDb.updateFromLog db) + (prepclock (run cidmap importing db')) + where + -- When not importing content, reuse the same vector + -- clock for all state that's recorded. This can save + -- a little bit of disk space. Individual file downloads + -- while downloading take too long for this optimisation + -- to be safe to do. + prepclock a + | importcontent = a + | otherwise = reuseVectorClockWhile a + + withciddb a = do + cidlck <- calcRepo' gitAnnexContentIdentifierLock + withExclusiveLock cidlck $ + bracket CIDDb.openDb CIDDb.closeDb a + + run cidmap importing db = do + largematcher <- largeFilesMatcher + case importablecontents of + ImportableContentsComplete ic -> + go False largematcher cidmap importing db ic >>= return . \case + Nothing -> ImportUnfinished + Just v -> ImportFinished $ ImportableContentsComplete v + ImportableContentsChunked {} -> do + c <- gochunked db (importableContentsChunk importablecontents) + gohistory largematcher cidmap importing db (importableHistoryComplete importablecontents) >>= return . \case + Nothing -> ImportUnfinished + Just h -> ImportFinished $ ImportableContentsChunked + { importableContentsChunk = c + , importableHistoryComplete = h + } + + go oldversion largematcher cidmap importing db (ImportableContents l h) = do + jobs <- forM l $ \i -> + if thirdpartypopulated + then Left <$> thirdpartypopulatedimport db i + else startimport cidmap importing db i oldversion largematcher + l' <- liftIO $ forM jobs $ + either pure (atomically . takeTMVar) + if any isNothing l' + then return Nothing + else gohistory largematcher cidmap importing db h >>= return . \case + Nothing -> Nothing + Just h' -> Just $ ImportableContents (catMaybes l') h' + + gohistory largematcher cidmap importing db h = do + h' <- mapM (go True largematcher cidmap importing db) h + if any isNothing h' + then return Nothing + else return $ Just $ catMaybes h' + + gochunked db c + -- Downloading cannot be done when chunked, since only + -- the first chunk is processed before returning. + | importcontent = giveup "importKeys does not support downloading chunked import" + -- Chunked import is currently only used by thirdpartypopulated + -- remotes. + | not thirdpartypopulated = giveup "importKeys does not support chunked import when not thirdpartypopulated" + | otherwise = do + l <- forM (importableContentsSubTree c) $ \(loc, i) -> do + let loc' = importableContentsChunkFullLocation (importableContentsSubDir c) loc + thirdpartypopulatedimport db (loc', i) >>= return . \case + Just (_loc, k) -> Just (loc, k) + Nothing -> Nothing + return $ ImportableContentsChunk + { importableContentsSubDir = importableContentsSubDir c + , importableContentsSubTree = catMaybes l + , importableContentsNextChunk = + importableContentsNextChunk c >>= \case + Nothing -> return Nothing + Just c' -> withciddb $ \db' -> + prepclock $ + Just <$> gochunked db' c' + } + + waitstart importing cid = liftIO $ atomically $ do + s <- readTVar importing + if S.member cid s + then retry + else writeTVar importing $ S.insert cid s + + signaldone importing cid = liftIO $ atomically $ do + s <- readTVar importing + writeTVar importing $ S.delete cid s + + startimport cidmap importing db i@(loc, (cid, _sz)) oldversion largematcher = getcidkey cidmap db cid >>= \case + (k:ks) -> + -- If the same content was imported before + -- yielding multiple different keys, it's not clear + -- which is best to use this time, so pick the + -- first in the list. But, if any of them is a + -- git sha, use it, because the content must + -- be included in the git repo then. + let v = case mapMaybe keyGitSha (k:ks) of + (sha:_) -> Left sha + [] -> Right k + in return $ Left $ Just (loc, v) + [] -> do + job <- liftIO $ newEmptyTMVarIO + let ai = ActionItemOther (Just (QuotedPath (fromImportLocation loc))) + let si = SeekInput [] + let importaction = starting ("import " ++ Remote.name remote) ai si $ do + when oldversion $ + showNote "old version" + tryNonAsync (importordownload cidmap i largematcher) >>= \case + Left e -> next $ do + warning (UnquotedString (show e)) + liftIO $ atomically $ + putTMVar job Nothing + return False + Right r -> next $ do + liftIO $ atomically $ + putTMVar job r + return True + commandAction $ bracket_ + (waitstart importing cid) + (signaldone importing cid) + importaction + return (Right job) + + thirdpartypopulatedimport db (loc, (cid, sz)) = + case Remote.importKey ia of + Nothing -> return Nothing + Just importkey -> + tryNonAsync (importkey loc cid sz nullMeterUpdate) >>= \case + Right (Just k) -> do + recordcidkeyindb db cid k + logChange k (Remote.uuid remote) InfoPresent + return $ Just (loc, Right k) + Right Nothing -> return Nothing + Left e -> do + warning (UnquotedString (show e)) + return Nothing + + importordownload cidmap (loc, (cid, sz)) largematcher = do + f <- locworktreefile loc + matcher <- largematcher f + -- When importing a key is supported, always use it rather + -- than downloading and retrieving a key, to avoid + -- generating trees with different keys for the same content. + let act = if importcontent + then case Remote.importKey ia of + Nothing -> dodownload + Just _ -> if Utility.Matcher.introspect matchNeedsFileContent (fst matcher) + then dodownload + else doimport + else doimport + act cidmap (loc, (cid, sz)) f matcher + + doimport cidmap (loc, (cid, sz)) f matcher = + case Remote.importKey ia of + Nothing -> error "internal" -- checked earlier + Just importkey -> do + when (Utility.Matcher.introspect matchNeedsFileContent (fst matcher)) $ + giveup "annex.largefiles configuration examines file contents, so cannot import without content." + let mi = MatchingInfo ProvidedInfo + { providedFilePath = Just f + , providedKey = Nothing + , providedFileSize = Just sz + , providedMimeType = Nothing + , providedMimeEncoding = Nothing + , providedLinkType = Nothing + } + islargefile <- checkMatcher' matcher mi mempty + metered Nothing sz bwlimit $ const $ if islargefile + then doimportlarge importkey cidmap loc cid sz f + else doimportsmall cidmap loc cid sz + + doimportlarge importkey cidmap loc cid sz f p = + tryNonAsync importer >>= \case + Right (Just (k, True)) -> return $ Just (loc, Right k) + Right _ -> return Nothing + Left e -> do + warning (UnquotedString (show e)) + return Nothing + where + importer = do + -- Don't display progress when generating + -- key, if the content will later be + -- downloaded, which is a more expensive + -- operation generally. + let p' = if importcontent then nullMeterUpdate else p + importkey loc cid sz p' >>= \case + Nothing -> return Nothing + Just k -> checkSecureHashes k >>= \case + Nothing -> do + recordcidkey cidmap cid k + logChange k (Remote.uuid remote) InfoPresent + if importcontent + then getcontent k + else return (Just (k, True)) + Just msg -> giveup (msg ++ " to import") + + getcontent :: Key -> Annex (Maybe (Key, Bool)) + getcontent k = do + let af = AssociatedFile (Just f) + let downloader p' tmpfile = do + _ <- Remote.retrieveExportWithContentIdentifier + ia loc [cid] (fromRawFilePath tmpfile) + (Left k) + (combineMeterUpdate p' p) + ok <- moveAnnex k af tmpfile + when ok $ + logStatus k InfoPresent + return (Just (k, ok)) + checkDiskSpaceToGet k Nothing Nothing $ + notifyTransfer Download af $ + download' (Remote.uuid remote) k af Nothing stdRetry $ \p' -> + withTmp k $ downloader p' + + -- The file is small, so is added to git, so while importing + -- without content does not retrieve annexed files, it does + -- need to retrieve this file. + doimportsmall cidmap loc cid sz p = do + let downloader tmpfile = do + (k, _) <- Remote.retrieveExportWithContentIdentifier + ia loc [cid] (fromRawFilePath tmpfile) + (Right (mkkey tmpfile)) + p + case keyGitSha k of + Just sha -> do + recordcidkey cidmap cid k + return sha + Nothing -> error "internal" + checkDiskSpaceToGet tmpkey Nothing Nothing $ + withTmp tmpkey $ \tmpfile -> + tryNonAsync (downloader tmpfile) >>= \case + Right sha -> return $ Just (loc, Left sha) + Left e -> do + warning (UnquotedString (show e)) + return Nothing + where + tmpkey = importKey cid sz + mkkey tmpfile = gitShaKey <$> hashFile tmpfile + + dodownload cidmap (loc, (cid, sz)) f matcher = do + let af = AssociatedFile (Just f) + let downloader tmpfile p = do + (k, _) <- Remote.retrieveExportWithContentIdentifier + ia loc [cid] (fromRawFilePath tmpfile) + (Right (mkkey tmpfile)) + p + case keyGitSha k of + Nothing -> do + ok <- moveAnnex k af tmpfile + when ok $ do + recordcidkey cidmap cid k + logStatus k InfoPresent + logChange k (Remote.uuid remote) InfoPresent + return (Right k, ok) + Just sha -> do + recordcidkey cidmap cid k + return (Left sha, True) + let rundownload tmpfile p = tryNonAsync (downloader tmpfile p) >>= \case + Right (v, True) -> return $ Just (loc, v) + Right (_, False) -> return Nothing + Left e -> do + warning (UnquotedString (show e)) + return Nothing + checkDiskSpaceToGet tmpkey Nothing Nothing $ + notifyTransfer Download af $ + download' (Remote.uuid remote) tmpkey af Nothing stdRetry $ \p -> + withTmp tmpkey $ \tmpfile -> + metered (Just p) tmpkey bwlimit $ + const (rundownload tmpfile) + where + tmpkey = importKey cid sz + + mkkey tmpfile = do + let mi = MatchingFile FileInfo + { matchFile = f + , contentFile = tmpfile + , matchKey = Nothing + } + islargefile <- checkMatcher' matcher mi mempty + if islargefile + then do + backend <- chooseBackend f + let ks = KeySource + { keyFilename = f + , contentLocation = tmpfile + , inodeCache = Nothing + } + fst <$> genKey ks nullMeterUpdate backend + else gitShaKey <$> hashFile tmpfile + + ia = Remote.importActions remote + + bwlimit = remoteAnnexBwLimitDownload (Remote.gitconfig remote) + <|> remoteAnnexBwLimit (Remote.gitconfig remote) + + locworktreefile loc = fromRepo $ fromTopFilePath $ asTopFilePath $ + case importtreeconfig of + ImportTree -> fromImportLocation loc + ImportSubTree subdir _ -> + getTopFilePath subdir P. fromImportLocation loc + + getcidkey cidmap db cid = liftIO $ + -- Avoiding querying the database when it's empty speeds up + -- the initial import. + if CIDDb.databaseIsEmpty db + then getcidkeymap cidmap cid + else CIDDb.getContentIdentifierKeys db rs cid >>= \case + [] -> getcidkeymap cidmap cid + l -> return l + + getcidkeymap cidmap cid = + atomically $ maybeToList . M.lookup cid <$> readTVar cidmap + + recordcidkey cidmap cid k = do + liftIO $ atomically $ modifyTVar' cidmap $ + M.insert cid k + -- Only record in log now; the database will be updated + -- later from the log, and the cidmap will be used for now. + recordcidkeyinlog cid k + + recordcidkeyindb db cid k = do + liftIO $ CIDDb.recordContentIdentifier db rs cid k + recordcidkeyinlog cid k + + recordcidkeyinlog cid k = + CIDLog.recordContentIdentifier rs cid k + + rs = Remote.remoteStateHandle remote + +{- Temporary key used for import of a ContentIdentifier while downloading + - content, before generating its real key. -} +importKey :: ContentIdentifier -> Integer -> Key +importKey (ContentIdentifier cid) size = mkKey $ \k -> k + { keyName = genKeyName (decodeBS cid) + , keyVariety = OtherKey "CID" + , keySize = Just size + } + +{-- Export omits non-preferred content from the tree stored on the + -- remote. So the import will normally have that content + -- omitted (unless something else added files with the same names to the + -- special remote). + -- + -- That presents a problem: Merging the imported tree would result + -- in deletion of the files that were excluded from export. + -- To avoid that happening, this adds them back to the imported tree. + --} +addBackExportExcluded :: Remote -> Sha -> Annex Sha +addBackExportExcluded remote importtree = + getExportExcluded (Remote.uuid remote) >>= \case + [] -> return importtree + excludedlist -> inRepo $ + adjustTree + -- don't remove any + (pure . Just) + excludedlist + -- if something was imported with the same + -- name as a file that was previously + -- excluded from import, use what was imported + (\imported _excluded -> imported) + [] + importtree + +{- Match the preferred content of the remote at import time. + - + - Only keyless tokens are supported, because the keys are not known + - until an imported file is downloaded, which is too late to bother + - excluding it from an import. So prunes any tokens in the preferred + - content expression that need keys. + -} +makeImportMatcher :: Remote -> Annex (Either String (FileMatcher Annex)) +makeImportMatcher r = load preferredContentTokens >>= \case + Nothing -> return $ Right (matchAll, matcherdesc) + Just (Right v) -> return $ Right (v, matcherdesc) + Just (Left err) -> return $ Left err + where + load t = M.lookup (Remote.uuid r) . fst + <$> preferredRequiredMapsLoad' pruneImportMatcher t + matcherdesc = MatcherDesc "preferred content" + +pruneImportMatcher :: Utility.Matcher.Matcher (MatchFiles a) -> Utility.Matcher.Matcher (MatchFiles a) +pruneImportMatcher = Utility.Matcher.pruneMatcher matchNeedsKey + +{- Gets the ImportableContents from the remote. + - + - Filters out any paths that include a ".git" component, because git does + - not allow storing ".git" in a git repository. While it is possible to + - write a git tree that contains that, git will complain and refuse to + - check it out. + - + - Filters out new things not matching the FileMatcher or that are + - gitignored. However, files that are already in git get imported + - regardless. (Similar to how git add behaves on gitignored files.) + - This avoids creating a remote tracking branch that, when merged, + - would delete the files. + - + - Throws exception if unable to contact the remote. + - Returns Nothing when there is no change since last time. + -} +getImportableContents :: Remote -> ImportTreeConfig -> CheckGitIgnore -> FileMatcher Annex -> Annex (Maybe (ImportableContentsChunkable Annex (ContentIdentifier, ByteSize))) +getImportableContents r importtreeconfig ci matcher = do + Remote.listImportableContents (Remote.importActions r) >>= \case + Just (ImportableContentsComplete ic) -> do + dbhandle <- opendbhandle + Just . ImportableContentsComplete + <$> filterunwanted dbhandle ic + Just (c@(ImportableContentsChunked {})) -> do + dbhandle <- opendbhandle + Just <$> filterunwantedchunked dbhandle c + Nothing -> return Nothing + where + filterunwanted dbhandle ic = ImportableContents + <$> filterM (wanted dbhandle) (importableContents ic) + <*> mapM (filterunwanted dbhandle) (importableHistory ic) + + filterunwantedchunked dbhandle c = ImportableContentsChunked + <$> filterunwantedchunk dbhandle (importableContentsChunk c) + <*> mapM (filterunwanted dbhandle) (importableHistoryComplete c) + + filterunwantedchunk dbhandle c = ImportableContentsChunk + <$> pure (importableContentsSubDir c) + <*> filterM (wantedunder dbhandle (importableContentsSubDir c)) + (importableContentsSubTree c) + <*> pure ( + importableContentsNextChunk c >>= \case + Nothing -> return Nothing + Just c' -> Just <$> filterunwantedchunk dbhandle c' + ) + + opendbhandle = do + h <- Export.openDb (Remote.uuid r) + void $ Export.updateExportTreeFromLog h + return h + + wanted dbhandle (loc, (_cid, sz)) + | ingitdir = pure False + | otherwise = + isknown <||> (matches <&&> notignored) + where + -- Checks, from least to most expensive. + ingitdir = ".git" `elem` Posix.splitDirectories (fromImportLocation loc) + matches = matchesImportLocation matcher loc sz + isknown = isKnownImportLocation dbhandle loc + notignored = notIgnoredImportLocation importtreeconfig ci loc + + wantedunder dbhandle root (loc, v) = + wanted dbhandle (importableContentsChunkFullLocation root loc, v) + +isKnownImportLocation :: Export.ExportHandle -> ImportLocation -> Annex Bool +isKnownImportLocation dbhandle loc = liftIO $ + not . null <$> Export.getExportTreeKey dbhandle loc + +matchesImportLocation :: FileMatcher Annex -> ImportLocation -> Integer -> Annex Bool +matchesImportLocation matcher loc sz = checkMatcher' matcher mi mempty + where + mi = MatchingInfo $ ProvidedInfo + { providedFilePath = Just (fromImportLocation loc) + , providedKey = Nothing + , providedFileSize = Just sz + , providedMimeType = Nothing + , providedMimeEncoding = Nothing + , providedLinkType = Nothing + } + +notIgnoredImportLocation :: ImportTreeConfig -> CheckGitIgnore -> ImportLocation -> Annex Bool +notIgnoredImportLocation importtreeconfig ci loc = not <$> checkIgnored ci f + where + f = case importtreeconfig of + ImportSubTree dir _ -> + getTopFilePath dir P. fromImportLocation loc + ImportTree -> + fromImportLocation loc diff --git a/Annex/Ingest.hs b/Annex/Ingest.hs new file mode 100644 index 0000000000..1ef4d346b9 --- /dev/null +++ b/Annex/Ingest.hs @@ -0,0 +1,425 @@ +{- git-annex content ingestion + - + - Copyright 2010-2022 Joey Hess + - + - Licensed under the GNU AGPL version 3 or higher. + -} + +{-# LANGUAGE OverloadedStrings #-} + +module Annex.Ingest ( + LockedDown(..), + LockDownConfig(..), + lockDown, + checkLockedDownWritePerms, + ingestAdd, + ingestAdd', + ingest, + ingest', + finishIngestUnlocked, + cleanOldKeys, + addSymlink, + genSymlink, + makeLink, + addUnlocked, + CheckGitIgnore(..), + gitAddParams, + addAnnexedFile, + addingExistingLink, +) where + +import Annex.Common +import Types.KeySource +import Types.FileMatcher +import Backend +import Annex.Content +import Annex.Perms +import Annex.Link +import Annex.MetaData +import Annex.CurrentBranch +import Annex.CheckIgnore +import Logs.Location +import qualified Git +import qualified Annex +import qualified Database.Keys +import Config +import Utility.InodeCache +import Annex.ReplaceFile +import Utility.Tmp +import Utility.CopyFile +import Utility.Touch +import Utility.Metered +import Git.FilePath +import Annex.InodeSentinal +import Annex.AdjustedBranch +import Annex.FileMatcher +import qualified Utility.RawFilePath as R + +import System.PosixCompat.Files (fileMode) + +data LockedDown = LockedDown + { lockDownConfig :: LockDownConfig + , keySource :: KeySource + } + deriving (Show) + +data LockDownConfig = LockDownConfig + { lockingFile :: Bool + -- ^ write bit removed during lock down + , hardlinkFileTmpDir :: Maybe RawFilePath + -- ^ hard link to temp directory + , checkWritePerms :: Bool + -- ^ check that write perms are successfully removed + } + deriving (Show) + +{- The file that's being ingested is locked down before a key is generated, + - to prevent it from being modified in between. This lock down is not + - perfect at best (and pretty weak at worst). For example, it does not + - guard against files that are already opened for write by another process. + - So, the InodeCache can be used to detect any changes that might be made + - to the file after it was locked down. + - + - When possible, the file is hard linked to a temp directory. This guards + - against some changes, like deletion or overwrite of the file, and + - allows lsof checks to be done more efficiently when adding a lot of files. + - + - Lockdown can fail if a file gets deleted, or if it's unable to remove + - write permissions, and Nothing will be returned. + -} +lockDown :: LockDownConfig-> FilePath -> Annex (Maybe LockedDown) +lockDown cfg file = either + (\e -> warning (UnquotedString (show e)) >> return Nothing) + (return . Just) + =<< lockDown' cfg file + +lockDown' :: LockDownConfig -> FilePath -> Annex (Either SomeException LockedDown) +lockDown' cfg file = tryNonAsync $ ifM crippledFileSystem + ( nohardlink + , case hardlinkFileTmpDir cfg of + Nothing -> nohardlink + Just tmpdir -> withhardlink tmpdir + ) + where + file' = toRawFilePath file + + nohardlink = do + setperms + withTSDelta $ liftIO . nohardlink' + + nohardlink' delta = do + cache <- genInodeCache file' delta + return $ LockedDown cfg $ KeySource + { keyFilename = file' + , contentLocation = file' + , inodeCache = cache + } + + withhardlink tmpdir = do + setperms + withTSDelta $ \delta -> liftIO $ do + (tmpfile, h) <- openTmpFileIn (fromRawFilePath tmpdir) $ + relatedTemplate $ "ingest-" ++ takeFileName file + hClose h + removeWhenExistsWith R.removeLink (toRawFilePath tmpfile) + withhardlink' delta tmpfile + `catchIO` const (nohardlink' delta) + + withhardlink' delta tmpfile = do + let tmpfile' = toRawFilePath tmpfile + R.createLink file' tmpfile' + cache <- genInodeCache tmpfile' delta + return $ LockedDown cfg $ KeySource + { keyFilename = file' + , contentLocation = tmpfile' + , inodeCache = cache + } + + setperms = when (lockingFile cfg) $ do + freezeContent file' + when (checkWritePerms cfg) $ do + qp <- coreQuotePath <$> Annex.getGitConfig + maybe noop (giveup . decodeBS . quote qp) + =<< checkLockedDownWritePerms file' file' + +checkLockedDownWritePerms :: RawFilePath -> RawFilePath -> Annex (Maybe StringContainingQuotedPath) +checkLockedDownWritePerms file displayfile = checkContentWritePerm file >>= return . \case + Just False -> Just $ "Unable to remove all write permissions from " + <> QuotedPath displayfile + <> " -- perhaps it has an xattr or ACL set." + _ -> Nothing + +{- Ingests a locked down file into the annex. Updates the work tree and + - index. -} +ingestAdd :: MeterUpdate -> Maybe LockedDown -> Annex (Maybe Key) +ingestAdd meterupdate ld = ingestAdd' meterupdate ld Nothing + +ingestAdd' :: MeterUpdate -> Maybe LockedDown -> Maybe Key -> Annex (Maybe Key) +ingestAdd' _ Nothing _ = return Nothing +ingestAdd' meterupdate ld@(Just (LockedDown cfg source)) mk = do + (mk', mic) <- ingest meterupdate ld mk + case mk' of + Nothing -> return Nothing + Just k -> do + let f = keyFilename source + if lockingFile cfg + then addSymlink f k mic + else do + mode <- liftIO $ catchMaybeIO $ + fileMode <$> R.getFileStatus (contentLocation source) + stagePointerFile f mode =<< hashPointerFile k + return (Just k) + +{- Ingests a locked down file into the annex. Does not update the working + - tree or the index. -} +ingest :: MeterUpdate -> Maybe LockedDown -> Maybe Key -> Annex (Maybe Key, Maybe InodeCache) +ingest meterupdate ld mk = ingest' Nothing meterupdate ld mk (Restage True) + +ingest' :: Maybe Backend -> MeterUpdate -> Maybe LockedDown -> Maybe Key -> Restage -> Annex (Maybe Key, Maybe InodeCache) +ingest' _ _ Nothing _ _ = return (Nothing, Nothing) +ingest' preferredbackend meterupdate (Just (LockedDown cfg source)) mk restage = withTSDelta $ \delta -> do + k <- case mk of + Nothing -> do + backend <- maybe + (chooseBackend $ keyFilename source) + return + preferredbackend + fst <$> genKey source meterupdate backend + Just k -> return k + let src = contentLocation source + ms <- liftIO $ catchMaybeIO $ R.getFileStatus src + mcache <- maybe (pure Nothing) (liftIO . toInodeCache delta src) ms + case (mcache, inodeCache source) of + (_, Nothing) -> go k mcache + (Just newc, Just c) | compareStrong c newc -> go k mcache + _ -> failure "changed while it was being added" + where + go key mcache + | lockingFile cfg = golocked key mcache + | otherwise = gounlocked key mcache + + golocked key mcache = + tryNonAsync (moveAnnex key naf (contentLocation source)) >>= \case + Right True -> success key mcache + Right False -> giveup "failed to add content to annex" + Left e -> restoreFile (keyFilename source) key e + + -- moveAnnex uses the AssociatedFile provided to it to unlock + -- locked files when getting a file in an adjusted branch. + -- That case does not apply here, where we're adding an unlocked + -- file, so provide it nothing. + naf = AssociatedFile Nothing + + gounlocked key (Just cache) = do + -- Remove temp directory hard link first because + -- linkToAnnex falls back to copying if a file + -- already has a hard link. + cleanCruft source + cleanOldKeys (keyFilename source) key + linkToAnnex key (keyFilename source) (Just cache) >>= \case + LinkAnnexFailed -> failure "failed to link to annex" + lar -> do + finishIngestUnlocked' key source restage (Just lar) + success key (Just cache) + gounlocked _ _ = failure "failed statting file" + + success k mcache = do + genMetaData k (keyFilename source) (fmap inodeCacheToMtime mcache) + return (Just k, mcache) + + failure msg = do + warning $ QuotedPath (keyFilename source) <> " " <> UnquotedString msg + cleanCruft source + return (Nothing, Nothing) + +finishIngestUnlocked :: Key -> KeySource -> Annex () +finishIngestUnlocked key source = do + cleanCruft source + finishIngestUnlocked' key source (Restage True) Nothing + +finishIngestUnlocked' :: Key -> KeySource -> Restage -> Maybe LinkAnnexResult -> Annex () +finishIngestUnlocked' key source restage lar = do + Database.Keys.addAssociatedFile key + =<< inRepo (toTopFilePath (keyFilename source)) + populateUnlockedFiles key source restage lar + +{- Copy to any other unlocked files using the same key. + - + - When linkToAnnex did not have to do anything, the object file + - was already present, and so other unlocked files are already populated, + - and nothing needs to be done here. + -} +populateUnlockedFiles :: Key -> KeySource -> Restage -> Maybe LinkAnnexResult -> Annex () +populateUnlockedFiles _ _ _ (Just LinkAnnexNoop) = return () +populateUnlockedFiles key source restage _ = do + obj <- calcRepo (gitAnnexLocation key) + g <- Annex.gitRepo + ingestedf <- flip fromTopFilePath g + <$> inRepo (toTopFilePath (keyFilename source)) + afs <- map (`fromTopFilePath` g) <$> Database.Keys.getAssociatedFiles key + forM_ (filter (/= ingestedf) afs) $ + populatePointerFile restage key obj + +cleanCruft :: KeySource -> Annex () +cleanCruft source = when (contentLocation source /= keyFilename source) $ + liftIO $ removeWhenExistsWith R.removeLink $ contentLocation source + +-- If a worktree file was was hard linked to an annex object before, +-- modifying the file would have caused the object to have the wrong +-- content. Clean up from that. +cleanOldKeys :: RawFilePath -> Key -> Annex () +cleanOldKeys file newkey = do + g <- Annex.gitRepo + topf <- inRepo (toTopFilePath file) + ingestedf <- fromRepo $ fromTopFilePath topf + oldkeys <- filter (/= newkey) + <$> Database.Keys.getAssociatedKey topf + forM_ oldkeys $ \key -> + unlessM (isUnmodified key =<< calcRepo (gitAnnexLocation key)) $ do + caches <- Database.Keys.getInodeCaches key + unlinkAnnex key + fs <- filter (/= ingestedf) + . map (`fromTopFilePath` g) + <$> Database.Keys.getAssociatedFiles key + filterM (`sameInodeCache` caches) fs >>= \case + -- If linkToAnnex fails, the associated + -- file with the content is still present, + -- so no need for any recovery. + (f:_) -> do + ic <- withTSDelta (liftIO . genInodeCache f) + void $ linkToAnnex key f ic + _ -> logStatus key InfoMissing + +{- On error, put the file back so it doesn't seem to have vanished. + - This can be called before or after the symlink is in place. -} +restoreFile :: RawFilePath -> Key -> SomeException -> Annex a +restoreFile file key e = do + whenM (inAnnex key) $ do + liftIO $ removeWhenExistsWith R.removeLink file + -- The key could be used by other files too, so leave the + -- content in the annex, and make a copy back to the file. + obj <- fromRawFilePath <$> calcRepo (gitAnnexLocation key) + unlessM (liftIO $ copyFileExternal CopyTimeStamps obj (fromRawFilePath file)) $ + warning $ "Unable to restore content of " <> QuotedPath file <> "; it should be located in " <> QuotedPath (toRawFilePath obj) + thawContent file + throwM e + +{- Creates the symlink to the annexed content, returns the link target. -} +makeLink :: RawFilePath -> Key -> Maybe InodeCache -> Annex LinkTarget +makeLink file key mcache = flip catchNonAsync (restoreFile file key) $ do + l <- calcRepo $ gitAnnexLink file key + replaceWorkTreeFile file' $ makeAnnexLink l + + -- touch symlink to have same time as the original file, + -- as provided in the InodeCache + case mcache of + Just c -> liftIO $ touch file (inodeCacheToMtime c) False + Nothing -> noop + + return l + where + file' = fromRawFilePath file + +{- Creates the symlink to the annexed content, and stages it in git. -} +addSymlink :: RawFilePath -> Key -> Maybe InodeCache -> Annex () +addSymlink file key mcache = stageSymlink file =<< genSymlink file key mcache + +genSymlink :: RawFilePath -> Key -> Maybe InodeCache -> Annex Git.Sha +genSymlink file key mcache = do + linktarget <- makeLink file key mcache + hashSymlink linktarget + +{- Parameters to pass to git add, forcing addition of ignored files. + - + - Note that, when git add is being run on an ignored file that is already + - checked in, CheckGitIgnore True has no effect. + -} +gitAddParams :: CheckGitIgnore -> Annex [CommandParam] +gitAddParams (CheckGitIgnore True) = ifM (Annex.getRead Annex.force) + ( return [Param "-f"] + , return [] + ) +gitAddParams (CheckGitIgnore False) = return [Param "-f"] + +{- Whether a file should be added unlocked or not. Default is to not, + - unless symlinks are not supported. annex.addunlocked can override that. + - Also, when in an adjusted branch that unlocked files, always add files + - unlocked. + -} +addUnlocked :: AddUnlockedMatcher -> MatchInfo -> Bool -> Annex Bool +addUnlocked matcher mi contentpresent = + ((not . coreSymlinks <$> Annex.getGitConfig) <||> + (checkAddUnlockedMatcher matcher mi) <||> + (maybe False go . snd <$> getCurrentBranch) + ) + where + go (LinkAdjustment UnlockAdjustment) = True + go (LinkAdjustment LockAdjustment) = False + go (LinkAdjustment FixAdjustment) = False + go (LinkAdjustment UnFixAdjustment) = False + go (PresenceAdjustment _ (Just la)) = go (LinkAdjustment la) + go (PresenceAdjustment _ Nothing) = False + go (LinkPresentAdjustment UnlockPresentAdjustment) = contentpresent + go (LinkPresentAdjustment LockPresentAdjustment) = False + +{- Adds a file to the work tree for the key, and stages it in the index. + - The content of the key may be provided in a temp file, which will be + - moved into place. If no content is provided, adds an annex link but does + - not ingest the content. + - + - When the content of the key is not accepted into the annex, returns False. + -} +addAnnexedFile :: AddUnlockedMatcher -> RawFilePath -> Key -> Maybe RawFilePath -> Annex Bool +addAnnexedFile matcher file key mtmp = ifM (addUnlocked matcher mi (isJust mtmp)) + ( do + mode <- maybe + (pure Nothing) + (\tmp -> liftIO $ catchMaybeIO $ fileMode <$> R.getFileStatus tmp) + mtmp + stagePointerFile file mode =<< hashPointerFile key + Database.Keys.addAssociatedFile key =<< inRepo (toTopFilePath file) + case mtmp of + Just tmp -> ifM (moveAnnex key af tmp) + ( linkunlocked mode >> return True + , writepointer mode >> return False + ) + Nothing -> ifM (inAnnex key) + ( linkunlocked mode >> return True + , writepointer mode >> return True + ) + , do + addSymlink file key Nothing + case mtmp of + Just tmp -> moveAnnex key af tmp + Nothing -> return True + ) + where + af = AssociatedFile (Just file) + mi = case mtmp of + Just tmp -> MatchingFile $ FileInfo + { contentFile = tmp + , matchFile = file + , matchKey = Just key + } + Nothing -> keyMatchInfoWithoutContent key file + + linkunlocked mode = linkFromAnnex key file mode >>= \case + LinkAnnexFailed -> writepointer mode + _ -> return () + + writepointer mode = liftIO $ writePointerFile file key mode + +{- Use with actions that add an already existing annex symlink or pointer + - file. The warning avoids a confusing situation where the file got copied + - from another git-annex repo, probably by accident. -} +addingExistingLink :: RawFilePath -> Key -> Annex a -> Annex a +addingExistingLink f k a = do + unlessM (isKnownKey k <||> inAnnex k) $ do + islink <- isJust <$> isAnnexLink f + warning $ + QuotedPath f + <> " is a git-annex " + <> if islink then "symlink." else "pointer file." + <> " Its content is not available in this repository." + <> " (Maybe " <> QuotedPath f <> " was copied from another repository?)" + a diff --git a/Annex/Init.hs b/Annex/Init.hs new file mode 100644 index 0000000000..6a499e4771 --- /dev/null +++ b/Annex/Init.hs @@ -0,0 +1,466 @@ +{- git-annex repository initialization + - + - Copyright 2011-2022 Joey Hess + - + - Licensed under the GNU AGPL version 3 or higher. + -} + +{-# LANGUAGE CPP #-} +{-# LANGUAGE OverloadedStrings #-} + +module Annex.Init ( + checkInitializeAllowed, + ensureInitialized, + autoInitialize, + isInitialized, + initialize, + initialize', + uninitialize, + probeCrippledFileSystem, + probeCrippledFileSystem', +) where + +import Annex.Common +import qualified Annex +import qualified Git +import qualified Git.Config +import qualified Git.Objects +import Git.Types (fromConfigValue) +import Git.ConfigTypes (SharedRepository(..)) +import qualified Annex.Branch +import qualified Database.Fsck +import Logs.UUID +import Logs.Trust.Basic +import Logs.Config +import Types.TrustLevel +import Types.RepoVersion +import Annex.Version +import Annex.Difference +import Annex.UUID +import Annex.Fixup +import Annex.Path +import Config +import Config.Files +import Config.Smudge +import qualified Upgrade.V5.Direct as Direct +import qualified Annex.AdjustedBranch as AdjustedBranch +import Remote.List.Util (remotesChanged) +import Annex.Environment +import Annex.Hook +import Annex.InodeSentinal +import Upgrade +import Annex.Tmp +import Utility.UserInfo +import Annex.Perms +#ifndef mingw32_HOST_OS +import Utility.ThreadScheduler +import qualified Utility.RawFilePath as R +import Utility.FileMode +import System.Posix.User +import qualified Utility.LockFile.Posix as Posix +#endif + +import qualified Data.Map as M +import Control.Monad.IO.Class (MonadIO) +#ifndef mingw32_HOST_OS +import System.PosixCompat.Files (ownerReadMode, isNamedPipe) +import Data.Either +import qualified System.FilePath.ByteString as P +import Control.Concurrent.Async +#endif + +data InitializeAllowed = InitializeAllowed + +checkInitializeAllowed :: (InitializeAllowed -> Annex a) -> Annex a +checkInitializeAllowed a = guardSafeToUseRepo $ noAnnexFileContent' >>= \case + Nothing -> do + checkSqliteWorks + a InitializeAllowed + Just noannexmsg -> do + warning "Initialization prevented by .noannex file (remove the file to override)" + unless (null noannexmsg) $ + warning (UnquotedString noannexmsg) + giveup "Not initialized." + +initializeAllowed :: Annex Bool +initializeAllowed = isNothing <$> noAnnexFileContent' + +noAnnexFileContent' :: Annex (Maybe String) +noAnnexFileContent' = inRepo $ + noAnnexFileContent . fmap fromRawFilePath . Git.repoWorkTree + +genDescription :: Maybe String -> Annex UUIDDesc +genDescription (Just d) = return $ UUIDDesc $ encodeBS d +genDescription Nothing = do + reldir <- liftIO . relHome . fromRawFilePath + =<< liftIO . absPath + =<< fromRepo Git.repoPath + hostname <- fromMaybe "" <$> liftIO getHostname + let at = if null hostname then "" else "@" + v <- liftIO myUserName + return $ UUIDDesc $ encodeBS $ concat $ case v of + Right username -> [username, at, hostname, ":", reldir] + Left _ -> [hostname, ":", reldir] + +initialize :: Maybe String -> Maybe RepoVersion -> Annex () +initialize mdescription mversion = checkInitializeAllowed $ \initallowed -> do + {- Has to come before any commits are made as the shared + - clone heuristic expects no local objects. -} + sharedclone <- checkSharedClone + + {- This will make the first commit to git, so ensure git is set up + - properly to allow commits when running it. -} + ensureCommit $ Annex.Branch.create + + prepUUID + initialize' mversion initallowed + + initSharedClone sharedclone + + u <- getUUID + when (u == NoUUID) $ + giveup "Failed to read annex.uuid from git config after setting it. This should never happen. Please file a bug report." + + {- Avoid overwriting existing description with a default + - description. -} + whenM (pure (isJust mdescription) <||> not . M.member u <$> uuidDescMapRaw) $ + describeUUID u =<< genDescription mdescription + +-- Everything except for uuid setup, shared clone setup, and initial +-- description. +initialize' :: Maybe RepoVersion -> InitializeAllowed -> Annex () +initialize' mversion _initallowed = do + checkLockSupport + checkFifoSupport + checkCrippledFileSystem + unlessM isBareRepo $ do + hookWrite preCommitHook + hookWrite postReceiveHook + setDifferences + unlessM (isJust <$> getVersion) $ + setVersion (fromMaybe defaultVersion mversion) + supportunlocked <- annexSupportUnlocked <$> Annex.getGitConfig + if supportunlocked + then configureSmudgeFilter + else deconfigureSmudgeFilter + unlessM isBareRepo $ do + hookWrite postCheckoutHook + hookWrite postMergeHook + + AdjustedBranch.checkAdjustedClone >>= \case + AdjustedBranch.InAdjustedClone -> return () + AdjustedBranch.NotInAdjustedClone -> + ifM (crippledFileSystem <&&> (not <$> isBareRepo)) + ( AdjustedBranch.adjustToCrippledFileSystem + -- Handle case where this repo was cloned from a + -- direct mode repo + , unlessM isBareRepo + Direct.switchHEADBack + ) + propigateSecureHashesOnly + createInodeSentinalFile False + fixupUnusualReposAfterInit + +uninitialize :: Annex () +uninitialize = do + -- Remove hooks that are written when initializing. + hookUnWrite preCommitHook + hookUnWrite postReceiveHook + hookUnWrite postCheckoutHook + hookUnWrite postMergeHook + deconfigureSmudgeFilter + removeRepoUUID + removeVersion + +{- Gets the version that the repo is initialized with. + - + - To make sure the repo is fully initialized, also checks that it has a + - uuid configured. In the unusual case where one is set and the other is + - not, errors out to avoid running in an inconsistent state. + -} +getInitializedVersion :: Annex (Maybe RepoVersion) +getInitializedVersion = do + um <- (\u -> if u == NoUUID then Nothing else Just u) <$> getUUID + vm <- getVersion + case (um, vm) of + (Just _, Just v) -> return (Just v) + (Nothing, Nothing) -> return Nothing + (Just _, Nothing) -> onemissing "annex.version" "annex.uuid" + (Nothing, Just _) -> onemissing "annex.uuid" "annex.version" + where + onemissing missing have = giveup $ unwords + [ "This repository has " ++ have ++ " set," + , "but " ++ missing ++ " is not set. Perhaps that" + , "git config was lost. Cannot use the repository" + , "in this state; set back " ++ missing ++ " to fix this." + ] + +{- Will automatically initialize if there is already a git-annex + - branch from somewhere. Otherwise, require a manual init + - to avoid git-annex accidentally being run in git + - repos that did not intend to use it. + - + - Checks repository version and handles upgrades too. + -} +ensureInitialized :: Annex [Remote] -> Annex () +ensureInitialized remotelist = getInitializedVersion >>= maybe needsinit checkUpgrade + where + needsinit = ifM autoInitializeAllowed + ( do + tryNonAsync (initialize Nothing Nothing) >>= \case + Right () -> noop + Left e -> giveup $ show e ++ "\n" ++ + "git-annex: automatic initialization failed due to above problems" + autoEnableSpecialRemotes remotelist + , giveup "First run: git-annex init" + ) + +{- Check if auto-initialize is allowed. -} +autoInitializeAllowed :: Annex Bool +autoInitializeAllowed = Annex.Branch.hasSibling <&&> objectDirNotPresent + +objectDirNotPresent :: Annex Bool +objectDirNotPresent = do + d <- fromRawFilePath <$> fromRepo gitAnnexObjectDir + exists <- liftIO $ doesDirectoryExist d + when exists $ guardSafeToUseRepo $ + giveup $ unwords $ + [ "This repository is not initialized for use" + , "by git-annex, but " ++ d ++ " exists," + , "which indicates this repository was used by" + , "git-annex before, and may have lost its" + , "annex.uuid and annex.version configs. Either" + , "set back missing configs, or run git-annex init" + , "to initialize with a new uuid." + ] + return (not exists) + +guardSafeToUseRepo :: Annex a -> Annex a +guardSafeToUseRepo a = ifM (inRepo Git.Config.checkRepoConfigInaccessible) + ( do + repopath <- fromRepo Git.repoPath + p <- liftIO $ absPath repopath + giveup $ unlines $ + [ "Git refuses to operate in this repository," + , "probably because it is owned by someone else." + , "" + -- This mirrors git's wording. + , "To add an exception for this directory, call:" + , "\tgit config --global --add safe.directory " ++ fromRawFilePath p + ] + , a + ) + +{- Initialize if it can do so automatically. Avoids failing if it cannot. + - + - Checks repository version and handles upgrades too. + -} +autoInitialize :: Annex [Remote] -> Annex () +autoInitialize remotelist = getInitializedVersion >>= maybe needsinit checkUpgrade + where + needsinit = + whenM (initializeAllowed <&&> autoInitializeAllowed) $ do + initialize Nothing Nothing + autoEnableSpecialRemotes remotelist + +{- Checks if a repository is initialized. Does not check version for ugrade. -} +isInitialized :: Annex Bool +isInitialized = maybe Annex.Branch.hasSibling (const $ return True) =<< getVersion + +{- A crippled filesystem is one that does not allow making symlinks, + - or removing write access from files. -} +probeCrippledFileSystem :: Annex Bool +probeCrippledFileSystem = withEventuallyCleanedOtherTmp $ \tmp -> do + (r, warnings) <- probeCrippledFileSystem' tmp + (Just (freezeContent' UnShared)) + (Just (thawContent' UnShared)) + =<< hasFreezeHook + mapM_ (warning . UnquotedString) warnings + return r + +probeCrippledFileSystem' + :: (MonadIO m, MonadCatch m) + => RawFilePath + -> Maybe (RawFilePath -> m ()) + -> Maybe (RawFilePath -> m ()) + -> Bool + -> m (Bool, [String]) +#ifdef mingw32_HOST_OS +probeCrippledFileSystem' _ _ _ _ = return (True, []) +#else +probeCrippledFileSystem' tmp freezecontent thawcontent hasfreezehook = do + let f = tmp P. "gaprobe" + let f' = fromRawFilePath f + liftIO $ writeFile f' "" + r <- probe f' + void $ tryNonAsync $ (fromMaybe (liftIO . allowWrite) thawcontent) f + liftIO $ removeFile f' + return r + where + probe f = catchDefaultIO (True, []) $ do + let f2 = f ++ "2" + liftIO $ removeWhenExistsWith R.removeLink (toRawFilePath f2) + liftIO $ R.createSymbolicLink (toRawFilePath f) (toRawFilePath f2) + liftIO $ removeWhenExistsWith R.removeLink (toRawFilePath f2) + (fromMaybe (liftIO . preventWrite) freezecontent) (toRawFilePath f) + -- Should be unable to write to the file (unless + -- running as root). But some crippled + -- filesystems ignore write bit removals or ignore + -- permissions entirely. + ifM ((== Just False) <$> liftIO (checkContentWritePerm' UnShared (toRawFilePath f) Nothing hasfreezehook)) + ( return (True, ["Filesystem does not allow removing write bit from files."]) + , liftIO $ ifM ((== 0) <$> getRealUserID) + ( return (False, []) + , do + r <- catchBoolIO $ do + writeFile f "2" + return True + if r + then return (True, ["Filesystem allows writing to files whose write bit is not set."]) + else return (False, []) + ) + ) +#endif + +checkCrippledFileSystem :: Annex () +checkCrippledFileSystem = whenM probeCrippledFileSystem $ do + warning "Detected a crippled filesystem." + setCrippledFileSystem True + + {- Normally git disables core.symlinks itself when the:w + - + - filesystem does not support them. But, even if symlinks are + - supported, we don't use them by default in a crippled + - filesystem. -} + whenM (coreSymlinks <$> Annex.getGitConfig) $ do + warning "Disabling core.symlinks." + setConfig "core.symlinks" + (Git.Config.boolConfig False) + +probeLockSupport :: Annex Bool +#ifdef mingw32_HOST_OS +probeLockSupport = return True +#else +probeLockSupport = withEventuallyCleanedOtherTmp $ \tmp -> do + let f = tmp P. "lockprobe" + mode <- annexFileMode + annexrunner <- Annex.makeRunner + liftIO $ withAsync (warnstall annexrunner) (const (go f mode)) + where + go f mode = do + removeWhenExistsWith R.removeLink f + let locktest = bracket + (Posix.lockExclusive (Just mode) f) + Posix.dropLock + (const noop) + ok <- isRight <$> tryNonAsync locktest + removeWhenExistsWith R.removeLink f + return ok + + warnstall annexrunner = do + threadDelaySeconds (Seconds 10) + annexrunner $ do + warning "Probing the filesystem for POSIX fcntl lock support is taking a long time." + warning "(Setting annex.pidlock will avoid this probe.)" +#endif + +probeFifoSupport :: Annex Bool +probeFifoSupport = do +#ifdef mingw32_HOST_OS + return False +#else + withEventuallyCleanedOtherTmp $ \tmp -> do + let f = tmp P. "gaprobe" + let f2 = tmp P. "gaprobe2" + liftIO $ do + removeWhenExistsWith R.removeLink f + removeWhenExistsWith R.removeLink f2 + ms <- tryIO $ do + R.createNamedPipe f ownerReadMode + R.createLink f f2 + R.getFileStatus f + removeWhenExistsWith R.removeLink f + removeWhenExistsWith R.removeLink f2 + return $ either (const False) isNamedPipe ms +#endif + +checkLockSupport :: Annex () +checkLockSupport = + unlessM (annexPidLock <$> Annex.getGitConfig) $ + unlessM probeLockSupport $ do + warning "Detected a filesystem without POSIX fcntl lock support." + warning "Enabling annex.pidlock." + setConfig (annexConfig "pidlock") (Git.Config.boolConfig True) + +checkFifoSupport :: Annex () +checkFifoSupport = unlessM probeFifoSupport $ do + warning "Detected a filesystem without fifo support." + warning "Disabling ssh connection caching." + setConfig (annexConfig "sshcaching") (Git.Config.boolConfig False) + +{- Sqlite needs the filesystem to support range locking. Some like CIFS + - do not, which will cause sqlite to fail with ErrorBusy. -} +checkSqliteWorks :: Annex () +checkSqliteWorks = do + u <- getUUID + tryNonAsync (Database.Fsck.openDb u >>= Database.Fsck.closeDb) >>= \case + Right () -> return () + Left e -> do + showLongNote $ "Detected a filesystem where Sqlite does not work." + showLongNote $ UnquotedString $ "(" ++ show e ++ ")" + showLongNote $ "To work around this problem, you can set annex.dbdir " <> + "to a directory on another filesystem." + showLongNote $ "For example: git config annex.dbdir $HOME/cache/git-annex" + giveup "Not initialized." + +checkSharedClone :: Annex Bool +checkSharedClone = inRepo Git.Objects.isSharedClone + +initSharedClone :: Bool -> Annex () +initSharedClone False = return () +initSharedClone True = do + showLongNote "Repository was cloned with --shared; setting annex.hardlink=true and making repository untrusted." + u <- getUUID + trustSet u UnTrusted + setConfig (annexConfig "hardlink") (Git.Config.boolConfig True) + +{- Propagate annex.securehashesonly from then global config to local + - config. This makes a clone inherit a parent's setting, but once + - a repository has a local setting, changes to the global config won't + - affect it. -} +propigateSecureHashesOnly :: Annex () +propigateSecureHashesOnly = + maybe noop (setConfig "annex.securehashesonly" . fromConfigValue) + =<< getGlobalConfig "annex.securehashesonly" + +fixupUnusualReposAfterInit :: Annex () +fixupUnusualReposAfterInit = do + gc <- Annex.getGitConfig + void $ inRepo $ \r -> fixupUnusualRepos r gc + +{- Try to enable any special remotes that are configured to do so. + - + - The enabling is done in a child process to avoid it using stdio. + - + - The remotelist should be Remote.List.remoteList, which cannot + - be imported here due to a dependency loop. + -} +autoEnableSpecialRemotes :: Annex [Remote] -> Annex () +autoEnableSpecialRemotes remotelist = do + -- Get all existing git remotes to probe for their uuid here, + -- so it is not done inside the child process. Doing it in there + -- could result in password prompts for http credentials, + -- which would then not end up cached in this process's state. + _ <- remotelist + rp <- fromRawFilePath <$> fromRepo Git.repoPath + withNullHandle $ \nullh -> gitAnnexChildProcess "init" + [ Param "--autoenable" ] + (\p -> p + { std_out = UseHandle nullh + , std_err = UseHandle nullh + , std_in = UseHandle nullh + , cwd = Just rp + } + ) + (\_ _ _ pid -> void $ waitForProcess pid) + remotesChanged diff --git a/Annex/InodeSentinal.hs b/Annex/InodeSentinal.hs new file mode 100644 index 0000000000..129dd08b71 --- /dev/null +++ b/Annex/InodeSentinal.hs @@ -0,0 +1,112 @@ +{- git-annex inode sentinal file + - + - Copyright 2012-2015 Joey Hess + - + - Licensed under the GNU AGPL version 3 or higher. + -} + +{-# LANGUAGE CPP #-} +{-# LANGUAGE OverloadedStrings #-} + +module Annex.InodeSentinal where + +import Annex.Common +import qualified Annex +import Utility.InodeCache +import Annex.Perms + +{- If the sendinal shows the inodes have changed, only the size and mtime + - are compared. -} +compareInodeCaches :: InodeCache -> InodeCache -> Annex Bool +compareInodeCaches x y + | compareStrong x y = return True + | otherwise = ifM inodesChanged + ( return $ compareWeak x y + , return False + ) + +compareInodeCachesWith :: Annex InodeComparisonType +compareInodeCachesWith = ifM inodesChanged ( return Weakly, return Strongly ) + +{- Checks if one of the provided old InodeCache matches the current + - version of a file. -} +sameInodeCache :: RawFilePath -> [InodeCache] -> Annex Bool +sameInodeCache file [] = do + fastDebug "Annex.InodeSentinal" $ + fromRawFilePath file ++ " inode cache empty" + return False +sameInodeCache file old = go =<< withTSDelta (liftIO . genInodeCache file) + where + go Nothing = do + fastDebug "Annex.InodeSentinal" $ + fromRawFilePath file ++ " not present, cannot compare with inode cache" + return False + go (Just curr) = ifM (elemInodeCaches curr old) + ( return True + , do + fastDebug "Annex.InodeSentinal" $ + fromRawFilePath file ++ " (" ++ show curr ++ ") does not match inode cache (" ++ show old ++ ")" + return False + ) + +elemInodeCaches :: InodeCache -> [InodeCache] -> Annex Bool +elemInodeCaches _ [] = return False +elemInodeCaches c (l:ls) = ifM (compareInodeCaches c l) + ( return True + , elemInodeCaches c ls + ) + +{- Some filesystems get new inodes each time they are mounted. + - In order to work on such a filesystem, a sentinal file is used to detect + - when the inodes have changed. + - + - If the sentinal file does not exist, we have to assume that the + - inodes have changed. + -} +inodesChanged :: Annex Bool +inodesChanged = sentinalInodesChanged <$> sentinalStatus + +withTSDelta :: (TSDelta -> Annex a) -> Annex a +withTSDelta a = a =<< getTSDelta + +getTSDelta :: Annex TSDelta +#ifdef mingw32_HOST_OS +getTSDelta = sentinalTSDelta <$> sentinalStatus +#else +getTSDelta = pure noTSDelta -- optimisation +#endif + +sentinalStatus :: Annex SentinalStatus +sentinalStatus = maybe check return =<< Annex.getState Annex.sentinalstatus + where + check = do + sc <- liftIO . checkSentinalFile =<< annexSentinalFile + Annex.changeState $ \s -> s { Annex.sentinalstatus = Just sc } + return sc + +{- The sentinal file is only created when first initializing a repository. + - If there are any annexed objects in the repository already, creating + - the file would invalidate their inode caches. -} +createInodeSentinalFile :: Bool -> Annex () +createInodeSentinalFile evenwithobjects = + unlessM (alreadyexists <||> hasobjects) $ do + s <- annexSentinalFile + createAnnexDirectory (parentDir (sentinalFile s)) + liftIO $ writeSentinalFile s + setAnnexFilePerm (sentinalFile s) + setAnnexFilePerm (sentinalCacheFile s) + where + alreadyexists = liftIO. sentinalFileExists =<< annexSentinalFile + hasobjects + | evenwithobjects = pure False + | otherwise = liftIO . doesDirectoryExist . fromRawFilePath + =<< fromRepo gitAnnexObjectDir + +annexSentinalFile :: Annex SentinalFile +annexSentinalFile = do + sentinalfile <- fromRepo gitAnnexInodeSentinal + sentinalcachefile <- fromRepo gitAnnexInodeSentinalCache + return SentinalFile + { sentinalFile = sentinalfile + , sentinalCacheFile = sentinalcachefile + } diff --git a/Annex/Journal.hs b/Annex/Journal.hs new file mode 100644 index 0000000000..ea6327606d --- /dev/null +++ b/Annex/Journal.hs @@ -0,0 +1,294 @@ +{- management of the git-annex journal + - + - The journal is used to queue up changes before they are committed to the + - git-annex branch. Among other things, it ensures that if git-annex is + - interrupted, its recorded data is not lost. + - + - All files in the journal must be a series of lines separated by + - newlines. + - + - Copyright 2011-2022 Joey Hess + - + - Licensed under the GNU AGPL version 3 or higher. + -} + +{-# LANGUAGE OverloadedStrings #-} +{-# LANGUAGE CPP #-} + +module Annex.Journal where + +import Annex.Common +import qualified Annex +import qualified Git +import Annex.Perms +import Annex.Tmp +import Annex.LockFile +import Utility.Directory.Stream +import qualified Utility.RawFilePath as R + +import qualified Data.Set as S +import qualified Data.ByteString.Lazy as L +import qualified Data.ByteString as B +import qualified System.FilePath.ByteString as P +import Data.ByteString.Builder +import Data.Char + +class Journalable t where + writeJournalHandle :: Handle -> t -> IO () + journalableByteString :: t -> L.ByteString + +instance Journalable L.ByteString where + writeJournalHandle = L.hPut + journalableByteString = id + +-- This is more efficient than the ByteString instance. +instance Journalable Builder where + writeJournalHandle = hPutBuilder + journalableByteString = toLazyByteString + +{- When a file in the git-annex branch is changed, this indicates what + - repository UUID (or in some cases, UUIDs) a change is regarding. + - + - Using this lets changes regarding private UUIDs be stored separately + - from the git-annex branch, so its information does not get exposed + - outside the repo. + -} +data RegardingUUID = RegardingUUID [UUID] + +regardingPrivateUUID :: RegardingUUID -> Annex Bool +regardingPrivateUUID (RegardingUUID []) = pure False +regardingPrivateUUID (RegardingUUID us) = do + s <- annexPrivateRepos <$> Annex.getGitConfig + return (any (flip S.member s) us) + +{- Are any private UUIDs known to exist? If so, extra work has to be done, + - to check for information separately recorded for them, outside the usual + - locations. + -} +privateUUIDsKnown :: Annex Bool +privateUUIDsKnown = privateUUIDsKnown' <$> Annex.getState id + +privateUUIDsKnown' :: Annex.AnnexState -> Bool +privateUUIDsKnown' = not . S.null . annexPrivateRepos . Annex.gitconfig + +{- Records content for a file in the branch to the journal. + - + - Using the journal, rather than immediately staging content to the index + - avoids git needing to rewrite the index after every change. + - + - The file in the journal is updated atomically. This avoids an + - interrupted write truncating information that was earlier read from the + - file, and so losing data. + -} +setJournalFile :: Journalable content => JournalLocked -> RegardingUUID -> RawFilePath -> content -> Annex () +setJournalFile _jl ru file content = withOtherTmp $ \tmp -> do + jd <- fromRepo =<< ifM (regardingPrivateUUID ru) + ( return gitAnnexPrivateJournalDir + , return gitAnnexJournalDir + ) + -- journal file is written atomically + let jfile = journalFile file + let tmpfile = tmp P. jfile + liftIO $ withFile (fromRawFilePath tmpfile) WriteMode $ \h -> + writeJournalHandle h content + let dest = jd P. jfile + let mv = do + liftIO $ moveFile tmpfile dest + setAnnexFilePerm dest + -- avoid overhead of creating the journal directory when it already + -- exists + mv `catchIO` (const (createAnnexDirectory jd >> mv)) + +newtype AppendableJournalFile = AppendableJournalFile (RawFilePath, RawFilePath) + +{- If the journal file does not exist, it cannot be appended to, because + - that would overwrite whatever content the file has in the git-annex + - branch. -} +checkCanAppendJournalFile :: JournalLocked -> RegardingUUID -> RawFilePath -> Annex (Maybe AppendableJournalFile) +checkCanAppendJournalFile _jl ru file = do + jd <- fromRepo =<< ifM (regardingPrivateUUID ru) + ( return gitAnnexPrivateJournalDir + , return gitAnnexJournalDir + ) + let jfile = jd P. journalFile file + ifM (liftIO $ R.doesPathExist jfile) + ( return (Just (AppendableJournalFile (jd, jfile))) + , return Nothing + ) + +{- Appends content to an existing journal file. + - + - Appends are not necessarily atomic, though short appends often are. + - So, when this is interrupted, it can leave only part of the content + - written to the file. To deal with that situation, both this and + - getJournalFileStale check if the file ends with a newline, and if + - not discard the incomplete line. + - + - Due to the lack of atomicity, this should not be used when multiple + - lines need to be written to the file as an atomic unit. + -} +appendJournalFile :: Journalable content => JournalLocked -> AppendableJournalFile -> content -> Annex () +appendJournalFile _jl (AppendableJournalFile (jd, jfile)) content = do + let write = liftIO $ withFile (fromRawFilePath jfile) ReadWriteMode $ \h -> do + sz <- hFileSize h + when (sz /= 0) $ do + hSeek h SeekFromEnd (-1) + lastchar <- B.hGet h 1 + unless (lastchar == "\n") $ do + hSeek h AbsoluteSeek 0 + goodpart <- L.length . discardIncompleteAppend + <$> L.hGet h (fromIntegral sz) + hSetFileSize h (fromIntegral goodpart) + hSeek h SeekFromEnd 0 + writeJournalHandle h content + write `catchIO` (const (createAnnexDirectory jd >> write)) + +data JournalledContent + = NoJournalledContent + | JournalledContent L.ByteString + | PossiblyStaleJournalledContent L.ByteString + -- ^ This is used when the journalled content may have been + -- supersceded by content in the git-annex branch. The returned + -- content should be combined with content from the git-annex branch. + -- This is particularly the case when a file is in the private + -- journal, which does not get written to the git-annex branch, + -- and so the git-annex branch can contain changes to non-private + -- information that were made after that journal file was written. + +{- Gets any journalled content for a file in the branch. -} +getJournalFile :: JournalLocked -> GetPrivate -> RawFilePath -> Annex JournalledContent +getJournalFile _jl = getJournalFileStale + +data GetPrivate = GetPrivate Bool + +{- Without locking, this is not guaranteed to be the most recent + - content of the file in the journal, so should not be used as a basis for + - making changes to the file. + - + - The file is read strictly so that its content can safely be fed into + - an operation that modifies the file (when getJournalFile calls this). + - The minor loss of laziness doesn't matter much, as the files are not + - very large. + - + - To recover from an append of a line that is interrupted part way through + - (or is in progress when this is called), if the file content does not end + - with a newline, it is truncated back to the previous newline. + -} +getJournalFileStale :: GetPrivate -> RawFilePath -> Annex JournalledContent +getJournalFileStale (GetPrivate getprivate) file = do + -- Optimisation to avoid a second MVar access. + st <- Annex.getState id + let g = Annex.repo st + liftIO $ + if getprivate && privateUUIDsKnown' st + then do + x <- getfrom (gitAnnexJournalDir g) + getfrom (gitAnnexPrivateJournalDir g) >>= \case + Nothing -> return $ case x of + Nothing -> NoJournalledContent + Just b -> JournalledContent b + Just y -> return $ PossiblyStaleJournalledContent $ case x of + Nothing -> y + -- This concacenation is the same as + -- happens in a merge of two + -- git-annex branches. + Just x' -> x' <> y + else getfrom (gitAnnexJournalDir g) >>= return . \case + Nothing -> NoJournalledContent + Just b -> JournalledContent b + where + jfile = journalFile file + getfrom d = catchMaybeIO $ + discardIncompleteAppend . L.fromStrict + <$> B.readFile (fromRawFilePath (d P. jfile)) + +-- Note that this forces read of the whole lazy bytestring. +discardIncompleteAppend :: L.ByteString -> L.ByteString +discardIncompleteAppend v + | L.null v = v + | L.last v == nl = v + | otherwise = dropwhileend (/= nl) v + where + nl = fromIntegral (ord '\n') +#if MIN_VERSION_bytestring(0,11,2) + dropwhileend = L.dropWhileEnd +#else + dropwhileend p = L.reverse . L.dropWhile p . L.reverse +#endif + +{- List of existing journal files in a journal directory, but without locking, + - may miss new ones just being added, or may have false positives if the + - journal is staged as it is run. -} +getJournalledFilesStale :: (Git.Repo -> RawFilePath) -> Annex [RawFilePath] +getJournalledFilesStale getjournaldir = do + g <- gitRepo + fs <- liftIO $ catchDefaultIO [] $ + getDirectoryContents $ fromRawFilePath (getjournaldir g) + return $ filter (`notElem` [".", ".."]) $ + map (fileJournal . toRawFilePath) fs + +{- Directory handle open on a journal directory. -} +withJournalHandle :: (Git.Repo -> RawFilePath) -> (DirectoryHandle -> IO a) -> Annex a +withJournalHandle getjournaldir a = do + d <- fromRepo getjournaldir + bracket (opendir d) (liftIO . closeDirectory) (liftIO . a) + where + -- avoid overhead of creating the journal directory when it already + -- exists + opendir d = liftIO (openDirectory (fromRawFilePath d)) + `catchIO` (const (createAnnexDirectory d >> opendir d)) + +{- Checks if there are changes in the journal. -} +journalDirty :: (Git.Repo -> RawFilePath) -> Annex Bool +journalDirty getjournaldir = do + d <- fromRawFilePath <$> fromRepo getjournaldir + liftIO $ + (not <$> isDirectoryEmpty d) + `catchIO` (const $ doesDirectoryExist d) + +{- Produces a filename to use in the journal for a file on the branch. + - The filename does not include the journal directory. + - + - The journal typically won't have a lot of files in it, so the hashing + - used in the branch is not necessary, and all the files are put directly + - in the journal directory. + -} +journalFile :: RawFilePath -> RawFilePath +journalFile file = B.concatMap mangle file + where + mangle c + | P.isPathSeparator c = B.singleton underscore + | c == underscore = B.pack [underscore, underscore] + | otherwise = B.singleton c + underscore = fromIntegral (ord '_') + +{- Converts a journal file (relative to the journal dir) back to the + - filename on the branch. -} +fileJournal :: RawFilePath -> RawFilePath +fileJournal = go + where + go b = + let (h, t) = B.break (== underscore) b + in h <> case B.uncons t of + Nothing -> t + Just (_u, t') -> case B.uncons t' of + Nothing -> t' + Just (w, t'') + | w == underscore -> + B.cons underscore (go t'') + | otherwise -> + B.cons P.pathSeparator (go t') + + underscore = fromIntegral (ord '_') + +{- Sentinal value, only produced by lockJournal; required + - as a parameter by things that need to ensure the journal is + - locked. -} +data JournalLocked = ProduceJournalLocked + +{- Runs an action that modifies the journal, using locking to avoid + - contention with other git-annex processes. -} +lockJournal :: (JournalLocked -> Annex a) -> Annex a +lockJournal a = do + lck <- fromRepo gitAnnexJournalLock + withExclusiveLock lck $ a ProduceJournalLocked diff --git a/Annex/Link.hs b/Annex/Link.hs new file mode 100644 index 0000000000..4961499f62 --- /dev/null +++ b/Annex/Link.hs @@ -0,0 +1,476 @@ +{- git-annex links to content + - + - On file systems that support them, symlinks are used. + - + - On other filesystems, git instead stores the symlink target in a regular + - file. + - + - Pointer files are used instead of symlinks for unlocked files. + - + - Copyright 2013-2022 Joey Hess + - + - Licensed under the GNU AGPL version 3 or higher. + -} + +{-# LANGUAGE CPP, BangPatterns, OverloadedStrings #-} + +module Annex.Link where + +import Annex.Common +import qualified Annex +import qualified Annex.Queue +import qualified Git.Queue +import qualified Git.UpdateIndex +import qualified Git.Index +import qualified Git.LockFile +import qualified Git.Env +import qualified Git +import Logs.Restage +import Git.Types +import Git.FilePath +import Git.Config +import Annex.HashObject +import Annex.InodeSentinal +import Annex.PidLock +import Utility.FileMode +import Utility.InodeCache +import Utility.Tmp.Dir +import Utility.CopyFile +import qualified Database.Keys.Handle +import qualified Utility.RawFilePath as R + +import qualified Data.ByteString as S +import qualified Data.ByteString.Char8 as S8 +import qualified Data.ByteString.Lazy as L +import qualified System.FilePath.ByteString as P +#ifndef mingw32_HOST_OS +#if MIN_VERSION_unix(2,8,0) +#else +import System.PosixCompat.Files (isSymbolicLink) +#endif +#endif + +type LinkTarget = S.ByteString + +{- Checks if a file is a link to a key. -} +isAnnexLink :: RawFilePath -> Annex (Maybe Key) +isAnnexLink file = maybe Nothing parseLinkTargetOrPointer <$> getAnnexLinkTarget file + +{- Gets the link target of a symlink. + - + - On a filesystem that does not support symlinks, fall back to getting the + - link target by looking inside the file. + - + - Returns Nothing if the file is not a symlink, or not a link to annex + - content. + -} +getAnnexLinkTarget :: RawFilePath -> Annex (Maybe LinkTarget) +getAnnexLinkTarget f = getAnnexLinkTarget' f + =<< (coreSymlinks <$> Annex.getGitConfig) + +{- Pass False to force looking inside file, for when git checks out + - symlinks as plain files. -} +getAnnexLinkTarget' :: RawFilePath -> Bool -> Annex (Maybe S.ByteString) +getAnnexLinkTarget' file coresymlinks = if coresymlinks + then check probesymlink $ + return Nothing + else check probesymlink $ + check probefilecontent $ + return Nothing + where + check getlinktarget fallback = + liftIO (catchMaybeIO getlinktarget) >>= \case + Just l + | isLinkToAnnex l -> return (Just l) + | otherwise -> return Nothing + Nothing -> fallback + + probesymlink = R.readSymbolicLink file + + probefilecontent = withFile (fromRawFilePath file) ReadMode $ \h -> do + s <- S.hGet h maxSymlinkSz + -- If we got the full amount, the file is too large + -- to be a symlink target. + return $ if S.length s == maxSymlinkSz + then mempty + else + -- If there are any NUL or newline + -- characters, or whitespace, we + -- certainly don't have a symlink to a + -- git-annex key. + if any (`S8.elem` s) ("\0\n\r \t" :: [Char]) + then mempty + else s + +makeAnnexLink :: LinkTarget -> RawFilePath -> Annex () +makeAnnexLink = makeGitLink + +{- Creates a link on disk. + - + - On a filesystem that does not support symlinks, writes the link target + - to a file. Note that git will only treat the file as a symlink if + - it's staged as such, so use addAnnexLink when adding a new file or + - modified link to git. + -} +makeGitLink :: LinkTarget -> RawFilePath -> Annex () +makeGitLink linktarget file = ifM (coreSymlinks <$> Annex.getGitConfig) + ( liftIO $ do + void $ tryIO $ R.removeLink file + R.createSymbolicLink linktarget file + , liftIO $ S.writeFile (fromRawFilePath file) linktarget + ) + +{- Creates a link on disk, and additionally stages it in git. -} +addAnnexLink :: LinkTarget -> RawFilePath -> Annex () +addAnnexLink linktarget file = do + makeAnnexLink linktarget file + stageSymlink file =<< hashSymlink linktarget + +{- Injects a symlink target into git, returning its Sha. -} +hashSymlink :: LinkTarget -> Annex Sha +hashSymlink = hashBlob . toInternalGitPath + +{- Stages a symlink to an annexed object, using a Sha of its target. -} +stageSymlink :: RawFilePath -> Sha -> Annex () +stageSymlink file sha = + Annex.Queue.addUpdateIndex =<< + inRepo (Git.UpdateIndex.stageSymlink file sha) + +{- Injects a pointer file content into git, returning its Sha. -} +hashPointerFile :: Key -> Annex Sha +hashPointerFile key = hashBlob $ formatPointer key + +{- Stages a pointer file, using a Sha of its content -} +stagePointerFile :: RawFilePath -> Maybe FileMode -> Sha -> Annex () +stagePointerFile file mode sha = + Annex.Queue.addUpdateIndex =<< + inRepo (Git.UpdateIndex.stageFile sha treeitemtype file) + where + treeitemtype + | maybe False isExecutable mode = TreeExecutable + | otherwise = TreeFile + +writePointerFile :: RawFilePath -> Key -> Maybe FileMode -> IO () +writePointerFile file k mode = do + S.writeFile (fromRawFilePath file) (formatPointer k) + maybe noop (R.setFileMode file) mode + +newtype Restage = Restage Bool + +{- Restage pointer file. This is used after updating a worktree file + - when content is added/removed, to prevent git status from showing + - it as modified. + - + - The InodeCache is for the worktree file. It is used to detect when + - the worktree file is changed by something else before git update-index + - gets to look at it. + - + - Asks git to refresh its index information for the file. + - That in turn runs the clean filter on the file; when the clean + - filter produces the same pointer that was in the index before, git + - realizes that the file has not actually been modified. + - + - Note that, if the pointer file is staged for deletion, or has different + - content than the current worktree content staged, this won't change + - that. So it's safe to call at any time and any situation. + - + - If the index is known to be locked (eg, git add has run git-annex), + - that would fail. Restage False will prevent the index being updated, + - and will store it in the restage log. Displays a message to help the + - user understand why the file will appear to be modified. + - + - This uses the git queue, so the update is not performed immediately, + - and this can be run multiple times cheaply. Using the git queue also + - prevents building up too large a number of updates when many files + - are being processed. It's also recorded in the restage log so that, + - if the process is interrupted before the git queue is fulushed, the + - restage will be taken care of later. + -} +restagePointerFile :: Restage -> RawFilePath -> InodeCache -> Annex () +restagePointerFile (Restage False) f orig = do + flip writeRestageLog orig =<< inRepo (toTopFilePath f) + toplevelWarning True $ unableToRestage $ Just f +restagePointerFile (Restage True) f orig = do + flip writeRestageLog orig =<< inRepo (toTopFilePath f) + -- Avoid refreshing the index if run by the + -- smudge clean filter, because git uses that when + -- it's already refreshing the index, probably because + -- this very action is running. Running it again would likely + -- deadlock. + unlessM (Annex.getState Annex.insmudgecleanfilter) $ + Annex.Queue.addFlushAction restagePointerFileRunner [f] + +restagePointerFileRunner :: Git.Queue.FlushActionRunner Annex +restagePointerFileRunner = + Git.Queue.FlushActionRunner "restagePointerFiles" $ \r _fs -> + restagePointerFiles r + +-- Restage all files in the restage log that have not been modified. +-- +-- Other changes to the files may have been staged before this +-- gets a chance to run. To avoid a race with any staging of +-- changes, first lock the index file. Then run git update-index +-- on all still-unmodified files, using a copy of the index file, +-- to bypass the lock. Then replace the old index file with the new +-- updated index file. +restagePointerFiles :: Git.Repo -> Annex () +restagePointerFiles r = unlessM (Annex.getState Annex.insmudgecleanfilter) $ do + -- Flush any queued changes to the keys database, so they + -- are visible to child processes. + -- The database is closed because that may improve behavior + -- when run in Windows's WSL1, which has issues with + -- multiple writers to SQL databases. + liftIO . Database.Keys.Handle.closeDbHandle + =<< Annex.getRead Annex.keysdbhandle + realindex <- liftIO $ Git.Index.currentIndexFile r + numsz@(numfiles, _) <- calcnumsz + let lock = fromRawFilePath (Git.Index.indexFileLock realindex) + lockindex = liftIO $ catchMaybeIO $ Git.LockFile.openLock' lock + unlockindex = liftIO . maybe noop Git.LockFile.closeLock + showwarning = warning $ unableToRestage Nothing + go Nothing = showwarning + go (Just _) = withtmpdir $ \tmpdir -> do + tsd <- getTSDelta + let tmpindex = toRawFilePath (tmpdir "index") + let replaceindex = liftIO $ moveFile tmpindex realindex + let updatetmpindex = do + r' <- liftIO $ Git.Env.addGitEnv r Git.Index.indexEnv + =<< Git.Index.indexEnvVal tmpindex + configfilterprocess numsz $ + runupdateindex tsd r' replaceindex + return True + ok <- liftIO (createLinkOrCopy realindex tmpindex) + <&&> catchBoolIO updatetmpindex + unless ok showwarning + when (numfiles > 0) $ + bracket lockindex unlockindex go + where + withtmpdir = withTmpDirIn (fromRawFilePath $ Git.localGitDir r) "annexindex" + + isunmodified tsd f orig = + genInodeCache f tsd >>= return . \case + Nothing -> False + Just new -> compareStrong orig new + + {- Avoid git warning about CRLF munging -} + avoidcrlfwarning r' = r' { gitGlobalOpts = gitGlobalOpts r' ++ + [ Param "-c" + , Param $ "core.safecrlf=" ++ boolConfig False + ] } + + runupdateindex tsd r' replaceindex = + runsGitAnnexChildProcessViaGit' (avoidcrlfwarning r') $ \r'' -> + Git.UpdateIndex.refreshIndex r'' $ \feeder -> do + let atend = do + -- wait for index write + liftIO $ feeder Nothing + replaceindex + streamRestageLog atend $ \topf ic -> do + let f = fromTopFilePath topf r'' + liftIO $ whenM (isunmodified tsd f ic) $ + feedupdateindex f feeder + + {- update-index is documented as picky about "./file" and it + - fails on "../../repo/path/file" when cwd is not in the repo + - being acted on. Avoid these problems with an absolute path. + -} + feedupdateindex f feeder = do + absf <- absPath f + feeder (Just absf) + + calcnumsz = calcRestageLog (0, 0) $ \(_f, ic) (numfiles, sizefiles) -> + (numfiles+1, sizefiles + inodeCacheFileSize ic) + + {- filter.annex.process configured to use git-annex filter-process + - is sometimes faster and sometimes slower than using + - git-annex smudge. The latter is run once per file, while + - the former has the content of files piped to it. + -} + filterprocessfaster :: (Integer, FileSize) -> Bool + filterprocessfaster (numfiles, sizefiles) = + let estimate_enabled = sizefiles `div` 191739611 + estimate_disabled = numfiles `div` 7 + in estimate_enabled <= estimate_disabled + + {- This disables filter.annex.process if it's set when it would + - probably not be faster to use it. Unfortunately, simply + - passing -c filter.annex.process= also prevents git from + - running the smudge filter, so .git/config has to be modified + - to disable it. The modification is reversed at the end. In + - case this process is terminated early, the next time this + - runs it will take care of reversing the modification. + -} + configfilterprocess numsz = bracket setup cleanup . const + where + setup + | filterprocessfaster numsz = return Nothing + | otherwise = fromRepo (Git.Config.getMaybe ck) >>= \case + Nothing -> return Nothing + Just v -> do + void $ inRepo (Git.Config.change ckd (fromConfigValue v)) + void $ inRepo (Git.Config.unset ck) + return (Just v) + cleanup (Just v) = do + void $ inRepo $ Git.Config.change ck (fromConfigValue v) + void $ inRepo (Git.Config.unset ckd) + cleanup Nothing = fromRepo (Git.Config.getMaybe ckd) >>= \case + Nothing -> return () + Just v -> do + whenM (isNothing <$> fromRepo (Git.Config.getMaybe ck)) $ + void $ inRepo (Git.Config.change ck (fromConfigValue v)) + void $ inRepo (Git.Config.unset ckd) + ck = ConfigKey "filter.annex.process" + ckd = ConfigKey "filter.annex.process-temp-disabled" + +unableToRestage :: Maybe RawFilePath -> StringContainingQuotedPath +unableToRestage mf = + "git status will show " <> maybe "some files" QuotedPath mf + <> " to be modified, since content availability has changed" + <> " and git-annex was unable to update the index." + <> " This is only a cosmetic problem affecting git status; git add," + <> " git commit, etc won't be affected." + <> " To fix the git status display, you can run:" + <> " git-annex restage" + +{- Parses a symlink target or a pointer file to a Key. + - + - Makes sure that the pointer file is valid, including not being longer + - than the maximum allowed size of a valid pointer file, and that any + - subsequent lines after the first contain the validPointerLineTag. + - If a valid pointer file gets some other data appended to it, it should + - never be considered valid, unless that data happened to itself be a + - valid pointer file. + -} +parseLinkTargetOrPointer :: S.ByteString -> Maybe Key +parseLinkTargetOrPointer = either (const Nothing) id + . parseLinkTargetOrPointer' + +data InvalidAppendedPointerFile = InvalidAppendedPointerFile + +parseLinkTargetOrPointer' :: S.ByteString -> Either InvalidAppendedPointerFile (Maybe Key) +parseLinkTargetOrPointer' b = + let (firstline, rest) = S8.span (/= '\n') b + in case parsekey $ droptrailing '\r' firstline of + Just k + | S.length b > maxValidPointerSz -> Left InvalidAppendedPointerFile + | restvalid (dropleading '\n' rest) -> Right (Just k) + | otherwise -> Left InvalidAppendedPointerFile + Nothing -> Right Nothing + where + parsekey l + | isLinkToAnnex l = fileKey $ snd $ S8.breakEnd pathsep l + | otherwise = Nothing + + restvalid r + | S.null r = True + | otherwise = + let (l, r') = S8.span (/= '\n') r + in validPointerLineTag `S.isInfixOf` l + && (not (S8.null r') && S8.head r' == '\n') + && restvalid (S8.tail r') + + dropleading c l + | S.null l = l + | S8.head l == c = S8.tail l + | otherwise = l + + droptrailing c l + | S.null l = l + | S8.last l == c = S8.init l + | otherwise = l + + pathsep '/' = True +#ifdef mingw32_HOST_OS + pathsep '\\' = True +#endif + pathsep _ = False + +{- Avoid looking at more of the lazy ByteString than necessary since it + - could be reading from a large file that is not a pointer file. -} +parseLinkTargetOrPointerLazy :: L.ByteString -> Maybe Key +parseLinkTargetOrPointerLazy = either (const Nothing) id + . parseLinkTargetOrPointerLazy' + +parseLinkTargetOrPointerLazy' :: L.ByteString -> Either InvalidAppendedPointerFile (Maybe Key) +parseLinkTargetOrPointerLazy' b = + let b' = L.take (fromIntegral maxPointerSz) b + in parseLinkTargetOrPointer' (L.toStrict b') + +formatPointer :: Key -> S.ByteString +formatPointer k = prefix <> keyFile k <> nl + where + prefix = toInternalGitPath $ P.pathSeparator `S.cons` objectDir + nl = S8.singleton '\n' + +{- Maximum size of a file that could be a pointer to a key. + - Check to avoid buffering really big files in git into + - memory when reading files that may be pointers. + - + - 8192 bytes is plenty for a pointer to a key. This adds some additional + - padding to allow for pointer files that have lines of additional data + - after the key. + - + - One additional byte is used to detect when a valid pointer file + - got something else appended to it. + -} +maxPointerSz :: Int +maxPointerSz = maxValidPointerSz + 1 + +{- Maximum size of a valid pointer files is 32kb. -} +maxValidPointerSz :: Int +maxValidPointerSz = 32768 + +maxSymlinkSz :: Int +maxSymlinkSz = 8192 + +{- Checks if a worktree file is a pointer to a key. + - + - Unlocked files whose content is present are not detected by this. + - + - It's possible, though unlikely, that an annex symlink points to + - an object that looks like a pointer file. Or that a non-annex + - symlink does. Avoids a false positive in those cases. + - -} +isPointerFile :: RawFilePath -> IO (Maybe Key) +isPointerFile f = catchDefaultIO Nothing $ +#if defined(mingw32_HOST_OS) + withFile (fromRawFilePath f) ReadMode readhandle +#else +#if MIN_VERSION_unix(2,8,0) + let open = do + fd <- openFd (fromRawFilePath f) ReadOnly + (defaultFileFlags { nofollow = True }) + fdToHandle fd + in bracket open hClose readhandle +#else + ifM (isSymbolicLink <$> R.getSymbolicLinkStatus f) + ( return Nothing + , withFile (fromRawFilePath f) ReadMode readhandle + ) +#endif +#endif + where + readhandle h = parseLinkTargetOrPointer <$> S.hGet h maxPointerSz + +{- Checks a symlink target or pointer file first line to see if it + - appears to point to annexed content. + - + - We only look for paths inside the .git directory, and not at the .git + - directory itself, because GIT_DIR may cause a directory name other + - than .git to be used. + -} +isLinkToAnnex :: S.ByteString -> Bool +isLinkToAnnex s = p `S.isInfixOf` s +#ifdef mingw32_HOST_OS + -- '/' is used inside pointer files on Windows, not the native '\' + || p' `S.isInfixOf` s +#endif + where + p = P.pathSeparator `S.cons` objectDir +#ifdef mingw32_HOST_OS + p' = toInternalGitPath p +#endif + +{- String that must appear on every line of a valid pointer file. -} +validPointerLineTag :: S.ByteString +validPointerLineTag = "/annex/" diff --git a/Annex/Locations.hs b/Annex/Locations.hs new file mode 100644 index 0000000000..28494bed16 --- /dev/null +++ b/Annex/Locations.hs @@ -0,0 +1,727 @@ +{- git-annex file locations + - + - Copyright 2010-2023 Joey Hess + - + - Licensed under the GNU AGPL version 3 or higher. + -} + +{-# LANGUAGE OverloadedStrings #-} + +module Annex.Locations ( + keyFile, + fileKey, + keyPaths, + keyPath, + annexDir, + objectDir, + gitAnnexLocation, + gitAnnexLocation', + gitAnnexLocationDepth, + gitAnnexLink, + gitAnnexLinkCanonical, + gitAnnexContentLock, + gitAnnexContentLockLock, + gitAnnexInodeSentinal, + gitAnnexInodeSentinalCache, + annexLocationsBare, + annexLocationsNonBare, + gitAnnexDir, + gitAnnexObjectDir, + gitAnnexTmpOtherDir, + gitAnnexTmpOtherLock, + gitAnnexTmpOtherDirOld, + gitAnnexTmpWatcherDir, + gitAnnexTmpObjectDir, + gitAnnexTmpObjectLocation, + gitAnnexTmpWorkDir, + gitAnnexBadDir, + gitAnnexBadLocation, + gitAnnexUnusedLog, + gitAnnexKeysDbDir, + gitAnnexKeysDbLock, + gitAnnexKeysDbIndexCache, + gitAnnexFsckState, + gitAnnexFsckDbDir, + gitAnnexFsckDbDirOld, + gitAnnexFsckDbLock, + gitAnnexFsckResultsLog, + gitAnnexUpgradeLog, + gitAnnexUpgradeLock, + gitAnnexSmudgeLog, + gitAnnexSmudgeLock, + gitAnnexRestageLog, + gitAnnexRestageLogOld, + gitAnnexRestageLock, + gitAnnexAdjustedBranchUpdateLog, + gitAnnexAdjustedBranchUpdateLock, + gitAnnexMigrateLog, + gitAnnexMigrateLock, + gitAnnexMigrationsLog, + gitAnnexMigrationsLock, + gitAnnexMoveLog, + gitAnnexMoveLock, + gitAnnexExportDir, + gitAnnexExportDbDir, + gitAnnexExportLock, + gitAnnexExportUpdateLock, + gitAnnexExportExcludeLog, + gitAnnexImportDir, + gitAnnexImportLog, + gitAnnexContentIdentifierDbDir, + gitAnnexContentIdentifierLock, + gitAnnexImportFeedDbDir, + gitAnnexImportFeedDbLock, + gitAnnexScheduleState, + gitAnnexTransferDir, + gitAnnexCredsDir, + gitAnnexWebCertificate, + gitAnnexWebPrivKey, + gitAnnexFeedStateDir, + gitAnnexFeedState, + gitAnnexMergeDir, + gitAnnexJournalDir, + gitAnnexPrivateJournalDir, + gitAnnexJournalLock, + gitAnnexGitQueueLock, + gitAnnexIndex, + gitAnnexPrivateIndex, + gitAnnexIndexStatus, + gitAnnexViewIndex, + gitAnnexViewLog, + gitAnnexMergedRefs, + gitAnnexIgnoredRefs, + gitAnnexPidFile, + gitAnnexPidLockFile, + gitAnnexDaemonStatusFile, + gitAnnexDaemonLogFile, + gitAnnexFuzzTestLogFile, + gitAnnexHtmlShim, + gitAnnexUrlFile, + gitAnnexTmpCfgFile, + gitAnnexSshDir, + gitAnnexRemotesDir, + gitAnnexAssistantDefaultDir, + HashLevels(..), + hashDirMixed, + hashDirLower, + preSanitizeKeyName, + reSanitizeKeyName, +) where + +import Data.Char +import Data.Default +import qualified Data.ByteString.Char8 as S8 +import qualified System.FilePath.ByteString as P + +import Common +import Key +import Types.UUID +import Types.GitConfig +import Types.Difference +import qualified Git +import qualified Git.Types as Git +import Git.FilePath +import Annex.DirHashes +import Annex.Fixup +import qualified Utility.RawFilePath as R + +{- Conventions: + - + - Functions ending in "Dir" should always return values ending with a + - trailing path separator. Most code does not rely on that, but a few + - things do. + - + - Everything else should not end in a trailing path sepatator. + - + - Only functions (with names starting with "git") that build a path + - based on a git repository should return full path relative to the git + - repository. Everything else returns path segments. + -} + +{- The directory git annex uses for local state, relative to the .git + - directory -} +annexDir :: RawFilePath +annexDir = P.addTrailingPathSeparator "annex" + +{- The directory git annex uses for locally available object content, + - relative to the .git directory -} +objectDir :: RawFilePath +objectDir = P.addTrailingPathSeparator $ annexDir P. "objects" + +{- Annexed file's possible locations relative to the .git directory + - in a non-bare repository. + - + - Normally it is hashDirMixed. However, it's always possible that a + - bare repository was converted to non-bare, or that the cripped + - filesystem setting changed, so still need to check both. -} +annexLocationsNonBare :: GitConfig -> Key -> [RawFilePath] +annexLocationsNonBare config key = + map (annexLocation config key) [hashDirMixed, hashDirLower] + +{- Annexed file's possible locations relative to a bare repository. -} +annexLocationsBare :: GitConfig -> Key -> [RawFilePath] +annexLocationsBare config key = + map (annexLocation config key) [hashDirLower, hashDirMixed] + +annexLocation :: GitConfig -> Key -> (HashLevels -> Hasher) -> RawFilePath +annexLocation config key hasher = objectDir P. keyPath key (hasher $ objectHashLevels config) + +{- Number of subdirectories from the gitAnnexObjectDir + - to the gitAnnexLocation. -} +gitAnnexLocationDepth :: GitConfig -> Int +gitAnnexLocationDepth config = hashlevels + 1 + where + HashLevels hashlevels = objectHashLevels config + +{- Annexed object's location in a repository. + - + - When there are multiple possible locations, returns the one where the + - file is actually present. + - + - When the file is not present, returns the location where the file should + - be stored. + -} +gitAnnexLocation :: Key -> Git.Repo -> GitConfig -> IO RawFilePath +gitAnnexLocation = gitAnnexLocation' R.doesPathExist + +gitAnnexLocation' :: (RawFilePath -> IO Bool) -> Key -> Git.Repo -> GitConfig -> IO RawFilePath +gitAnnexLocation' checker key r config = gitAnnexLocation'' key r config + (annexCrippledFileSystem config) + (coreSymlinks config) + checker + (Git.localGitDir r) + +gitAnnexLocation'' :: Key -> Git.Repo -> GitConfig -> Bool -> Bool -> (RawFilePath -> IO Bool) -> RawFilePath -> IO RawFilePath +gitAnnexLocation'' key r config crippled symlinkssupported checker gitdir + {- Bare repositories default to hashDirLower for new + - content, as it's more portable. But check all locations. -} + | Git.repoIsLocalBare r = checkall annexLocationsBare + {- If the repository is configured to only use lower, no need + - to check both. -} + | hasDifference ObjectHashLower (annexDifferences config) = + only hashDirLower + {- Repositories on crippled filesystems use same layout as bare + - repos for new content, unless symlinks are supported too. -} + | crippled = if symlinkssupported + then checkall annexLocationsNonBare + else checkall annexLocationsBare + | otherwise = checkall annexLocationsNonBare + where + only = return . inrepo . annexLocation config key + checkall f = check $ map inrepo $ f config key + + inrepo d = gitdir P. d + check locs@(l:_) = fromMaybe l <$> firstM checker locs + check [] = error "internal" + +{- Calculates a symlink target to link a file to an annexed object. -} +gitAnnexLink :: RawFilePath -> Key -> Git.Repo -> GitConfig -> IO RawFilePath +gitAnnexLink file key r config = do + currdir <- R.getCurrentDirectory + let absfile = absNormPathUnix currdir file + let gitdir = getgitdir currdir + loc <- gitAnnexLocation'' key r config False False (\_ -> return True) gitdir + toInternalGitPath <$> relPathDirToFile (parentDir absfile) loc + where + getgitdir currdir + {- This special case is for git submodules on filesystems not + - supporting symlinks; generate link target that will + - work portably. -} + | not (coreSymlinks config) && needsSubmoduleFixup r = + absNormPathUnix currdir (Git.repoPath r P. ".git") + | otherwise = Git.localGitDir r + absNormPathUnix d p = toInternalGitPath $ + absPathFrom (toInternalGitPath d) (toInternalGitPath p) + +{- Calculates a symlink target as would be used in a typical git + - repository, with .git in the top of the work tree. -} +gitAnnexLinkCanonical :: RawFilePath -> Key -> Git.Repo -> GitConfig -> IO RawFilePath +gitAnnexLinkCanonical file key r config = gitAnnexLink file key r' config' + where + r' = case r of + Git.Repo { Git.location = l@Git.Local { Git.worktree = Just wt } } -> + r { Git.location = l { Git.gitdir = wt P. ".git" } } + _ -> r + config' = config + { annexCrippledFileSystem = False + , coreSymlinks = True + } + +{- File used to lock a key's content. -} +gitAnnexContentLock :: Key -> Git.Repo -> GitConfig -> IO RawFilePath +gitAnnexContentLock key r config = do + loc <- gitAnnexLocation key r config + return $ loc <> ".lck" + +{- Lock that is held when taking the gitAnnexContentLock to support the v10 + - upgrade. + - + - This uses the gitAnnexInodeSentinal file, because it needs to be a file + - that exists in the repository, even when it's an old v8 repository that + - is mounted read-only. The gitAnnexInodeSentinal is created by git-annex + - init, so should already exist. + -} +gitAnnexContentLockLock :: Git.Repo -> RawFilePath +gitAnnexContentLockLock = gitAnnexInodeSentinal + +gitAnnexInodeSentinal :: Git.Repo -> RawFilePath +gitAnnexInodeSentinal r = gitAnnexDir r P. "sentinal" + +gitAnnexInodeSentinalCache :: Git.Repo -> RawFilePath +gitAnnexInodeSentinalCache r = gitAnnexInodeSentinal r <> ".cache" + +{- The annex directory of a repository. -} +gitAnnexDir :: Git.Repo -> RawFilePath +gitAnnexDir r = P.addTrailingPathSeparator $ Git.localGitDir r P. annexDir + +{- The part of the annex directory where file contents are stored. -} +gitAnnexObjectDir :: Git.Repo -> RawFilePath +gitAnnexObjectDir r = P.addTrailingPathSeparator $ + Git.localGitDir r P. objectDir + +{- .git/annex/tmp/ is used for temp files for key's contents -} +gitAnnexTmpObjectDir :: Git.Repo -> RawFilePath +gitAnnexTmpObjectDir r = P.addTrailingPathSeparator $ + gitAnnexDir r P. "tmp" + +{- .git/annex/othertmp/ is used for other temp files -} +gitAnnexTmpOtherDir :: Git.Repo -> RawFilePath +gitAnnexTmpOtherDir r = P.addTrailingPathSeparator $ + gitAnnexDir r P. "othertmp" + +{- Lock file for gitAnnexTmpOtherDir. -} +gitAnnexTmpOtherLock :: Git.Repo -> RawFilePath +gitAnnexTmpOtherLock r = gitAnnexDir r P. "othertmp.lck" + +{- .git/annex/misctmp/ was used by old versions of git-annex and is still + - used during initialization -} +gitAnnexTmpOtherDirOld :: Git.Repo -> RawFilePath +gitAnnexTmpOtherDirOld r = P.addTrailingPathSeparator $ + gitAnnexDir r P. "misctmp" + +{- .git/annex/watchtmp/ is used by the watcher and assistant -} +gitAnnexTmpWatcherDir :: Git.Repo -> RawFilePath +gitAnnexTmpWatcherDir r = P.addTrailingPathSeparator $ + gitAnnexDir r P. "watchtmp" + +{- The temp file to use for a given key's content. -} +gitAnnexTmpObjectLocation :: Key -> Git.Repo -> RawFilePath +gitAnnexTmpObjectLocation key r = gitAnnexTmpObjectDir r P. keyFile key + +{- Given a temp file such as gitAnnexTmpObjectLocation, makes a name for a + - subdirectory in the same location, that can be used as a work area + - when receiving the key's content. + - + - There are ordering requirements for creating these directories; + - use Annex.Content.withTmpWorkDir to set them up. + -} +gitAnnexTmpWorkDir :: RawFilePath -> RawFilePath +gitAnnexTmpWorkDir p = + let (dir, f) = P.splitFileName p + -- Using a prefix avoids name conflict with any other keys. + in dir P. "work." <> f + +{- .git/annex/bad/ is used for bad files found during fsck -} +gitAnnexBadDir :: Git.Repo -> RawFilePath +gitAnnexBadDir r = P.addTrailingPathSeparator $ gitAnnexDir r P. "bad" + +{- The bad file to use for a given key. -} +gitAnnexBadLocation :: Key -> Git.Repo -> RawFilePath +gitAnnexBadLocation key r = gitAnnexBadDir r P. keyFile key + +{- .git/annex/foounused is used to number possibly unused keys -} +gitAnnexUnusedLog :: RawFilePath -> Git.Repo -> RawFilePath +gitAnnexUnusedLog prefix r = gitAnnexDir r P. (prefix <> "unused") + +{- .git/annex/keysdb/ contains a database of information about keys. -} +gitAnnexKeysDbDir :: Git.Repo -> GitConfig -> RawFilePath +gitAnnexKeysDbDir r c = fromMaybe (gitAnnexDir r) (annexDbDir c) P. "keysdb" + +{- Lock file for the keys database. -} +gitAnnexKeysDbLock :: Git.Repo -> GitConfig -> RawFilePath +gitAnnexKeysDbLock r c = gitAnnexKeysDbDir r c <> ".lck" + +{- Contains the stat of the last index file that was + - reconciled with the keys database. -} +gitAnnexKeysDbIndexCache :: Git.Repo -> GitConfig -> RawFilePath +gitAnnexKeysDbIndexCache r c = gitAnnexKeysDbDir r c <> ".cache" + +{- .git/annex/fsck/uuid/ is used to store information about incremental + - fscks. -} +gitAnnexFsckDir :: UUID -> Git.Repo -> Maybe GitConfig -> RawFilePath +gitAnnexFsckDir u r mc = case annexDbDir =<< mc of + Nothing -> go (gitAnnexDir r) + Just d -> go d + where + go d = d P. "fsck" P. fromUUID u + +{- used to store information about incremental fscks. -} +gitAnnexFsckState :: UUID -> Git.Repo -> RawFilePath +gitAnnexFsckState u r = gitAnnexFsckDir u r Nothing P. "state" + +{- Directory containing database used to record fsck info. -} +gitAnnexFsckDbDir :: UUID -> Git.Repo -> GitConfig -> RawFilePath +gitAnnexFsckDbDir u r c = gitAnnexFsckDir u r (Just c) P. "fsckdb" + +{- Directory containing old database used to record fsck info. -} +gitAnnexFsckDbDirOld :: UUID -> Git.Repo -> GitConfig -> RawFilePath +gitAnnexFsckDbDirOld u r c = gitAnnexFsckDir u r (Just c) P. "db" + +{- Lock file for the fsck database. -} +gitAnnexFsckDbLock :: UUID -> Git.Repo -> GitConfig -> RawFilePath +gitAnnexFsckDbLock u r c = gitAnnexFsckDir u r (Just c) P. "fsck.lck" + +{- .git/annex/fsckresults/uuid is used to store results of git fscks -} +gitAnnexFsckResultsLog :: UUID -> Git.Repo -> RawFilePath +gitAnnexFsckResultsLog u r = + gitAnnexDir r P. "fsckresults" P. fromUUID u + +{- .git/annex/upgrade.log is used to record repository version upgrades. -} +gitAnnexUpgradeLog :: Git.Repo -> RawFilePath +gitAnnexUpgradeLog r = gitAnnexDir r P. "upgrade.log" + +gitAnnexUpgradeLock :: Git.Repo -> RawFilePath +gitAnnexUpgradeLock r = gitAnnexDir r P. "upgrade.lck" + +{- .git/annex/smudge.log is used to log smudged worktree files that need to + - be updated. -} +gitAnnexSmudgeLog :: Git.Repo -> RawFilePath +gitAnnexSmudgeLog r = gitAnnexDir r P. "smudge.log" + +gitAnnexSmudgeLock :: Git.Repo -> RawFilePath +gitAnnexSmudgeLock r = gitAnnexDir r P. "smudge.lck" + +{- .git/annex/restage.log is used to log worktree files that need to be + - restaged in git -} +gitAnnexRestageLog :: Git.Repo -> RawFilePath +gitAnnexRestageLog r = gitAnnexDir r P. "restage.log" + +{- .git/annex/restage.old is used while restaging files in git -} +gitAnnexRestageLogOld :: Git.Repo -> RawFilePath +gitAnnexRestageLogOld r = gitAnnexDir r P. "restage.old" + +gitAnnexRestageLock :: Git.Repo -> RawFilePath +gitAnnexRestageLock r = gitAnnexDir r P. "restage.lck" + +{- .git/annex/adjust.log is used to log when the adjusted branch needs to + - be updated. -} +gitAnnexAdjustedBranchUpdateLog :: Git.Repo -> RawFilePath +gitAnnexAdjustedBranchUpdateLog r = gitAnnexDir r P. "adjust.log" + +gitAnnexAdjustedBranchUpdateLock :: Git.Repo -> RawFilePath +gitAnnexAdjustedBranchUpdateLock r = gitAnnexDir r P. "adjust.lck" + +{- .git/annex/migrate.log is used to log migrations before committing them. -} +gitAnnexMigrateLog :: Git.Repo -> RawFilePath +gitAnnexMigrateLog r = gitAnnexDir r P. "migrate.log" + +gitAnnexMigrateLock :: Git.Repo -> RawFilePath +gitAnnexMigrateLock r = gitAnnexDir r P. "migrate.lck" + +{- .git/annex/migrations.log is used to log committed migrations. -} +gitAnnexMigrationsLog :: Git.Repo -> RawFilePath +gitAnnexMigrationsLog r = gitAnnexDir r P. "migrations.log" + +gitAnnexMigrationsLock :: Git.Repo -> RawFilePath +gitAnnexMigrationsLock r = gitAnnexDir r P. "migrations.lck" + +{- .git/annex/move.log is used to log moves that are in progress, + - to better support resuming an interrupted move. -} +gitAnnexMoveLog :: Git.Repo -> RawFilePath +gitAnnexMoveLog r = gitAnnexDir r P. "move.log" + +gitAnnexMoveLock :: Git.Repo -> RawFilePath +gitAnnexMoveLock r = gitAnnexDir r P. "move.lck" + +{- .git/annex/export/ is used to store information about + - exports to special remotes. -} +gitAnnexExportDir :: Git.Repo -> GitConfig -> RawFilePath +gitAnnexExportDir r c = fromMaybe (gitAnnexDir r) (annexDbDir c) P. "export" + +{- Directory containing database used to record export info. -} +gitAnnexExportDbDir :: UUID -> Git.Repo -> GitConfig -> RawFilePath +gitAnnexExportDbDir u r c = + gitAnnexExportDir r c P. fromUUID u P. "exportdb" + +{- Lock file for export database. -} +gitAnnexExportLock :: UUID -> Git.Repo -> GitConfig -> RawFilePath +gitAnnexExportLock u r c = gitAnnexExportDbDir u r c <> ".lck" + +{- Lock file for updating the export database with information from the + - repository. -} +gitAnnexExportUpdateLock :: UUID -> Git.Repo -> GitConfig -> RawFilePath +gitAnnexExportUpdateLock u r c = gitAnnexExportDbDir u r c <> ".upl" + +{- Log file used to keep track of files that were in the tree exported to a + - remote, but were excluded by its preferred content settings. -} +gitAnnexExportExcludeLog :: UUID -> Git.Repo -> RawFilePath +gitAnnexExportExcludeLog u r = gitAnnexDir r P. "export.ex" P. fromUUID u + +{- Directory containing database used to record remote content ids. + - + - (This used to be "cid", but a problem with the database caused it to + - need to be rebuilt with a new name.) + -} +gitAnnexContentIdentifierDbDir :: Git.Repo -> GitConfig -> RawFilePath +gitAnnexContentIdentifierDbDir r c = + fromMaybe (gitAnnexDir r) (annexDbDir c) P. "cidsdb" + +{- Lock file for writing to the content id database. -} +gitAnnexContentIdentifierLock :: Git.Repo -> GitConfig -> RawFilePath +gitAnnexContentIdentifierLock r c = gitAnnexContentIdentifierDbDir r c <> ".lck" + +{- .git/annex/import/ is used to store information about + - imports from special remotes. -} +gitAnnexImportDir :: Git.Repo -> GitConfig -> RawFilePath +gitAnnexImportDir r c = fromMaybe (gitAnnexDir r) (annexDbDir c) P. "import" + +{- File containing state about the last import done from a remote. -} +gitAnnexImportLog :: UUID -> Git.Repo -> GitConfig -> RawFilePath +gitAnnexImportLog u r c = + gitAnnexImportDir r c P. fromUUID u P. "log" + +{- Directory containing database used by importfeed. -} +gitAnnexImportFeedDbDir :: Git.Repo -> GitConfig -> RawFilePath +gitAnnexImportFeedDbDir r c = + fromMaybe (gitAnnexDir r) (annexDbDir c) P. "importfeed" + +{- Lock file for writing to the importfeed database. -} +gitAnnexImportFeedDbLock :: Git.Repo -> GitConfig -> RawFilePath +gitAnnexImportFeedDbLock r c = gitAnnexImportFeedDbDir r c <> ".lck" + +{- .git/annex/schedulestate is used to store information about when + - scheduled jobs were last run. -} +gitAnnexScheduleState :: Git.Repo -> RawFilePath +gitAnnexScheduleState r = gitAnnexDir r P. "schedulestate" + +{- .git/annex/creds/ is used to store credentials to access some special + - remotes. -} +gitAnnexCredsDir :: Git.Repo -> RawFilePath +gitAnnexCredsDir r = P.addTrailingPathSeparator $ gitAnnexDir r P. "creds" + +{- .git/annex/certificate.pem and .git/annex/key.pem are used by the webapp + - when HTTPS is enabled -} +gitAnnexWebCertificate :: Git.Repo -> FilePath +gitAnnexWebCertificate r = fromRawFilePath $ gitAnnexDir r P. "certificate.pem" +gitAnnexWebPrivKey :: Git.Repo -> FilePath +gitAnnexWebPrivKey r = fromRawFilePath $ gitAnnexDir r P. "privkey.pem" + +{- .git/annex/feeds/ is used to record per-key (url) state by importfeed -} +gitAnnexFeedStateDir :: Git.Repo -> RawFilePath +gitAnnexFeedStateDir r = P.addTrailingPathSeparator $ + gitAnnexDir r P. "feedstate" + +gitAnnexFeedState :: Key -> Git.Repo -> RawFilePath +gitAnnexFeedState k r = gitAnnexFeedStateDir r P. keyFile k + +{- .git/annex/merge/ is used as a empty work tree for merges in + - adjusted branches. -} +gitAnnexMergeDir :: Git.Repo -> FilePath +gitAnnexMergeDir r = fromRawFilePath $ + P.addTrailingPathSeparator $ gitAnnexDir r P. "merge" + +{- .git/annex/transfer/ is used to record keys currently + - being transferred, and other transfer bookkeeping info. -} +gitAnnexTransferDir :: Git.Repo -> RawFilePath +gitAnnexTransferDir r = + P.addTrailingPathSeparator $ gitAnnexDir r P. "transfer" + +{- .git/annex/journal/ is used to journal changes made to the git-annex + - branch -} +gitAnnexJournalDir :: Git.Repo -> RawFilePath +gitAnnexJournalDir r = + P.addTrailingPathSeparator $ gitAnnexDir r P. "journal" + +{- .git/annex/journal.private/ is used to journal changes regarding private + - repositories. -} +gitAnnexPrivateJournalDir :: Git.Repo -> RawFilePath +gitAnnexPrivateJournalDir r = + P.addTrailingPathSeparator $ gitAnnexDir r P. "journal-private" + +{- Lock file for the journal. -} +gitAnnexJournalLock :: Git.Repo -> RawFilePath +gitAnnexJournalLock r = gitAnnexDir r P. "journal.lck" + +{- Lock file for flushing a git queue that writes to the git index or + - other git state that should only have one writer at a time. -} +gitAnnexGitQueueLock :: Git.Repo -> RawFilePath +gitAnnexGitQueueLock r = gitAnnexDir r P. "gitqueue.lck" + +{- .git/annex/index is used to stage changes to the git-annex branch -} +gitAnnexIndex :: Git.Repo -> RawFilePath +gitAnnexIndex r = gitAnnexDir r P. "index" + +{- .git/annex/index-private is used to store information that is not to + - be exposed to the git-annex branch. -} +gitAnnexPrivateIndex :: Git.Repo -> RawFilePath +gitAnnexPrivateIndex r = gitAnnexDir r P. "index-private" + +{- Holds the ref of the git-annex branch that the index was last updated to. + - + - The .lck in the name is a historical accident; this is not used as a + - lock. -} +gitAnnexIndexStatus :: Git.Repo -> RawFilePath +gitAnnexIndexStatus r = gitAnnexDir r P. "index.lck" + +{- The index file used to generate a filtered branch view._-} +gitAnnexViewIndex :: Git.Repo -> RawFilePath +gitAnnexViewIndex r = gitAnnexDir r P. "viewindex" + +{- File containing a log of recently accessed views. -} +gitAnnexViewLog :: Git.Repo -> RawFilePath +gitAnnexViewLog r = gitAnnexDir r P. "viewlog" + +{- List of refs that have already been merged into the git-annex branch. -} +gitAnnexMergedRefs :: Git.Repo -> RawFilePath +gitAnnexMergedRefs r = gitAnnexDir r P. "mergedrefs" + +{- List of refs that should not be merged into the git-annex branch. -} +gitAnnexIgnoredRefs :: Git.Repo -> RawFilePath +gitAnnexIgnoredRefs r = gitAnnexDir r P. "ignoredrefs" + +{- Pid file for daemon mode. -} +gitAnnexPidFile :: Git.Repo -> RawFilePath +gitAnnexPidFile r = gitAnnexDir r P. "daemon.pid" + +{- Pid lock file for pidlock mode -} +gitAnnexPidLockFile :: Git.Repo -> RawFilePath +gitAnnexPidLockFile r = gitAnnexDir r P. "pidlock" + +{- Status file for daemon mode. -} +gitAnnexDaemonStatusFile :: Git.Repo -> FilePath +gitAnnexDaemonStatusFile r = fromRawFilePath $ + gitAnnexDir r P. "daemon.status" + +{- Log file for daemon mode. -} +gitAnnexDaemonLogFile :: Git.Repo -> RawFilePath +gitAnnexDaemonLogFile r = gitAnnexDir r P. "daemon.log" + +{- Log file for fuzz test. -} +gitAnnexFuzzTestLogFile :: Git.Repo -> FilePath +gitAnnexFuzzTestLogFile r = fromRawFilePath $ + gitAnnexDir r P. "fuzztest.log" + +{- Html shim file used to launch the webapp. -} +gitAnnexHtmlShim :: Git.Repo -> RawFilePath +gitAnnexHtmlShim r = gitAnnexDir r P. "webapp.html" + +{- File containing the url to the webapp. -} +gitAnnexUrlFile :: Git.Repo -> RawFilePath +gitAnnexUrlFile r = gitAnnexDir r P. "url" + +{- Temporary file used to edit configuriation from the git-annex branch. -} +gitAnnexTmpCfgFile :: Git.Repo -> RawFilePath +gitAnnexTmpCfgFile r = gitAnnexDir r P. "config.tmp" + +{- .git/annex/ssh/ is used for ssh connection caching -} +gitAnnexSshDir :: Git.Repo -> RawFilePath +gitAnnexSshDir r = P.addTrailingPathSeparator $ gitAnnexDir r P. "ssh" + +{- .git/annex/remotes/ is used for remote-specific state. -} +gitAnnexRemotesDir :: Git.Repo -> RawFilePath +gitAnnexRemotesDir r = + P.addTrailingPathSeparator $ gitAnnexDir r P. "remotes" + +{- This is the base directory name used by the assistant when making + - repositories, by default. -} +gitAnnexAssistantDefaultDir :: FilePath +gitAnnexAssistantDefaultDir = "annex" + +{- Sanitizes a String that will be used as part of a Key's keyName, + - dealing with characters that cause problems. + - + - This is used when a new Key is initially being generated, eg by genKey. + - Unlike keyFile and fileKey, it does not need to be a reversible + - escaping. Also, it's ok to change this to add more problematic + - characters later. Unlike changing keyFile, which could result in the + - filenames used for existing keys changing and contents getting lost. + - + - It is, however, important that the input and output of this function + - have a 1:1 mapping, to avoid two different inputs from mapping to the + - same key. + -} +preSanitizeKeyName :: String -> String +preSanitizeKeyName = preSanitizeKeyName' False + +preSanitizeKeyName' :: Bool -> String -> String +preSanitizeKeyName' resanitize = concatMap escape + where + escape c + | isAsciiUpper c || isAsciiLower c || isDigit c = [c] + | c `elem` ['.', '-', '_'] = [c] -- common, assumed safe + | c `elem` ['/', '%', ':'] = [c] -- handled by keyFile + -- , is safe and uncommon, so will be used to escape + -- other characters. By itself, it is escaped to + -- doubled form. + | c == ',' = if not resanitize + then ",," + else "," + | otherwise = ',' : show (ord c) + +{- Converts a keyName that has been santizied with an old version of + - preSanitizeKeyName to be sanitized with the new version. -} +reSanitizeKeyName :: String -> String +reSanitizeKeyName = preSanitizeKeyName' True + +{- Converts a key into a filename fragment without any directory. + - + - Escape "/" in the key name, to keep a flat tree of files and avoid + - issues with keys containing "/../" or ending with "/" etc. + - + - "/" is escaped to "%" because it's short and rarely used, and resembles + - a slash + - "%" is escaped to "&s", and "&" to "&a"; this ensures that the mapping + - is one to one. + - ":" is escaped to "&c", because it seemed like a good idea at the time. + - + - Changing what this function escapes and how is not a good idea, as it + - can cause existing objects to get lost. + -} +keyFile :: Key -> RawFilePath +keyFile k = + let b = serializeKey' k + in if S8.any (`elem` ['&', '%', ':', '/']) b + then S8.concatMap esc b + else b + where + esc '&' = "&a" + esc '%' = "&s" + esc ':' = "&c" + esc '/' = "%" + esc c = S8.singleton c + +{- Reverses keyFile, converting a filename fragment (ie, the basename of + - the symlink target) into a key. -} +fileKey :: RawFilePath -> Maybe Key +fileKey = deserializeKey' . S8.intercalate "/" . map go . S8.split '%' + where + go = S8.concat . unescafterfirst . S8.split '&' + unescafterfirst [] = [] + unescafterfirst (b:bs) = b : map (unesc . S8.uncons) bs + unesc :: Maybe (Char, S8.ByteString) -> S8.ByteString + unesc Nothing = mempty + unesc (Just ('c', b)) = S8.cons ':' b + unesc (Just ('s', b)) = S8.cons '%' b + unesc (Just ('a', b)) = S8.cons '&' b + unesc (Just (c, b)) = S8.cons c b + +{- A location to store a key on a special remote that uses a filesystem. + - A directory hash is used, to protect against filesystems that dislike + - having many items in a single directory. + - + - The file is put in a directory with the same name, this allows + - write-protecting the directory to avoid accidental deletion of the file. + -} +keyPath :: Key -> Hasher -> RawFilePath +keyPath key hasher = hasher key P. f P. f + where + f = keyFile key + +{- All possible locations to store a key in a special remote + - using different directory hashes. + - + - This is compatible with the annexLocationsNonBare and annexLocationsBare, + - for interoperability between special remotes and git-annex repos. + -} +keyPaths :: Key -> [RawFilePath] +keyPaths key = map (\h -> keyPath key (h def)) dirHashes diff --git a/Annex/LockFile.hs b/Annex/LockFile.hs new file mode 100644 index 0000000000..71a07e677c --- /dev/null +++ b/Annex/LockFile.hs @@ -0,0 +1,113 @@ +{- git-annex lock files. + - + - Copyright 2012-2020 Joey Hess + - + - Licensed under the GNU AGPL version 3 or higher. + -} + +{-# LANGUAGE CPP #-} + +module Annex.LockFile ( + lockFileCached, + unlockFile, + getLockCache, + fromLockCache, + withSharedLock, + withExclusiveLock, + takeExclusiveLock, + tryExclusiveLock, +) where + +import Annex.Common +import Annex +import Types.LockCache +import Annex.Perms +import Annex.LockPool + +import qualified Data.Map as M +import qualified System.FilePath.ByteString as P + +{- Create a specified lock file, and takes a shared lock, which is retained + - in the cache. -} +lockFileCached :: RawFilePath -> Annex () +lockFileCached file = go =<< fromLockCache file + where + go (Just _) = noop -- already locked + go Nothing = do +#ifndef mingw32_HOST_OS + mode <- annexFileMode + lockhandle <- lockShared (Just mode) file +#else + lockhandle <- liftIO $ waitToLock $ lockShared file +#endif + changeLockCache $ M.insert file lockhandle + +unlockFile :: RawFilePath -> Annex () +unlockFile file = maybe noop go =<< fromLockCache file + where + go lockhandle = do + liftIO $ dropLock lockhandle + changeLockCache $ M.delete file + +getLockCache :: Annex LockCache +getLockCache = getState lockcache + +fromLockCache :: RawFilePath -> Annex (Maybe LockHandle) +fromLockCache file = M.lookup file <$> getLockCache + +changeLockCache :: (LockCache -> LockCache) -> Annex () +changeLockCache a = do + m <- getLockCache + changeState $ \s -> s { lockcache = a m } + +{- Runs an action with a shared lock held. If an exclusive lock is held, + - blocks until it becomes free. -} +withSharedLock :: RawFilePath -> Annex a -> Annex a +withSharedLock lockfile a = debugLocks $ do + createAnnexDirectory $ P.takeDirectory lockfile + mode <- annexFileMode + bracket (lock mode lockfile) (liftIO . dropLock) (const a) + where +#ifndef mingw32_HOST_OS + lock mode = lockShared (Just mode) +#else + lock _mode = liftIO . waitToLock . lockShared +#endif + +{- Runs an action with an exclusive lock held. If the lock is already + - held, blocks until it becomes free. -} +withExclusiveLock :: RawFilePath -> Annex a -> Annex a +withExclusiveLock lockfile a = bracket + (takeExclusiveLock lockfile) + (liftIO . dropLock) + (const a) + +{- Takes an exclusive lock, blocking until it's free. -} +takeExclusiveLock :: RawFilePath -> Annex LockHandle +takeExclusiveLock lockfile = debugLocks $ do + createAnnexDirectory $ P.takeDirectory lockfile + mode <- annexFileMode + lock mode lockfile + where +#ifndef mingw32_HOST_OS + lock mode = lockExclusive (Just mode) +#else + lock _mode = liftIO . waitToLock . lockExclusive +#endif + +{- Tries to take an exclusive lock and run an action. If the lock is + - already held, returns Nothing. -} +tryExclusiveLock :: RawFilePath -> Annex a -> Annex (Maybe a) +tryExclusiveLock lockfile a = debugLocks $ do + createAnnexDirectory $ P.takeDirectory lockfile + mode <- annexFileMode + bracket (lock mode lockfile) (liftIO . unlock) go + where +#ifndef mingw32_HOST_OS + lock mode = tryLockExclusive (Just mode) +#else + lock _mode = liftIO . lockExclusive +#endif + unlock = maybe noop dropLock + go Nothing = return Nothing + go (Just _) = Just <$> a diff --git a/Annex/LockPool.hs b/Annex/LockPool.hs new file mode 100644 index 0000000000..33df3b611e --- /dev/null +++ b/Annex/LockPool.hs @@ -0,0 +1,17 @@ +{- Wraps Utility.LockPool, making pid locks be used when git-annex is so + - configured. + - + - Copyright 2015 Joey Hess + - + - Licensed under the GNU AGPL version 3 or higher. + -} + +{-# LANGUAGE CPP #-} + +module Annex.LockPool (module X) where + +#ifndef mingw32_HOST_OS +import Annex.LockPool.PosixOrPid as X +#else +import Utility.LockPool.Windows as X +#endif diff --git a/Annex/LockPool/PosixOrPid.hs b/Annex/LockPool/PosixOrPid.hs new file mode 100644 index 0000000000..36426fdaf8 --- /dev/null +++ b/Annex/LockPool/PosixOrPid.hs @@ -0,0 +1,93 @@ +{- Wraps Utility.LockPool, making pid locks be used when git-annex is so + - configured. + - + - Copyright 2015-2021 Joey Hess + - + - Licensed under the GNU AGPL version 3 or higher. + -} + +module Annex.LockPool.PosixOrPid ( + LockFile, + LockHandle, + lockShared, + lockExclusive, + tryLockShared, + tryLockExclusive, + dropLock, + checkLocked, + LockStatus(..), + getLockStatus, + checkSaneLock, +) where + +import Common +import Types +import qualified Annex +import qualified Utility.LockPool.Posix as Posix +import qualified Utility.LockPool.PidLock as Pid +import qualified Utility.LockPool.LockHandle as H +import Utility.FileMode +import Utility.LockPool.LockHandle (LockHandle, dropLock) +import Utility.LockFile.Posix (openLockFile) +import Utility.LockPool.STM (LockFile, LockMode(..)) +import Utility.LockFile.LockStatus +import Config (pidLockFile) +import Messages (warning) +import Git.Quote + +import System.Posix + +lockShared :: Maybe ModeSetter -> LockFile -> Annex LockHandle +lockShared m f = pidLock m f LockShared $ Posix.lockShared m f + +lockExclusive :: Maybe ModeSetter -> LockFile -> Annex LockHandle +lockExclusive m f = pidLock m f LockExclusive $ Posix.lockExclusive m f + +tryLockShared :: Maybe ModeSetter -> LockFile -> Annex (Maybe LockHandle) +tryLockShared m f = tryPidLock m f LockShared $ Posix.tryLockShared m f + +tryLockExclusive :: Maybe ModeSetter -> LockFile -> Annex (Maybe LockHandle) +tryLockExclusive m f = tryPidLock m f LockExclusive $ Posix.tryLockExclusive m f + +checkLocked :: LockFile -> Annex (Maybe Bool) +checkLocked f = Posix.checkLocked f `pidLockCheck` checkpid + where + checkpid pidlock = Pid.checkLocked pidlock >>= \case + -- Only return true when the posix lock file exists. + Just _ -> Posix.checkLocked f + Nothing -> return Nothing + +getLockStatus :: LockFile -> Annex LockStatus +getLockStatus f = Posix.getLockStatus f + `pidLockCheck` Pid.getLockStatus + +checkSaneLock :: LockFile -> LockHandle -> Annex Bool +checkSaneLock f h = H.checkSaneLock f h + `pidLockCheck` flip Pid.checkSaneLock h + +pidLockCheck :: IO a -> (LockFile -> IO a) -> Annex a +pidLockCheck posixcheck pidcheck = debugLocks $ + liftIO . maybe posixcheck pidcheck =<< pidLockFile + +pidLock :: Maybe ModeSetter -> LockFile -> LockMode -> IO LockHandle -> Annex LockHandle +pidLock m f lockmode posixlock = debugLocks $ go =<< pidLockFile + where + go Nothing = liftIO posixlock + go (Just pidlock) = do + timeout <- annexPidLockTimeout <$> Annex.getGitConfig + liftIO $ dummyPosixLock m f + Pid.waitLock f lockmode timeout pidlock (warning . UnquotedString) + +tryPidLock :: Maybe ModeSetter -> LockFile -> LockMode -> IO (Maybe LockHandle) -> Annex (Maybe LockHandle) +tryPidLock m f lockmode posixlock = debugLocks $ liftIO . go =<< pidLockFile + where + go Nothing = posixlock + go (Just pidlock) = do + dummyPosixLock m f + Pid.tryLock f lockmode pidlock + +-- The posix lock file is created even when using pid locks, in order to +-- avoid complicating any code that might expect to be able to see that +-- lock file. But, it's not locked. +dummyPosixLock :: Maybe ModeSetter -> LockFile -> IO () +dummyPosixLock m f = bracket (openLockFile ReadLock m f) closeFd (const noop) diff --git a/Annex/Magic.hs b/Annex/Magic.hs new file mode 100644 index 0000000000..c408cd50d0 --- /dev/null +++ b/Annex/Magic.hs @@ -0,0 +1,74 @@ +{- Interface to libmagic + - + - Copyright 2019-2020 Joey Hess + - + - Licensed under the GNU AGPL version 3 or higher. + -} + +{-# LANGUAGE CPP #-} + +module Annex.Magic ( + Magic, + MimeType, + MimeEncoding, + initMagicMime, + getMagicMimeType, + getMagicMimeEncoding, +) where + +import Types.Mime +import Control.Monad.IO.Class +#ifdef WITH_MAGICMIME +import Magic +import Utility.Env +import Control.Concurrent +import System.IO.Unsafe (unsafePerformIO) +import Common +#else +type Magic = () +#endif + +initMagicMime :: IO (Maybe Magic) +#ifdef WITH_MAGICMIME +initMagicMime = catchMaybeIO $ do + m <- magicOpen [MagicMime] + liftIO $ getEnv "GIT_ANNEX_DIR" >>= \case + Nothing -> magicLoadDefault m + Just d -> magicLoad m + (d "magic" "magic.mgc") + return m +#else +initMagicMime = return Nothing +#endif + +getMagicMime :: Magic -> FilePath -> IO (Maybe (MimeType, MimeEncoding)) +#ifdef WITH_MAGICMIME +getMagicMime m f = Just . parse <$> magicConcurrentSafe (magicFile m f) + where + parse s = + let (mimetype, rest) = separate (== ';') s + in case rest of + (' ':'c':'h':'a':'r':'s':'e':'t':'=':mimeencoding) -> + (mimetype, mimeencoding) + _ -> (mimetype, "") +#else +getMagicMime _ _ = return Nothing +#endif + +getMagicMimeType :: MonadIO m => Magic -> FilePath -> m (Maybe MimeType) +getMagicMimeType m f = liftIO $ fmap fst <$> getMagicMime m f + +getMagicMimeEncoding :: MonadIO m => Magic -> FilePath -> m(Maybe MimeEncoding) +getMagicMimeEncoding m f = liftIO $ fmap snd <$> getMagicMime m f + +#ifdef WITH_MAGICMIME +{-# NOINLINE mutex #-} +mutex :: MVar () +mutex = unsafePerformIO $ newMVar () + +-- Work around a bug, the library is not concurrency safe and will +-- sometimes access the wrong memory if multiple ones are called at the +-- same time. +magicConcurrentSafe :: IO a -> IO a +magicConcurrentSafe = bracket_ (takeMVar mutex) (putMVar mutex ()) +#endif diff --git a/Annex/MetaData.hs b/Annex/MetaData.hs new file mode 100644 index 0000000000..1eba836455 --- /dev/null +++ b/Annex/MetaData.hs @@ -0,0 +1,121 @@ +{- git-annex metadata + - + - Copyright 2014-2016 Joey Hess + - + - Licensed under the GNU AGPL version 3 or higher. + -} + +module Annex.MetaData ( + genMetaData, + dateMetaData, + parseModMeta, + parseMetaDataMatcher, + module X +) where + +import Annex.Common +import qualified Annex +import Types.MetaData as X +import Annex.MetaData.StandardFields as X +import Logs.MetaData +import Annex.CatFile +import Utility.Glob + +import qualified Data.Set as S +import qualified Data.Text as T +import Data.Time.Calendar +import Data.Time.Clock +import Data.Time.Clock.POSIX +import Text.Read + +{- Adds metadata for a file that has just been ingested into the + - annex, but has not yet been committed to git. + - + - When the file has been modified, the metadata is copied over + - from the old key to the new key. Note that it looks at the old key as + - committed to HEAD -- the new key may or may not have already been staged + - in the index. + - + - Also, can generate new metadata, if configured to do so. + -} +genMetaData :: Key -> RawFilePath -> Maybe POSIXTime -> Annex () +genMetaData key file mmtime = do + catKeyFileHEAD file >>= \case + Nothing -> noop + Just oldkey -> + -- Have to copy first, before adding any + -- more metadata, because copyMetaData does not + -- preserve any metadata already on key. + whenM (copyMetaData oldkey key <&&> (not <$> onlydatemeta oldkey)) $ + warncopied + whenM (annexGenMetaData <$> Annex.getGitConfig) $ + case mmtime of + Just mtime -> do + old <- getCurrentMetaData key + addMetaData key $ + dateMetaData (posixSecondsToUTCTime mtime) old + Nothing -> noop + where + warncopied = warning $ UnquotedString $ + "Copied metadata from old version of " ++ fromRawFilePath file ++ " to new version. " ++ + "If you don't want this copied metadata, run: git annex metadata --remove-all " ++ fromRawFilePath file + -- If the only fields copied were date metadata, and they'll + -- be overwritten with the current mtime, no need to warn about + -- copying. + onlydatemeta oldkey = ifM (annexGenMetaData <$> Annex.getGitConfig) + ( null . filter (not . isDateMetaField . fst) . fromMetaData + <$> getCurrentMetaData oldkey + , return False + ) + +{- Generates metadata for a file's date stamp. + - + - Any date fields in the old metadata will be overwritten. + - + - Note that the returned MetaData does not contain all the input MetaData, + - only changes to add the date fields. -} +dateMetaData :: UTCTime -> MetaData -> MetaData +dateMetaData mtime old = modMeta old $ + (SetMeta yearMetaField $ S.singleton $ toMetaValue $ encodeBS $ show y) + `ComposeModMeta` + (SetMeta monthMetaField $ S.singleton $ toMetaValue $ encodeBS $ show m) + `ComposeModMeta` + (SetMeta dayMetaField $ S.singleton $ toMetaValue $ encodeBS $ show d) + where + (y, m, d) = toGregorian $ utctDay mtime + +{- Parses field=value, field+=value, field-=value, field?=value -} +parseModMeta :: String -> Either String ModMeta +parseModMeta p = case lastMaybe f of + Just '+' -> AddMeta <$> mkMetaField (T.pack f') <*> v + Just '-' -> DelMeta <$> mkMetaField (T.pack f') <*> (Just <$> v) + Just '?' -> MaybeSetMeta <$> mkMetaField (T.pack f') <*> v + _ -> SetMeta <$> mkMetaField (T.pack f) <*> (S.singleton <$> v) + where + (f, sv) = separate (== '=') p + f' = beginning f + v = pure (toMetaValue (encodeBS sv)) + +{- Parses field=value, fieldvalue, field>=value -} +parseMetaDataMatcher :: String -> Either String (MetaField, MetaValue -> Bool) +parseMetaDataMatcher p = (,) + <$> mkMetaField (T.pack f) + <*> pure matcher + where + (f, op_v) = break (`elem` "=<>") p + matcher = case op_v of + ('=':v) -> checkglob v + ('<':'=':v) -> checkcmp (<=) (<=) v + ('<':v) -> checkcmp (<) (<) v + ('>':'=':v) -> checkcmp (>=) (>=) v + ('>':v) -> checkcmp (>) (>) v + _ -> checkglob "" + checkglob v = + let cglob = compileGlob v CaseInsensitive (GlobFilePath False) + in matchGlob cglob . decodeBS . fromMetaValue + checkcmp cmp cmp' v mv' = + let v' = decodeBS (fromMetaValue mv') + in case (doubleval v, doubleval v') of + (Just d, Just d') -> d' `cmp` d + _ -> v' `cmp'` v + doubleval v = readMaybe v :: Maybe Double diff --git a/Annex/MetaData/StandardFields.hs b/Annex/MetaData/StandardFields.hs new file mode 100644 index 0000000000..061133b41c --- /dev/null +++ b/Annex/MetaData/StandardFields.hs @@ -0,0 +1,67 @@ +{- git-annex metadata, standard fields + - + - Copyright 2014 Joey Hess + - + - Licensed under the GNU AGPL version 3 or higher. + -} + +{-# LANGUAGE OverloadedStrings #-} + +module Annex.MetaData.StandardFields ( + tagMetaField, + yearMetaField, + monthMetaField, + dayMetaField, + isDateMetaField, + lastChangedField, + mkLastChangedField, + isLastChangedField, + itemIdField +) where + +import Types.MetaData + +import qualified Data.Text as T +import Data.Monoid +import Prelude + +tagMetaField :: MetaField +tagMetaField = mkMetaFieldUnchecked "tag" + +yearMetaField :: MetaField +yearMetaField = mkMetaFieldUnchecked "year" + +monthMetaField :: MetaField +monthMetaField = mkMetaFieldUnchecked "month" + +dayMetaField :: MetaField +dayMetaField = mkMetaFieldUnchecked "day" + +isDateMetaField :: MetaField -> Bool +isDateMetaField f + | f == yearMetaField = True + | f == monthMetaField = True + | f == dayMetaField = True + | otherwise = False + +lastChangedField :: MetaField +lastChangedField = mkMetaFieldUnchecked lastchanged + +mkLastChangedField :: MetaField -> MetaField +mkLastChangedField f = mkMetaFieldUnchecked (fromMetaField f <> lastchangedSuffix) + +isLastChangedField :: MetaField -> Bool +isLastChangedField f + | f == lastChangedField = True + | otherwise = lastchanged `T.isSuffixOf` s && s /= lastchangedSuffix + where + s = fromMetaField f + +lastchanged :: T.Text +lastchanged = "lastchanged" + +lastchangedSuffix :: T.Text +lastchangedSuffix = "-lastchanged" + +itemIdField :: MetaField +itemIdField = mkMetaFieldUnchecked "itemid" diff --git a/Annex/Multicast.hs b/Annex/Multicast.hs new file mode 100644 index 0000000000..1443de776c --- /dev/null +++ b/Annex/Multicast.hs @@ -0,0 +1,44 @@ +{- git-annex multicast receive callback + - + - Copyright 2017 Joey Hess + - + - Licensed under the GNU AGPL version 3 or higher. + -} + +module Annex.Multicast where + +import Annex.Path +import Utility.Env +import Utility.PartialPrelude + +import System.Process +import System.IO +import GHC.IO.Handle.FD +import Control.Applicative +import Prelude + +multicastReceiveEnv :: String +multicastReceiveEnv = "GIT_ANNEX_MULTICAST_RECEIVE" + +multicastCallbackEnv :: IO (FilePath, [(String, String)], Handle) +multicastCallbackEnv = do + gitannex <- programPath + -- This will even work on Windows + (rfd, wfd) <- createPipeFd + rh <- fdToHandle rfd + environ <- addEntry multicastReceiveEnv (show wfd) <$> getEnvironment + return (gitannex, environ, rh) + +-- This is run when uftpd has received a file. Rather than move +-- the file into the annex here, which would require starting up the +-- Annex monad, parsing git config, and verifying the content, simply +-- output to the specified FD the filename. This keeps the time +-- that uftpd is not receiving the next file as short as possible. +runMulticastReceive :: [String] -> String -> IO () +runMulticastReceive ("-I":_sessionid:fs) hs = case readish hs of + Just fd -> do + h <- fdToHandle fd + mapM_ (hPutStrLn h) fs + hClose h + Nothing -> return () +runMulticastReceive _ _ = return () diff --git a/Annex/Notification.hs b/Annex/Notification.hs new file mode 100644 index 0000000000..f205797359 --- /dev/null +++ b/Annex/Notification.hs @@ -0,0 +1,108 @@ +{- git-annex desktop notifications + - + - Copyright 2014 Joey Hess + - + - Licensed under the GNU AGPL version 3 or higher. + -} + +{-# LANGUAGE TypeSynonymInstances, FlexibleInstances #-} +{-# LANGUAGE CPP #-} + +module Annex.Notification (NotifyWitness, noNotification, notifyTransfer, notifyDrop) where + +import Annex.Common +import Types.Transfer +#ifdef WITH_DBUS_NOTIFICATIONS +import qualified Annex +import Types.DesktopNotify +import qualified DBus.Notify as Notify +import qualified DBus.Client +#endif + +-- Witness that notification has happened. +data NotifyWitness = NotifyWitness + +-- Only use when no notification should be done. +noNotification :: NotifyWitness +noNotification = NotifyWitness + +{- Wrap around an action that performs a transfer, which may run multiple + - attempts. Displays notification when supported and when the user asked + - for it. -} +notifyTransfer :: Transferrable t => Observable v => Direction -> t -> (NotifyWitness -> Annex v) -> Annex v +#ifdef WITH_DBUS_NOTIFICATIONS +notifyTransfer direction t a = case descTransfrerrable t of + Nothing -> a NotifyWitness + Just desc -> do + wanted <- Annex.getRead Annex.desktopnotify + if (notifyStart wanted || notifyFinish wanted) + then do + client <- liftIO DBus.Client.connectSession + startnotification <- liftIO $ if notifyStart wanted + then Just <$> Notify.notify client (startedTransferNote direction desc) + else pure Nothing + res <- a NotifyWitness + let ok = observeBool res + when (notifyFinish wanted) $ liftIO $ void $ maybe + (Notify.notify client $ finishedTransferNote ok direction desc) + (\n -> Notify.replace client n $ finishedTransferNote ok direction desc) + startnotification + return res + else a NotifyWitness +#else +notifyTransfer _ _ a = a NotifyWitness +#endif + +notifyDrop :: AssociatedFile -> Bool -> Annex () +notifyDrop (AssociatedFile Nothing) _ = noop +#ifdef WITH_DBUS_NOTIFICATIONS +notifyDrop (AssociatedFile (Just f)) ok = do + wanted <- Annex.getRead Annex.desktopnotify + when (notifyFinish wanted) $ liftIO $ do + client <- DBus.Client.connectSession + void $ Notify.notify client (droppedNote ok (fromRawFilePath f)) +#else +notifyDrop (AssociatedFile (Just _)) _ = noop +#endif + +#ifdef WITH_DBUS_NOTIFICATIONS +startedTransferNote :: Direction -> String -> Notify.Note +startedTransferNote Upload = mkNote Notify.Transfer Notify.Low iconUpload + "Uploading" +startedTransferNote Download = mkNote Notify.Transfer Notify.Low iconDownload + "Downloading" + +finishedTransferNote :: Bool -> Direction -> String -> Notify.Note +finishedTransferNote False Upload = mkNote Notify.TransferError Notify.Normal iconFailure + "Failed to upload" +finishedTransferNote False Download = mkNote Notify.TransferError Notify.Normal iconFailure + "Failed to download" +finishedTransferNote True Upload = mkNote Notify.TransferComplete Notify.Low iconSuccess + "Finished uploading" +finishedTransferNote True Download = mkNote Notify.TransferComplete Notify.Low iconSuccess + "Finished downloading" + +droppedNote :: Bool -> String -> Notify.Note +droppedNote False = mkNote Notify.TransferError Notify.Normal iconFailure + "Failed to drop" +droppedNote True = mkNote Notify.TransferComplete Notify.Low iconSuccess + "Dropped" + +iconUpload, iconDownload, iconFailure, iconSuccess :: String +iconUpload = "network-transmit" +iconDownload = "network-receive" +iconFailure = "dialog-error" +iconSuccess = "git-annex" -- Is there a standard icon for success/completion? + +mkNote :: Notify.Category -> Notify.UrgencyLevel -> String -> String -> FilePath -> Notify.Note +mkNote category urgency icon desc path = Notify.blankNote + { Notify.appName = "git-annex" + , Notify.appImage = Just (Notify.Icon icon) + , Notify.summary = desc ++ " " ++ path + , Notify.hints = + [ Notify.Category category + , Notify.Urgency urgency + , Notify.SuppressSound True + ] + } +#endif diff --git a/Annex/NumCopies.hs b/Annex/NumCopies.hs new file mode 100644 index 0000000000..69b1943d87 --- /dev/null +++ b/Annex/NumCopies.hs @@ -0,0 +1,333 @@ +{- git-annex numcopies configuration and checking + - + - Copyright 2014-2021 Joey Hess + - + - Licensed under the GNU AGPL version 3 or higher. + -} + +{-# LANGUAGE ScopedTypeVariables, DeriveDataTypeable, OverloadedStrings #-} + +module Annex.NumCopies ( + module Types.NumCopies, + module Logs.NumCopies, + getFileNumMinCopies, + getSafestNumMinCopies, + getSafestNumMinCopies', + getGlobalFileNumCopies, + getNumCopies, + getMinCopies, + deprecatedNumCopies, + defaultNumCopies, + numCopiesCheck, + numCopiesCheck', + verifyEnoughCopiesToDrop, + verifiableCopies, + UnVerifiedCopy(..), +) where + +import Annex.Common +import qualified Annex +import Types.NumCopies +import Logs.NumCopies +import Logs.Trust +import Annex.CheckAttr +import qualified Remote +import qualified Types.Remote as Remote +import Annex.Content +import Annex.UUID +import Annex.CatFile +import qualified Database.Keys + +import Control.Exception +import qualified Control.Monad.Catch as M +import Data.Typeable + +defaultNumCopies :: NumCopies +defaultNumCopies = configuredNumCopies 1 + +defaultMinCopies :: MinCopies +defaultMinCopies = configuredMinCopies 1 + +fromSourcesOr :: v -> [Annex (Maybe v)] -> Annex v +fromSourcesOr v = fromMaybe v <$$> getM id + +{- The git config annex.numcopies is deprecated. -} +deprecatedNumCopies :: Annex (Maybe NumCopies) +deprecatedNumCopies = annexNumCopies <$> Annex.getGitConfig + +{- Value forced on the command line by --numcopies. -} +getForcedNumCopies :: Annex (Maybe NumCopies) +getForcedNumCopies = Annex.getRead Annex.forcenumcopies + +{- Value forced on the command line by --mincopies. -} +getForcedMinCopies :: Annex (Maybe MinCopies) +getForcedMinCopies = Annex.getRead Annex.forcemincopies + +{- NumCopies value from any of the non-.gitattributes configuration + - sources. -} +getNumCopies :: Annex NumCopies +getNumCopies = fromSourcesOr defaultNumCopies + [ getForcedNumCopies + , getGlobalNumCopies + , deprecatedNumCopies + ] + +{- MinCopies value from any of the non-.gitattributes configuration + - sources. -} +getMinCopies :: Annex MinCopies +getMinCopies = fromSourcesOr defaultMinCopies + [ getForcedMinCopies + , getGlobalMinCopies + ] + +{- NumCopies and MinCopies value for a file, from any configuration source, + - including .gitattributes. -} +getFileNumMinCopies :: RawFilePath -> Annex (NumCopies, MinCopies) +getFileNumMinCopies f = do + fnumc <- getForcedNumCopies + fminc <- getForcedMinCopies + case (fnumc, fminc) of + (Just numc, Just minc) -> return (numc, minc) + (Just numc, Nothing) -> do + minc <- fromSourcesOr defaultMinCopies + [ snd <$> getNumMinCopiesAttr f + , getGlobalMinCopies + ] + return (numc, minc) + (Nothing, Just minc) -> do + numc <- fromSourcesOr defaultNumCopies + [ fst <$> getNumMinCopiesAttr f + , getGlobalNumCopies + , deprecatedNumCopies + ] + return (numc, minc) + (Nothing, Nothing) -> do + let fallbacknum = fromSourcesOr defaultNumCopies + [ getGlobalNumCopies + , deprecatedNumCopies + ] + let fallbackmin = fromSourcesOr defaultMinCopies + [ getGlobalMinCopies + ] + getNumMinCopiesAttr f >>= \case + (Just numc, Just minc) -> + return (numc, minc) + (Just numc, Nothing) -> (,) + <$> pure numc + <*> fallbackmin + (Nothing, Just minc) -> (,) + <$> fallbacknum + <*> pure minc + (Nothing, Nothing) -> (,) + <$> fallbacknum + <*> fallbackmin + +{- Gets the highest NumCopies and MinCopies value for all files + - associated with a key. Provide any known associated file; + - the rest are looked up from the database. + - + - Using this when dropping, rather than getFileNumMinCopies + - avoids dropping one file that has a smaller value violating + - the value set for another file that uses the same content. + -} +getSafestNumMinCopies :: AssociatedFile -> Key -> Annex (NumCopies, MinCopies) +getSafestNumMinCopies afile k = + Database.Keys.getAssociatedFilesIncluding afile k + >>= getSafestNumMinCopies' afile k + +getSafestNumMinCopies' :: AssociatedFile -> Key -> [RawFilePath] -> Annex (NumCopies, MinCopies) +getSafestNumMinCopies' afile k fs = do + l <- mapM getFileNumMinCopies fs + let l' = zip l fs + (,) + <$> findmax fst l' getNumCopies + <*> findmax snd l' getMinCopies + where + -- Some associated files in the keys database may no longer + -- correspond to files in the repository. + -- (But the AssociatedFile passed to this is known to be + -- an associated file, which may not be in the keys database + -- yet, so checking it is skipped.) + stillassociated f + | AssociatedFile (Just f) == afile = return True + | otherwise = catKeyFile f >>= \case + Just k' | k' == k -> return True + _ -> return False + + -- Avoid calling stillassociated on every file; just make sure + -- that the one with the highest value is still associated. + findmax _ [] fallback = fallback + findmax getv l fallback = do + let n = maximum (map (getv . fst) l) + let (maxls, l') = partition (\(x, _) -> getv x == n) l + ifM (anyM stillassociated (map snd maxls)) + ( return n + , findmax getv l' fallback + ) + +{- This is the globally visible numcopies value for a file. So it does + - not include local configuration in the git config or command line + - options. -} +getGlobalFileNumCopies :: RawFilePath -> Annex NumCopies +getGlobalFileNumCopies f = fromSourcesOr defaultNumCopies + [ fst <$> getNumMinCopiesAttr f + , getGlobalNumCopies + ] + +getNumMinCopiesAttr :: RawFilePath -> Annex (Maybe NumCopies, Maybe MinCopies) +getNumMinCopiesAttr file = + checkAttrs ["annex.numcopies", "annex.mincopies"] file >>= \case + (n:m:[]) -> return + ( configuredNumCopies <$> readish n + , configuredMinCopies <$> readish m + ) + _ -> error "internal" + +{- Checks if numcopies are satisfied for a file by running a comparison + - between the number of (not untrusted) copies that are + - believed to exist, and the configured value. + - + - This is good enough for everything except dropping the file, which + - requires active verification of the copies. + -} +numCopiesCheck :: RawFilePath -> Key -> (Int -> Int -> v) -> Annex v +numCopiesCheck file key vs = do + have <- trustExclude UnTrusted =<< Remote.keyLocations key + numCopiesCheck' file vs have + +numCopiesCheck' :: RawFilePath -> (Int -> Int -> v) -> [UUID] -> Annex v +numCopiesCheck' file vs have = do + needed <- fromNumCopies . fst <$> getFileNumMinCopies file + let nhave = length have + explain (ActionItemTreeFile file) $ Just $ UnquotedString $ + "has " ++ show nhave ++ " " ++ pluralCopies nhave ++ + ", and the configured annex.numcopies is " ++ show needed + return $ nhave `vs` needed + +data UnVerifiedCopy = UnVerifiedRemote Remote | UnVerifiedHere + deriving (Ord, Eq) + +{- Verifies that enough copies of a key exist among the listed remotes, + - to safely drop it, running an action with a proof if so, and + - printing an informative message if not. + -} +verifyEnoughCopiesToDrop + :: String -- message to print when there are no known locations + -> Key + -> Maybe ContentRemovalLock + -> NumCopies + -> MinCopies + -> [UUID] -- repos to skip considering (generally untrusted remotes) + -> [VerifiedCopy] -- copies already verified to exist + -> [UnVerifiedCopy] -- places to check to see if they have copies + -> (SafeDropProof -> Annex a) -- action to perform the drop + -> Annex a -- action to perform when unable to drop + -> Annex a +verifyEnoughCopiesToDrop nolocmsg key removallock neednum needmin skip preverified tocheck dropaction nodropaction = + helper [] [] preverified (nub tocheck) [] + where + helper bad missing have [] lockunsupported = + liftIO (mkSafeDropProof neednum needmin have removallock) >>= \case + Right proof -> dropaction proof + Left stillhave -> do + notEnoughCopies key neednum needmin stillhave (skip++missing) bad nolocmsg lockunsupported + nodropaction + helper bad missing have (c:cs) lockunsupported + | isSafeDrop neednum needmin have removallock = + liftIO (mkSafeDropProof neednum needmin have removallock) >>= \case + Right proof -> dropaction proof + Left stillhave -> helper bad missing stillhave (c:cs) lockunsupported + | otherwise = case c of + UnVerifiedHere -> lockContentShared key contverified + UnVerifiedRemote r -> checkremote r contverified $ + let lockunsupported' = r : lockunsupported + in Remote.hasKey r key >>= \case + Right True -> helper bad missing (mkVerifiedCopy RecentlyVerifiedCopy r : have) cs lockunsupported' + Left _ -> helper (r:bad) missing have cs lockunsupported' + Right False -> helper bad (Remote.uuid r:missing) have cs lockunsupported' + where + contverified vc = helper bad missing (vc : have) cs lockunsupported + + checkremote r cont fallback = case Remote.lockContent r of + Just lockcontent -> do + -- The remote's lockContent will throw an exception + -- when it is unable to lock, in which case the + -- fallback should be run. + -- + -- On the other hand, the continuation could itself + -- throw an exception (ie, the eventual drop action + -- fails), and in this case we don't want to run the + -- fallback since part of the drop action may have + -- already been performed. + -- + -- Differentiate between these two sorts + -- of exceptions by using DropException. + let a = lockcontent key $ \v -> + cont v `catchNonAsync` (throw . DropException) + a `M.catches` + [ M.Handler (\ (e :: AsyncException) -> throwM e) + , M.Handler (\ (e :: SomeAsyncException) -> throwM e) + , M.Handler (\ (DropException e') -> throwM e') + , M.Handler (\ (_e :: SomeException) -> fallback) + ] + Nothing -> fallback + +data DropException = DropException SomeException + deriving (Typeable, Show) + +instance Exception DropException + +notEnoughCopies :: Key -> NumCopies -> MinCopies -> [VerifiedCopy] -> [UUID] -> [Remote] -> String -> [Remote] -> Annex () +notEnoughCopies key neednum needmin have skip bad nolocmsg lockunsupported = do + showNote "unsafe" + if length have < fromNumCopies neednum + then showLongNote $ UnquotedString $ + if fromNumCopies neednum == 1 + then "Could not verify the existence of the 1 necessary copy." + else "Could only verify the existence of " ++ + show (length have) ++ " out of " ++ show (fromNumCopies neednum) ++ + " necessary " ++ pluralCopies (fromNumCopies neednum) ++ "." + else do + showLongNote $ UnquotedString $ "Unable to lock down " ++ show (fromMinCopies needmin) ++ + " " ++ pluralCopies (fromMinCopies needmin) ++ + " of file necessary to safely drop it." + if null lockunsupported + then showLongNote "(This could have happened because of a concurrent drop, or because a remote has too old a version of git-annex-shell installed.)" + else showLongNote $ UnquotedString $ "These remotes do not support locking: " + ++ Remote.listRemoteNames lockunsupported + + Remote.showTriedRemotes bad + Remote.showLocations True key (map toUUID have++skip) nolocmsg + +pluralCopies :: Int -> String +pluralCopies 1 = "copy" +pluralCopies _ = "copies" + +{- Finds locations of a key that can be used to get VerifiedCopies, + - in order to allow dropping the key. + - + - Provide a list of UUIDs that the key is being dropped from. + - The returned lists will exclude any of those UUIDs. + - + - The return lists also exclude any repositories that are untrusted, + - since those should not be used for verification. + - + - The UnVerifiedCopy list is cost ordered. + - The VerifiedCopy list contains repositories that are trusted to + - contain the key. + -} +verifiableCopies :: Key -> [UUID] -> Annex ([UnVerifiedCopy], [VerifiedCopy]) +verifiableCopies key exclude = do + locs <- Remote.keyLocations key + (remotes, trusteduuids) <- Remote.remoteLocations (Remote.IncludeIgnored False) locs + =<< trustGet Trusted + untrusteduuids <- trustGet UnTrusted + let exclude' = exclude ++ untrusteduuids + let remotes' = Remote.remotesWithoutUUID remotes (exclude' ++ trusteduuids) + let verified = map (mkVerifiedCopy TrustedCopy) $ + filter (`notElem` exclude') trusteduuids + u <- getUUID + let herec = if u `elem` locs && u `notElem` exclude' + then [UnVerifiedHere] + else [] + return (herec ++ map UnVerifiedRemote remotes', verified) diff --git a/Annex/Path.hs b/Annex/Path.hs new file mode 100644 index 0000000000..aa51da1b58 --- /dev/null +++ b/Annex/Path.hs @@ -0,0 +1,125 @@ +{- git-annex program path + - + - Copyright 2013-2022 Joey Hess + - + - Licensed under the GNU AGPL version 3 or higher. + -} + +module Annex.Path ( + programPath, + readProgramFile, + gitAnnexChildProcess, + gitAnnexChildProcessParams, + gitAnnexDaemonizeParams, + cleanStandaloneEnvironment, +) where + +import Annex.Common +import Config.Files +import Utility.Env +import Annex.PidLock +import qualified Annex + +import System.Environment (getExecutablePath, getArgs, getProgName) + +{- A fully qualified path to the currently running git-annex program. + - + - getExecutablePath is used when possible. On OSs it supports + - well, it returns the complete path to the program. But, on other OSs, + - it might return just the basename. Fall back to reading the programFile, + - or searching for the command name in PATH. + - + - The standalone build runs git-annex via ld.so, and defeats + - getExecutablePath. It sets GIT_ANNEX_DIR to the location of the + - standalone build directory, and there are wrapper scripts for git-annex + - and git-annex-shell in that directory. + -} +programPath :: IO FilePath +programPath = go =<< getEnv "GIT_ANNEX_DIR" + where + go (Just dir) = do + name <- getProgName + return (dir name) + go Nothing = do + exe <- getExecutablePath + p <- if isAbsolute exe + then return exe + else fromMaybe exe <$> readProgramFile + maybe cannotFindProgram return =<< searchPath p + +{- Returns the path for git-annex that is recorded in the programFile. -} +readProgramFile :: IO (Maybe FilePath) +readProgramFile = do + programfile <- programFile + headMaybe . lines <$> readFile programfile + +cannotFindProgram :: IO a +cannotFindProgram = do + f <- programFile + giveup $ "cannot find git-annex program in PATH or in " ++ f + +{- Runs a git-annex child process. + - + - Like runsGitAnnexChildProcessViaGit, when pid locking is in use, + - this takes the pid lock, while running it, and sets an env var + - that prevents the child process trying to take the pid lock, + - to avoid it deadlocking. + -} +gitAnnexChildProcess + :: String + -> [CommandParam] + -> (CreateProcess -> CreateProcess) + -> (Maybe Handle -> Maybe Handle -> Maybe Handle -> ProcessHandle -> IO a) + -> Annex a +gitAnnexChildProcess subcmd ps f a = do + cmd <- liftIO programPath + ps' <- gitAnnexChildProcessParams subcmd ps + pidLockChildProcess cmd ps' f a + +{- Parameters to pass to a git-annex child process to run a subcommand + - with some parameters. + - + - Includes -c values that were passed on the git-annex command line + - or due to options like --debug being enabled. + -} +gitAnnexChildProcessParams :: String -> [CommandParam] -> Annex [CommandParam] +gitAnnexChildProcessParams subcmd ps = do + cps <- gitAnnexGitConfigOverrides + return (Param subcmd : cps ++ ps) + +gitAnnexGitConfigOverrides :: Annex [CommandParam] +gitAnnexGitConfigOverrides = concatMap (\c -> [Param "-c", Param c]) + <$> Annex.getGitConfigOverrides + +{- Parameters to pass to git-annex when re-running the current command + - to daemonize it. Used with Utility.Daemon.daemonize. -} +gitAnnexDaemonizeParams :: Annex [CommandParam] +gitAnnexDaemonizeParams = do + -- This includes -c parameters passed to git, as well as ones + -- passed to git-annex. + cps <- gitAnnexGitConfigOverrides + -- Get every parameter git-annex was run with. + ps <- liftIO getArgs + return (map Param ps ++ cps) + +{- Returns a cleaned up environment that lacks path and other settings + - used to make the standalone builds use their bundled libraries and programs. + - Useful when calling programs not included in the standalone builds. + - + - For a non-standalone build, returns Nothing. + -} +cleanStandaloneEnvironment :: IO (Maybe [(String, String)]) +cleanStandaloneEnvironment = clean <$> getEnvironment + where + clean environ + | null vars = Nothing + | otherwise = Just $ catMaybes $ map (restoreorig environ) environ + where + vars = words $ fromMaybe "" $ + lookup "GIT_ANNEX_STANDLONE_ENV" environ + restoreorig oldenviron p@(k, _v) + | k `elem` vars = case lookup ("ORIG_" ++ k) oldenviron of + (Just v') + | not (null v') -> Just (k, v') + _ -> Nothing + | otherwise = Just p diff --git a/Annex/Perms.hs b/Annex/Perms.hs new file mode 100644 index 0000000000..83b4f73130 --- /dev/null +++ b/Annex/Perms.hs @@ -0,0 +1,374 @@ +{- git-annex file permissions + - + - Copyright 2012-2023 Joey Hess + - + - Licensed under the GNU AGPL version 3 or higher. + -} + +{-# LANGUAGE OverloadedStrings #-} + +module Annex.Perms ( + FileMode, + setAnnexFilePerm, + setAnnexDirPerm, + resetAnnexFilePerm, + annexFileMode, + createAnnexDirectory, + createWorkTreeDirectory, + freezeContent, + freezeContent', + freezeContent'', + checkContentWritePerm, + checkContentWritePerm', + thawContent, + thawContent', + createContentDir, + freezeContentDir, + thawContentDir, + modifyContentDir, + modifyContentDirWhenExists, + withShared, + hasFreezeHook, + hasThawHook, +) where + +import Annex.Common +import Utility.FileMode +import Git +import Git.ConfigTypes +import qualified Annex +import Annex.Version +import Types.RepoVersion +import Config +import Utility.Directory.Create +import qualified Utility.RawFilePath as R + +import System.PosixCompat.Files (fileMode, intersectFileModes, nullFileMode, groupWriteMode, ownerWriteMode, ownerReadMode, groupReadMode, otherReadMode, stdFileMode, ownerExecuteMode, groupExecuteMode, otherExecuteMode, setGroupIDMode) + +withShared :: (SharedRepository -> Annex a) -> Annex a +withShared a = a =<< coreSharedRepository <$> Annex.getGitConfig + +setAnnexFilePerm :: RawFilePath -> Annex () +setAnnexFilePerm = setAnnexPerm False + +setAnnexDirPerm :: RawFilePath -> Annex () +setAnnexDirPerm = setAnnexPerm True + +{- Sets appropriate file mode for a file or directory in the annex, + - other than the content files and content directory. Normally, + - don't change the mode, but with core.sharedRepository set, + - allow the group to write, etc. -} +setAnnexPerm :: Bool -> RawFilePath -> Annex () +setAnnexPerm isdir file = setAnnexPerm' Nothing isdir >>= \go -> liftIO (go file) + +setAnnexPerm' :: Maybe ([FileMode] -> FileMode -> FileMode) -> Bool -> Annex (RawFilePath -> IO ()) +setAnnexPerm' modef isdir = ifM crippledFileSystem + ( return (const noop) + , withShared $ \s -> return $ \file -> go s file + ) + where + go GroupShared file = void $ tryIO $ modifyFileMode file $ modef' $ + groupSharedModes ++ + if isdir then [ ownerExecuteMode, groupExecuteMode ] else [] + go AllShared file = void $ tryIO $ modifyFileMode file $ modef' $ + readModes ++ + [ ownerWriteMode, groupWriteMode ] ++ + if isdir then executeModes else [] + go UnShared file = case modef of + Nothing -> noop + Just f -> void $ tryIO $ + modifyFileMode file $ f [] + go (UmaskShared n) file = void $ tryIO $ R.setFileMode file $ + if isdir then umaskSharedDirectory n else n + modef' = fromMaybe addModes modef + +resetAnnexFilePerm :: RawFilePath -> Annex () +resetAnnexFilePerm = resetAnnexPerm False + +{- Like setAnnexPerm, but ignores the current mode of the file entirely, + - and sets the same mode that the umask would result in when creating a + - new file. + - + - Useful eg, after creating a temporary file with locked down modes, + - which is going to be moved to a non-temporary location and needs + - usual modes. + -} +resetAnnexPerm :: Bool -> RawFilePath -> Annex () +resetAnnexPerm isdir file = unlessM crippledFileSystem $ do + defmode <- liftIO defaultFileMode + let modef moremodes _oldmode = addModes moremodes defmode + setAnnexPerm' (Just modef) isdir >>= \go -> liftIO (go file) + +{- Creates a ModeSetter which can be used for creating a file in the annex + - (other than content files, which are locked down more). -} +annexFileMode :: Annex ModeSetter +annexFileMode = do + modesetter <- setAnnexPerm' Nothing False + withShared (\s -> pure $ mk s modesetter) + where + mk GroupShared = ModeSetter stdFileMode + mk AllShared = ModeSetter stdFileMode + mk UnShared = ModeSetter stdFileMode + mk (UmaskShared mode) = ModeSetter mode + +{- Creates a directory inside the gitAnnexDir (or possibly the dbdir), + - creating any parent directories up to and including the gitAnnexDir. + - Makes directories with appropriate permissions. -} +createAnnexDirectory :: RawFilePath -> Annex () +createAnnexDirectory dir = do + top <- parentDir <$> fromRepo gitAnnexDir + tops <- annexDbDir <$> Annex.getGitConfig >>= return . \case + Nothing -> [top] + Just dbdir -> [top, parentDir (parentDir dbdir)] + createDirectoryUnder' tops dir createdir + where + createdir p = do + liftIO $ R.createDirectory p + setAnnexDirPerm p + +{- Create a directory in the git work tree, creating any parent + - directories up to the top of the work tree. + - + - Uses default permissions. + -} +createWorkTreeDirectory :: RawFilePath -> Annex () +createWorkTreeDirectory dir = do + fromRepo repoWorkTree >>= liftIO . \case + Just wt -> createDirectoryUnder [wt] dir + -- Should never happen, but let whatever tries to write + -- to the directory be what throws an exception, as that + -- will be clearer than an exception from here. + Nothing -> noop + +{- Normally, blocks writing to an annexed file, and modifies file + - permissions to allow reading it. + - + - Before v9, when core.sharedRepository is set, the write bits are not + - removed from the file, but instead the appropriate group write bits + - are set. This is necessary to let other users in the group lock the file. + - v9 improved this by using separate lock files, so the content file does + - not need to be writable when using it. + - + - In a shared repository, the current user may not be able to change + - a file owned by another user, so failure to change modes is ignored. + - + - Note that, on Linux, xattrs can sometimes prevent removing + - certain permissions from a file with chmod. (Maybe some ACLs too?) + - In such a case, this will return with the file still having some mode + - it should not normally have. checkContentWritePerm can detect when + - that happens with write permissions. + -} +freezeContent :: RawFilePath -> Annex () +freezeContent file = + withShared $ \sr -> freezeContent' sr file + +freezeContent' :: SharedRepository -> RawFilePath -> Annex () +freezeContent' sr file = freezeContent'' sr file =<< getVersion + +freezeContent'' :: SharedRepository -> RawFilePath -> Maybe RepoVersion -> Annex () +freezeContent'' sr file rv = do + fastDebug "Annex.Perms" ("freezing content " ++ fromRawFilePath file) + unlessM crippledFileSystem $ go sr + freezeHook file + where + go UnShared = liftIO $ nowriteadd [ownerReadMode] + go GroupShared = if versionNeedsWritableContentFiles rv + then liftIO $ ignoresharederr $ modmode $ addModes + [ownerReadMode, groupReadMode, ownerWriteMode, groupWriteMode] + else liftIO $ ignoresharederr $ + nowriteadd [ownerReadMode, groupReadMode] + go AllShared = if versionNeedsWritableContentFiles rv + then liftIO $ ignoresharederr $ modmode $ addModes + (readModes ++ writeModes) + else liftIO $ ignoresharederr $ + nowriteadd readModes + go (UmaskShared n) = if versionNeedsWritableContentFiles rv + -- Assume that the configured mode includes write bits + -- for all users who should be able to lock the file, so + -- don't need to add any write modes. + then liftIO $ ignoresharederr $ modmode $ const n + else liftIO $ ignoresharederr $ modmode $ const $ + removeModes writeModes n + + ignoresharederr = void . tryIO + + modmode = modifyFileMode file + + nowriteadd readmodes = modmode $ + removeModes writeModes . + addModes readmodes + +{- Checks if the write permissions are as freezeContent should set them. + - + - When the repository is shared, the user may not be able to change + - permissions of a file owned by another user. So if the permissions seem + - wrong, but the repository is shared, returns Nothing. If the permissions + - are wrong otherwise, returns Just False. + - + - When there is a freeze hook, it may prevent write in some way other than + - permissions. One use of a freeze hook is when the filesystem does not + - support removing write permissions, so when there is such a hook + - write permissions are ignored. + -} +checkContentWritePerm :: RawFilePath -> Annex (Maybe Bool) +checkContentWritePerm file = ifM crippledFileSystem + ( return (Just True) + , do + rv <- getVersion + hasfreezehook <- hasFreezeHook + withShared $ \sr -> + liftIO $ checkContentWritePerm' sr file rv hasfreezehook + ) + +checkContentWritePerm' :: SharedRepository -> RawFilePath -> Maybe RepoVersion -> Bool -> IO (Maybe Bool) +checkContentWritePerm' sr file rv hasfreezehook + | hasfreezehook = return (Just True) + | otherwise = case sr of + UnShared -> want Just (excludemodes writeModes) + GroupShared + | versionNeedsWritableContentFiles rv -> want sharedret + (includemodes [ownerWriteMode, groupWriteMode]) + | otherwise -> want sharedret (excludemodes writeModes) + AllShared + | versionNeedsWritableContentFiles rv -> + want sharedret (includemodes writeModes) + | otherwise -> want sharedret (excludemodes writeModes) + UmaskShared n + | versionNeedsWritableContentFiles rv -> want sharedret + (\havemode -> havemode == n) + | otherwise -> want sharedret + (\havemode -> havemode == removeModes writeModes n) + where + want mk f = catchMaybeIO (fileMode <$> R.getFileStatus file) + >>= return . \case + Just havemode -> mk (f havemode) + Nothing -> mk True + + includemodes l havemode = havemode == combineModes (havemode:l) + excludemodes l havemode = all (\m -> intersectFileModes m havemode == nullFileMode) l + + sharedret True = Just True + sharedret False = Nothing + +{- Allows writing to an annexed file that freezeContent was called on + - before. -} +thawContent :: RawFilePath -> Annex () +thawContent file = withShared $ \sr -> thawContent' sr file + +thawContent' :: SharedRepository -> RawFilePath -> Annex () +thawContent' sr file = do + fastDebug "Annex.Perms" ("thawing content " ++ fromRawFilePath file) + thawPerms (go sr) (thawHook file) + where + go GroupShared = liftIO $ void $ tryIO $ groupWriteRead file + go AllShared = liftIO $ void $ tryIO $ groupWriteRead file + go UnShared = liftIO $ allowWrite file + go (UmaskShared n) = liftIO $ void $ tryIO $ R.setFileMode file n + +{- Runs an action that thaws a file's permissions. This will probably + - fail on a crippled filesystem. But, if file modes are supported on a + - crippled filesystem, the file may be frozen, so try to thaw its + - permissions. -} +thawPerms :: Annex () -> Annex () -> Annex () +thawPerms a hook = ifM crippledFileSystem + ( hook >> void (tryNonAsync a) + , hook >> a + ) + +{- Blocks writing to the directory an annexed file is in, to prevent the + - file accidentally being deleted. However, if core.sharedRepository + - is set, this is not done, since the group must be allowed to delete the + - file without eing able to thaw the directory. + -} +freezeContentDir :: RawFilePath -> Annex () +freezeContentDir file = do + fastDebug "Annex.Perms" ("freezing content directory " ++ fromRawFilePath dir) + unlessM crippledFileSystem $ withShared go + freezeHook dir + where + dir = parentDir file + go UnShared = liftIO $ preventWrite dir + go GroupShared = liftIO $ void $ tryIO $ groupWriteRead dir + go AllShared = liftIO $ void $ tryIO $ groupWriteRead dir + go (UmaskShared n) = liftIO $ void $ tryIO $ R.setFileMode dir $ + umaskSharedDirectory $ + -- If n includes group or other write mode, leave them set + -- to allow them to delete the file without being able to + -- thaw the directory. + removeModes [ownerWriteMode] n + +thawContentDir :: RawFilePath -> Annex () +thawContentDir file = do + fastDebug "Annex.Perms" ("thawing content directory " ++ fromRawFilePath dir) + thawPerms (withShared (liftIO . go)) (thawHook dir) + where + dir = parentDir file + go UnShared = allowWrite dir + go GroupShared = allowWrite dir + go AllShared = allowWrite dir + go (UmaskShared n) = R.setFileMode dir n + +{- Makes the directory tree to store an annexed file's content, + - with appropriate permissions on each level. -} +createContentDir :: RawFilePath -> Annex () +createContentDir dest = do + unlessM (liftIO $ R.doesPathExist dir) $ + createAnnexDirectory dir + -- might have already existed with restricted perms + thawHook dir + unlessM crippledFileSystem $ liftIO $ allowWrite dir + where + dir = parentDir dest + +{- Creates the content directory for a file if it doesn't already exist, + - or thaws it if it does, then runs an action to modify a file in the + - directory, and finally, freezes the content directory. -} +modifyContentDir :: RawFilePath -> Annex a -> Annex a +modifyContentDir f a = do + createContentDir f -- also thaws it + v <- tryNonAsync a + freezeContentDir f + either throwM return v + +{- Like modifyContentDir, but avoids creating the content directory if it + - does not already exist. In that case, the action will probably fail. -} +modifyContentDirWhenExists :: RawFilePath -> Annex a -> Annex a +modifyContentDirWhenExists f a = do + thawContentDir f + v <- tryNonAsync a + freezeContentDir f + either throwM return v + +hasFreezeHook :: Annex Bool +hasFreezeHook = isJust . annexFreezeContentCommand <$> Annex.getGitConfig + +hasThawHook :: Annex Bool +hasThawHook = isJust . annexThawContentCommand <$> Annex.getGitConfig + +freezeHook :: RawFilePath -> Annex () +freezeHook p = maybe noop go =<< annexFreezeContentCommand <$> Annex.getGitConfig + where + go basecmd = void $ liftIO $ + boolSystem "sh" [Param "-c", Param $ gencmd basecmd] + gencmd = massReplace [ ("%path", shellEscape (fromRawFilePath p)) ] + +thawHook :: RawFilePath -> Annex () +thawHook p = maybe noop go =<< annexThawContentCommand <$> Annex.getGitConfig + where + go basecmd = void $ liftIO $ + boolSystem "sh" [Param "-c", Param $ gencmd basecmd] + gencmd = massReplace [ ("%path", shellEscape (fromRawFilePath p)) ] + +{- Calculate mode to use for a directory from the mode to use for a file. + - + - This corresponds to git's handling of core.sharedRepository=0xxx + -} +umaskSharedDirectory :: FileMode -> FileMode +umaskSharedDirectory n = flip addModes n $ map snd $ filter fst + [ (isset ownerReadMode, ownerExecuteMode) + , (isset groupReadMode, groupExecuteMode) + , (isset otherReadMode, otherExecuteMode) + , (isset groupReadMode || isset groupWriteMode, setGroupIDMode) + ] + where + isset v = checkMode v n diff --git a/Annex/PidLock.hs b/Annex/PidLock.hs new file mode 100644 index 0000000000..9b2adea4e8 --- /dev/null +++ b/Annex/PidLock.hs @@ -0,0 +1,131 @@ +{- Pid locking support. + - + - Copyright 2014-2021 Joey Hess + - + - Licensed under the GNU AGPL version 3 or higher. + -} + +{-# LANGUAGE CPP #-} + +module Annex.PidLock where + +import Annex.Common +import Git +#ifndef mingw32_HOST_OS +import Git.Env +import Annex.GitOverlay +import qualified Utility.LockFile.PidLock as PidF +import qualified Utility.LockPool.PidLock as PidP +import Utility.LockPool (dropLock) +import Utility.Env +import Config +#endif + +{- When pid locking is in use, this tries to take the pid lock (unless + - the process already has it), and if successful, holds it while + - running the child process. The child process is run with an env var + - set, which prevents it from trying to take the pid lock itself. + - + - This way, any locking the parent does will not get in the way of + - the child. The child is assumed to not do any locking that conflicts + - with the parent, but if it did happen to do that, it would be noticed + - when git-annex is used without pid locking. + - + - If another process is already holding the pid lock, the child process + - is still run, but without setting the env var, so it can try to take the + - pid lock itself, and fail however is appropriate for it in that + - situation. + -} +pidLockChildProcess + :: FilePath + -> [CommandParam] + -> (CreateProcess -> CreateProcess) + -> (Maybe Handle -> Maybe Handle -> Maybe Handle -> ProcessHandle -> IO a) + -> Annex a +pidLockChildProcess cmd ps f a = do + let p = f (proc cmd (toCommand ps)) + let gonopidlock = withCreateProcess p a +#ifndef mingw32_HOST_OS + pidLockFile >>= liftIO . \case + Nothing -> gonopidlock + Just pidlock -> bracket + (setup pidlock) + cleanup + (go gonopidlock p pidlock) + where + setup pidlock = fmap fst <$> PidP.tryLock' pidlock + + cleanup (Just h) = dropLock h + cleanup Nothing = return () + + go gonopidlock _ _ Nothing = gonopidlock + go _ p pidlock (Just _h) = do + v <- PidF.pidLockEnv pidlock + baseenv <- case env p of + Nothing -> getEnvironment + Just baseenv -> pure baseenv + let p' = p { env = Just ((v, PidF.pidLockEnvValue) : baseenv) } + withCreateProcess p' a +#else + liftIO gonopidlock +#endif + +{- Wrap around actions that may run a git-annex child process via a git + - command. + - + - This is like pidLockChildProcess, but rather than running a process + - itself, it runs the action with a modified Annex state that passes the + - necessary env var when running git. + -} +runsGitAnnexChildProcessViaGit :: Annex a -> Annex a +#ifndef mingw32_HOST_OS +runsGitAnnexChildProcessViaGit a = pidLockFile >>= \case + Nothing -> a + Just pidlock -> bracket (setup pidlock) cleanup (go pidlock) + where + setup pidlock = liftIO $ fmap fst <$> PidP.tryLock' pidlock + + cleanup (Just h) = liftIO $ dropLock h + cleanup Nothing = return () + + go _ Nothing = a + go pidlock (Just _h) = do + v <- liftIO $ PidF.pidLockEnv pidlock + let addenv g = do + g' <- liftIO $ addGitEnv g v PidF.pidLockEnvValue + return (g', ()) + let rmenv oldg g + | any (\(k, _) -> k == v) (fromMaybe [] (Git.gitEnv oldg)) = g + | otherwise = + let e' = case Git.gitEnv g of + Just e -> Just (delEntry v e) + Nothing -> Nothing + in g { Git.gitEnv = e' } + withAltRepo addenv rmenv (const a) +#else +runsGitAnnexChildProcessViaGit a = a +#endif + +{- Like runsGitAnnexChildProcessViaGit, but the Annex state is not + - modified. Instead the input Repo's state is modified to set the + - necessary env var when git is run in that Repo. + -} +runsGitAnnexChildProcessViaGit' :: Git.Repo -> (Git.Repo -> Annex a) -> Annex a +#ifndef mingw32_HOST_OS +runsGitAnnexChildProcessViaGit' r a = pidLockFile >>= \case + Nothing -> a r + Just pidlock -> bracketIO (setup pidlock) cleanup (go pidlock) + where + setup pidlock = fmap fst <$> PidP.tryLock' pidlock + + cleanup (Just h) = dropLock h + cleanup Nothing = return () + + go _ Nothing = a r + go pidlock (Just _h) = do + v <- liftIO $ PidF.pidLockEnv pidlock + r' <- liftIO $ addGitEnv r v PidF.pidLockEnvValue + a r' +#else +runsGitAnnexChildProcessViaGit' r a = a r +#endif diff --git a/Annex/Queue.hs b/Annex/Queue.hs new file mode 100644 index 0000000000..b2b28bccb5 --- /dev/null +++ b/Annex/Queue.hs @@ -0,0 +1,97 @@ +{- git-annex command queue + - + - Copyright 2011-2021 Joey Hess + - + - Licensed under the GNU AGPL version 3 or higher. + -} + +{-# LANGUAGE BangPatterns #-} + +module Annex.Queue ( + addCommand, + addFlushAction, + addUpdateIndex, + flush, + flushWhenFull, + size, + get, + mergeFrom, +) where + +import Annex.Common +import Annex hiding (new) +import Annex.LockFile +import qualified Git.Queue +import qualified Git.UpdateIndex + +{- Adds a git command to the queue. -} +addCommand :: [CommandParam] -> String -> [CommandParam] -> [FilePath] -> Annex () +addCommand commonparams command params files = do + q <- get + store =<< flushWhenFull =<< + (Git.Queue.addCommand commonparams command params files q =<< gitRepo) + +addFlushAction :: Git.Queue.FlushActionRunner Annex -> [RawFilePath] -> Annex () +addFlushAction runner files = do + q <- get + store =<< flushWhenFull =<< + (Git.Queue.addFlushAction runner files q =<< gitRepo) + +{- Adds an update-index stream to the queue. -} +addUpdateIndex :: Git.UpdateIndex.Streamer -> Annex () +addUpdateIndex streamer = do + q <- get + store =<< flushWhenFull =<< + (Git.Queue.addUpdateIndex streamer q =<< gitRepo) + +{- Runs the queue if it is full. -} +flushWhenFull :: Git.Queue.Queue Annex -> Annex (Git.Queue.Queue Annex) +flushWhenFull q + | Git.Queue.full q = flush' q + | otherwise = return q + +{- Runs (and empties) the queue. -} +flush :: Annex () +flush = do + q <- get + unless (0 == Git.Queue.size q) $ do + store =<< flush' q + +{- When there are multiple worker threads, each has its own queue. + - And of course multiple git-annex processes may be running each with its + - own queue. + - + - But, flushing two queues at the same time could lead to failures due to + - git locking files. So, only one queue is allowed to flush at a time. + -} +flush' :: Git.Queue.Queue Annex -> Annex (Git.Queue.Queue Annex) +flush' q = do + lck <- fromRepo gitAnnexGitQueueLock + withExclusiveLock lck $ do + showStoringStateAction + Git.Queue.flush q =<< gitRepo + +{- Gets the size of the queue. -} +size :: Annex Int +size = Git.Queue.size <$> get + +get :: Annex (Git.Queue.Queue Annex) +get = maybe new return =<< getState repoqueue + +new :: Annex (Git.Queue.Queue Annex) +new = do + sz <- annexQueueSize <$> getGitConfig + q <- liftIO $ Git.Queue.new sz Nothing + store q + return q + +store :: Git.Queue.Queue Annex -> Annex () +store q = changeState $ \s -> s { repoqueue = Just q } + +mergeFrom :: AnnexState -> Annex () +mergeFrom st = case repoqueue st of + Nothing -> noop + Just newq -> do + q <- get + let !q' = Git.Queue.merge q newq + store =<< flushWhenFull q' diff --git a/Annex/RemoteTrackingBranch.hs b/Annex/RemoteTrackingBranch.hs new file mode 100644 index 0000000000..06591d0918 --- /dev/null +++ b/Annex/RemoteTrackingBranch.hs @@ -0,0 +1,96 @@ +{- git-annex remote tracking branches + - + - Copyright 2019 Joey Hess + - + - Licensed under the GNU AGPL version 3 or higher. + -} + +module Annex.RemoteTrackingBranch + ( RemoteTrackingBranch + , mkRemoteTrackingBranch + , fromRemoteTrackingBranch + , setRemoteTrackingBranch + , makeRemoteTrackingBranchMergeCommit + , makeRemoteTrackingBranchMergeCommit' + , getRemoteTrackingBranchImportHistory + ) where + +import Annex.Common +import Annex.CatFile +import qualified Annex +import Git.Types +import qualified Git.Ref +import qualified Git.Branch +import Git.History +import qualified Types.Remote as Remote + +import qualified Data.Set as S + +newtype RemoteTrackingBranch = RemoteTrackingBranch + { fromRemoteTrackingBranch :: Ref } + deriving (Show, Eq) + +{- Makes a remote tracking branch corresponding to a local branch. + - Note that the local branch does not need to exist yet. -} +mkRemoteTrackingBranch :: Remote -> Branch -> RemoteTrackingBranch +mkRemoteTrackingBranch remote ref = RemoteTrackingBranch $ + Git.Ref.underBase ("refs/remotes/" ++ Remote.name remote) ref + +{- Set remote tracking branch to point to a commit. -} +setRemoteTrackingBranch :: RemoteTrackingBranch -> Sha -> Annex () +setRemoteTrackingBranch tb commit = + inRepo $ Git.Branch.update' (fromRemoteTrackingBranch tb) commit + +{- Makes a merge commit that preserves the import history of the + - RemoteTrackingBranch, while grafting new git history into it. + - + - The second parent of the merge commit is the past history of the + - RemoteTrackingBranch as imported from a remote. When importing a + - history of trees from a remote, commits can be sythesized from + - them, but such commits won't have the same sha due to eg date differing. + - But since we know that the second parent consists entirely of such + - import commits, they can be reused when updating the + - RemoteTrackingBranch. + -} +makeRemoteTrackingBranchMergeCommit :: RemoteTrackingBranch -> Sha -> Annex Sha +makeRemoteTrackingBranchMergeCommit tb commitsha = + -- Check if the tracking branch exists. + inRepo (Git.Ref.sha (fromRemoteTrackingBranch tb)) >>= \case + Nothing -> return commitsha + Just _ -> inRepo (getHistoryToDepth 1 (fromRemoteTrackingBranch tb)) >>= \case + Nothing -> return commitsha + Just (History hc _) -> case historyCommitParents hc of + [_, importhistory] -> do + treesha <- maybe + (giveup $ "Unable to cat commit " ++ fromRef commitsha) + commitTree + <$> catCommit commitsha + makeRemoteTrackingBranchMergeCommit' commitsha importhistory treesha + -- Earlier versions of git-annex did not + -- make the merge commit, or perhaps + -- something else changed where the + -- tracking branch pointed. + _ -> return commitsha + +makeRemoteTrackingBranchMergeCommit' :: Sha -> Sha -> Sha -> Annex Sha +makeRemoteTrackingBranchMergeCommit' commitsha importedhistory treesha = do + cmode <- annexCommitMode <$> Annex.getGitConfig + inRepo $ Git.Branch.commitTree + cmode + ["remote tracking branch"] + [commitsha, importedhistory] + treesha + +{- When makeRemoteTrackingBranchMergeCommit was used, this finds the + - import history, starting from the second parent of the merge commit. + -} +getRemoteTrackingBranchImportHistory :: History HistoryCommit -> Maybe (History HistoryCommit) +getRemoteTrackingBranchImportHistory (History hc s) = + case historyCommitParents hc of + [_, importhistory] -> go importhistory (S.toList s) + _ -> Nothing + where + go _ [] = Nothing + go i (h@(History hc' _):hs) + | historyCommit hc' == i = Just h + | otherwise = go i hs diff --git a/Annex/ReplaceFile.hs b/Annex/ReplaceFile.hs new file mode 100644 index 0000000000..21735eba14 --- /dev/null +++ b/Annex/ReplaceFile.hs @@ -0,0 +1,87 @@ +{- git-annex file replacing + - + - Copyright 2013-2021 Joey Hess + - + - Licensed under the GNU AGPL version 3 or higher. + -} + +{-# LANGUAGE CPP #-} + +module Annex.ReplaceFile ( + replaceGitAnnexDirFile, + replaceGitDirFile, + replaceWorkTreeFile, + replaceFile, + replaceFile', +) where + +import Annex.Common +import Annex.Tmp +import Annex.Perms +import Git +import Utility.Tmp.Dir +import Utility.Directory.Create +#ifndef mingw32_HOST_OS +import Utility.Path.Max +#endif + +{- replaceFile on a file located inside the gitAnnexDir. -} +replaceGitAnnexDirFile :: FilePath -> (RawFilePath -> Annex a) -> Annex a +replaceGitAnnexDirFile = replaceFile createAnnexDirectory + +{- replaceFile on a file located inside the .git directory. -} +replaceGitDirFile :: FilePath -> (RawFilePath -> Annex a) -> Annex a +replaceGitDirFile = replaceFile $ \dir -> do + top <- fromRepo localGitDir + liftIO $ createDirectoryUnder [top] dir + +{- replaceFile on a worktree file. -} +replaceWorkTreeFile :: FilePath -> (RawFilePath -> Annex a) -> Annex a +replaceWorkTreeFile = replaceFile createWorkTreeDirectory + +{- Replaces a possibly already existing file with a new version, + - atomically, by running an action. + - + - The action is passed the name of temp file, in a temp directory, + - which it can write to, and once done the temp file is moved into place + - and anything else in the temp directory is deleted. + - + - The action can throw an exception, in which case the temp directory + - will be deleted, and the existing file will be preserved. + - + - Throws an IO exception when it was unable to replace the file. + - + - The createdirectory action is only run when moving the file into place + - fails, and can create any parent directory structure needed. + -} +replaceFile :: (RawFilePath -> Annex ()) -> FilePath -> (RawFilePath -> Annex a) -> Annex a +replaceFile createdirectory file action = replaceFile' createdirectory file (const True) action + +replaceFile' :: (RawFilePath -> Annex ()) -> FilePath -> (a -> Bool) -> (RawFilePath -> Annex a) -> Annex a +replaceFile' createdirectory file checkres action = withOtherTmp $ \othertmpdir -> do + let othertmpdir' = fromRawFilePath othertmpdir +#ifndef mingw32_HOST_OS + -- Use part of the filename as the template for the temp + -- directory. This does not need to be unique, but it + -- makes it more clear what this temp directory is for. + filemax <- liftIO $ fileNameLengthLimit othertmpdir' + let basetmp = take (filemax `div` 2) (takeFileName file) +#else + -- Windows has limits on the whole path length, so keep + -- it short. + let basetmp = "t" +#endif + withTmpDirIn othertmpdir' basetmp $ \tmpdir -> do + let tmpfile = toRawFilePath (tmpdir basetmp) + r <- action tmpfile + when (checkres r) $ + replaceFileFrom tmpfile (toRawFilePath file) createdirectory + return r + +replaceFileFrom :: RawFilePath -> RawFilePath -> (RawFilePath -> Annex ()) -> Annex () +replaceFileFrom src dest createdirectory = go `catchIO` fallback + where + go = liftIO $ moveFile src dest + fallback _ = do + createdirectory (parentDir dest) + go diff --git a/Annex/SpecialRemote.hs b/Annex/SpecialRemote.hs new file mode 100644 index 0000000000..2b23b06b5d --- /dev/null +++ b/Annex/SpecialRemote.hs @@ -0,0 +1,135 @@ +{- git-annex special remote configuration + - + - Copyright 2011-2021 Joey Hess + - + - Licensed under the GNU AGPL version 3 or higher. + -} + +{-# LANGUAGE OverloadedStrings #-} + +module Annex.SpecialRemote ( + module Annex.SpecialRemote, + module Annex.SpecialRemote.Config +) where + +import Annex.Common +import Annex.SpecialRemote.Config +import Types.Remote (RemoteConfig, SetupStage(..), typename, setup) +import Types.GitConfig +import Types.ProposedAccepted +import Config +import Remote.List +import Logs.Remote +import Logs.Trust +import qualified Types.Remote as Remote +import Git.Types (RemoteName) +import Utility.SafeOutput + +import qualified Data.Map as M + +{- See if there's an existing special remote with this name. + - + - Remotes that are not dead come first in the list + - when a name appears multiple times. -} +findExisting :: RemoteName -> Annex [(UUID, RemoteConfig, Maybe (ConfigFrom UUID))] +findExisting name = do + (a, b) <- findExisting' name + return (a++b) + +{- Dead remotes with the name are in the second list, all others in the + - first list. -} +findExisting' :: RemoteName -> Annex ([(UUID, RemoteConfig, Maybe (ConfigFrom UUID))], [(UUID, RemoteConfig, Maybe (ConfigFrom UUID))]) +findExisting' name = do + t <- trustMap + partition (\(u, _, _) -> M.lookup u t /= Just DeadTrusted) + . findByRemoteConfig (\c -> lookupName c == Just name) + <$> Logs.Remote.remoteConfigMap + +newConfig + :: RemoteName + -> Maybe (Sameas UUID) + -> RemoteConfig + -- ^ configuration provided by the user + -> M.Map UUID RemoteConfig + -- ^ configuration of other special remotes, to inherit from + -- when sameas is used + -> RemoteConfig +newConfig name sameas fromuser m = case sameas of + Nothing -> M.insert nameField (Proposed name) fromuser + Just (Sameas u) -> addSameasInherited m $ M.fromList + [ (sameasNameField, Proposed name) + , (sameasUUIDField, Proposed (fromUUID u)) + ] `M.union` fromuser + +specialRemoteMap :: Annex (M.Map UUID RemoteName) +specialRemoteMap = do + m <- Logs.Remote.remoteConfigMap + return $ specialRemoteNameMap m + +specialRemoteNameMap :: M.Map UUID RemoteConfig -> M.Map UUID RemoteName +specialRemoteNameMap = M.fromList . mapMaybe go . M.toList + where + go (u, c) = case lookupName c of + Nothing -> Nothing + Just n -> Just (u, n) + +{- find the remote type -} +findType :: RemoteConfig -> Either String RemoteType +findType config = maybe unspecified (specified . fromProposedAccepted) $ + M.lookup typeField config + where + unspecified = Left "Specify the type of remote with type=" + specified s = case filter (findtype s) remoteTypes of + [] -> Left $ "Unknown remote type " ++ s + ++ " (pick from: " + ++ intercalate " " (map typename remoteTypes) + ++ ")" + (t:_) -> Right t + findtype s i = typename i == s + +autoEnable :: Annex () +autoEnable = do + m <- autoEnableable + enabled <- getenabledremotes + forM_ (M.toList m) $ \(cu, c) -> unless (cu `M.member` enabled) $ do + let u = case findSameasUUID c of + Just (Sameas u') -> u' + Nothing -> cu + case (lookupName c, findType c) of + -- Avoid auto-enabling when the name contains a + -- control character, because git does not avoid + -- displaying control characters in the name of a + -- remote, and an attacker could leverage + -- autoenabling it as part of an attack. + (Just name, Right t) | safeOutput name == name -> do + showSideAction $ UnquotedString $ "Auto enabling special remote " ++ name + dummycfg <- liftIO dummyRemoteGitConfig + tryNonAsync (setup t (AutoEnable c) (Just u) Nothing c dummycfg) >>= \case + Left e -> warning (UnquotedString (show e)) + Right (_c, _u) -> + when (cu /= u) $ + setConfig (remoteAnnexConfig c "config-uuid") (fromUUID cu) + _ -> return () + where + getenabledremotes = M.fromList + . map (\r -> (getcu r, r)) + <$> remoteList + getcu r = fromMaybe + (Remote.uuid r) + (remoteAnnexConfigUUID (Remote.gitconfig r)) + +autoEnableable :: Annex (M.Map UUID RemoteConfig) +autoEnableable = do + tm <- trustMap + (M.filterWithKey (notdead tm) . M.filter configured) + <$> remoteConfigMap + where + configured c = fromMaybe False $ + trueFalseParser' . fromProposedAccepted + =<< M.lookup autoEnableField c + notdead tm cu c = + let u = case findSameasUUID c of + Just (Sameas u') -> u' + Nothing -> cu + in lookupTrust' u tm /= DeadTrusted + diff --git a/Annex/SpecialRemote/Config.hs b/Annex/SpecialRemote/Config.hs new file mode 100644 index 0000000000..fff2c88c1d --- /dev/null +++ b/Annex/SpecialRemote/Config.hs @@ -0,0 +1,301 @@ +{- git-annex special remote configuration + - + - Copyright 2019-2023 Joey Hess + - + - Licensed under the GNU AGPL version 3 or higher. + -} + +{-# LANGUAGE TypeSynonymInstances, FlexibleInstances #-} +{-# OPTIONS_GHC -fno-warn-orphans #-} + +module Annex.SpecialRemote.Config where + +import Common +import Types.Remote (configParser) +import Types +import Types.UUID +import Types.ProposedAccepted +import Types.RemoteConfig +import Types.GitConfig +import Config.Cost + +import qualified Data.Map as M +import qualified Data.Set as S +import Text.Read +import Data.Typeable +import GHC.Stack + +newtype Sameas t = Sameas t + deriving (Show) + +newtype ConfigFrom t = ConfigFrom t + deriving (Show) + +{- The name of a configured remote is stored in its config using this key. -} +nameField :: RemoteConfigField +nameField = Accepted "name" + +{- The name of a sameas remote is stored using this key instead. + - This prevents old versions of git-annex getting confused. -} +sameasNameField :: RemoteConfigField +sameasNameField = Accepted "sameas-name" + +lookupName :: RemoteConfig -> Maybe String +lookupName c = fmap fromProposedAccepted $ + M.lookup nameField c <|> M.lookup sameasNameField c + +instance RemoteNameable RemoteConfig where + getRemoteName c = fromMaybe "" (lookupName c) + +{- The uuid that a sameas remote is the same as is stored in this key. -} +sameasUUIDField :: RemoteConfigField +sameasUUIDField = Accepted "sameas-uuid" + +{- The type of a remote is stored in its config using this key. -} +typeField :: RemoteConfigField +typeField = Accepted "type" + +autoEnableField :: RemoteConfigField +autoEnableField = Accepted "autoenable" + +costField :: RemoteConfigField +costField = Accepted "cost" + +encryptionField :: RemoteConfigField +encryptionField = Accepted "encryption" + +macField :: RemoteConfigField +macField = Accepted "mac" + +cipherField :: RemoteConfigField +cipherField = Accepted "cipher" + +cipherkeysField :: RemoteConfigField +cipherkeysField = Accepted "cipherkeys" + +pubkeysField :: RemoteConfigField +pubkeysField = Accepted "pubkeys" + +chunkField :: RemoteConfigField +chunkField = Accepted "chunk" + +chunksizeField :: RemoteConfigField +chunksizeField = Accepted "chunksize" + +embedCredsField :: RemoteConfigField +embedCredsField = Accepted "embedcreds" + +preferreddirField :: RemoteConfigField +preferreddirField = Accepted "preferreddir" + +exportTreeField :: RemoteConfigField +exportTreeField = Accepted "exporttree" + +importTreeField :: RemoteConfigField +importTreeField = Accepted "importtree" + +exportTree :: ParsedRemoteConfig -> Bool +exportTree = fromMaybe False . getRemoteConfigValue exportTreeField + +importTree :: ParsedRemoteConfig -> Bool +importTree = fromMaybe False . getRemoteConfigValue importTreeField + +{- Parsers for fields that are common to all special remotes. -} +commonFieldParsers :: [RemoteConfigFieldParser] +commonFieldParsers = + [ optionalStringParser nameField + (FieldDesc "name for the special remote") + , optionalStringParser sameasNameField HiddenField + , optionalStringParser sameasUUIDField HiddenField + , optionalStringParser typeField + (FieldDesc "type of special remote") + , autoEnableFieldParser + , costParser costField + (FieldDesc "default cost of this special remote") + , yesNoParser exportTreeField (Just False) + (FieldDesc "export trees of files to this remote") + , yesNoParser importTreeField (Just False) + (FieldDesc "import trees of files from this remote") + , optionalStringParser preferreddirField + (FieldDesc "directory whose content is preferred") + ] + +autoEnableFieldParser :: RemoteConfigFieldParser +autoEnableFieldParser = trueFalseParser autoEnableField (Just False) + (FieldDesc "automatically enable special remote") + +{- A remote with sameas-uuid set will inherit these values from the config + - of that uuid. These values cannot be overridden in the remote's config. -} +sameasInherits :: S.Set RemoteConfigField +sameasInherits = S.fromList + -- encryption configuration is necessarily the same for two + -- remotes that access the same data store + [ encryptionField + , macField + , cipherField + , cipherkeysField + , pubkeysField + -- legacy chunking was either enabled or not, so has to be the same + -- across configs for remotes that access the same data + , chunksizeField + -- (new-style chunking does not have that limitation) + -- but there is no benefit to picking a different chunk size + -- for the sameas remote, since it's reading whatever chunks were + -- stored + , chunkField + ] + +{- Each RemoteConfig that has a sameas-uuid inherits some fields + - from it. Such fields can only be set by inheritance; the RemoteConfig + - cannot provide values from them. -} +addSameasInherited :: M.Map UUID RemoteConfig -> RemoteConfig -> RemoteConfig +addSameasInherited m c = case findSameasUUID c of + Nothing -> c + Just (Sameas sameasuuid) -> case M.lookup sameasuuid m of + Nothing -> c + Just parentc -> + M.withoutKeys c sameasInherits + `M.union` + M.restrictKeys parentc sameasInherits + +findSameasUUID :: RemoteConfig -> Maybe (Sameas UUID) +findSameasUUID c = Sameas . toUUID . fromProposedAccepted + <$> M.lookup sameasUUIDField c + +{- Remove any fields inherited from a sameas-uuid. When storing a + - RemoteConfig, those fields don't get stored, since they were already + - inherited. -} +removeSameasInherited :: RemoteConfig -> RemoteConfig +removeSameasInherited c = case M.lookup sameasUUIDField c of + Nothing -> c + Just _ -> M.withoutKeys c sameasInherits + +{- Finds remote uuids with matching RemoteConfig. -} +findByRemoteConfig :: (RemoteConfig -> Bool) -> M.Map UUID RemoteConfig -> [(UUID, RemoteConfig, Maybe (ConfigFrom UUID))] +findByRemoteConfig matching = map sameasuuid . filter (matching . snd) . M.toList + where + sameasuuid (u, c) = case M.lookup sameasUUIDField c of + Nothing -> (u, c, Nothing) + Just u' -> (toUUID (fromProposedAccepted u'), c, Just (ConfigFrom u)) + +{- Extracts a value from ParsedRemoteConfig. -} +getRemoteConfigValue :: HasCallStack => Typeable v => RemoteConfigField -> ParsedRemoteConfig -> Maybe v +getRemoteConfigValue f (ParsedRemoteConfig m _) = case M.lookup f m of + Just (RemoteConfigValue v) -> case cast v of + Just v' -> Just v' + Nothing -> error $ unwords + [ "getRemoteConfigValue" + , fromProposedAccepted f + , "found value of unexpected type" + , show (typeOf v) ++ "." + , "This is a bug in git-annex!" + ] + Nothing -> Nothing + +{- Gets all fields that remoteConfigRestPassthrough matched. -} +getRemoteConfigPassedThrough :: ParsedRemoteConfig -> M.Map RemoteConfigField String +getRemoteConfigPassedThrough (ParsedRemoteConfig m _) = + flip M.mapMaybe m $ \(RemoteConfigValue v) -> + case cast v of + Just (PassedThrough s) -> Just s + Nothing -> Nothing + +newtype PassedThrough = PassedThrough String + +parsedRemoteConfig :: RemoteType -> RemoteConfig -> Annex ParsedRemoteConfig +parsedRemoteConfig t c = either (const emptycfg) id . parseRemoteConfig c + <$> configParser t c + where + emptycfg = ParsedRemoteConfig mempty c + +parseRemoteConfig :: RemoteConfig -> RemoteConfigParser -> Either String ParsedRemoteConfig +parseRemoteConfig c rpc = + go [] c (remoteConfigFieldParsers rpc ++ commonFieldParsers) + where + go l c' [] = + let (passover, leftovers) = partition + (maybe (const False) fst (remoteConfigRestPassthrough rpc) . fst) + (M.toList c') + leftovers' = filter (notaccepted . fst) leftovers + in if not (null leftovers') + then Left $ "Unexpected parameters: " ++ + unwords (map (fromProposedAccepted . fst) leftovers') + else + let m = M.fromList $ + l ++ map (uncurry passthrough) passover + in Right (ParsedRemoteConfig m c) + go l c' (p:rest) = do + let f = parserForField p + (valueParser p) (M.lookup f c) c >>= \case + Just v -> go ((f,v):l) (M.delete f c') rest + Nothing -> go l (M.delete f c') rest + + passthrough f v = (f, RemoteConfigValue (PassedThrough (fromProposedAccepted v))) + + notaccepted (Proposed _) = True + notaccepted (Accepted _) = False + +optionalStringParser :: RemoteConfigField -> FieldDesc -> RemoteConfigFieldParser +optionalStringParser f fielddesc = RemoteConfigFieldParser + { parserForField = f + , valueParser = p + , fieldDesc = fielddesc + , valueDesc = Nothing + } + where + p (Just v) _c = Right (Just (RemoteConfigValue (fromProposedAccepted v))) + p Nothing _c = Right Nothing + +yesNoParser :: RemoteConfigField -> Maybe Bool -> FieldDesc -> RemoteConfigFieldParser +yesNoParser f mdef fd = genParser yesno f mdef fd + (Just (ValueDesc "yes or no")) + where + yesno "yes" = Just True + yesno "no" = Just False + yesno _ = Nothing + +trueFalseParser :: RemoteConfigField -> Maybe Bool -> FieldDesc -> RemoteConfigFieldParser +trueFalseParser f mdef fd = genParser trueFalseParser' f mdef fd + (Just (ValueDesc "true or false")) + +-- Not using Git.Config.isTrueFalse because git supports +-- a lot of other values for true and false in its configs, +-- and this is not a git config and we want to avoid that mess. +trueFalseParser' :: String -> Maybe Bool +trueFalseParser' "true" = Just True +trueFalseParser' "false" = Just False +trueFalseParser' _ = Nothing + +costParser :: RemoteConfigField -> FieldDesc -> RemoteConfigFieldParser +costParser f fd = genParser readcost f Nothing fd + (Just (ValueDesc "a number")) + where + readcost :: String -> Maybe Cost + readcost = readMaybe + +genParser + :: Typeable t + => (String -> Maybe t) + -> RemoteConfigField + -> Maybe t -- ^ default if not configured + -> FieldDesc + -> Maybe ValueDesc + -> RemoteConfigFieldParser +genParser parse f mdef fielddesc valuedesc = RemoteConfigFieldParser + { parserForField = f + , valueParser = p + , fieldDesc = fielddesc + , valueDesc = valuedesc + } + where + p Nothing _c = Right (fmap RemoteConfigValue mdef) + p (Just v) _c = case parse (fromProposedAccepted v) of + Just b -> Right (Just (RemoteConfigValue b)) + Nothing -> case v of + Accepted _ -> Right (fmap RemoteConfigValue mdef) + Proposed _ -> Left $ + "Bad value for " ++ fromProposedAccepted f ++ + case valuedesc of + Just (ValueDesc vd) -> + " (expected " ++ vd ++ ")" + Nothing -> "" diff --git a/Annex/Ssh.hs b/Annex/Ssh.hs new file mode 100644 index 0000000000..e233e48b5a --- /dev/null +++ b/Annex/Ssh.hs @@ -0,0 +1,480 @@ +{- git-annex ssh interface, with connection caching + - + - Copyright 2012-2020 Joey Hess + - + - Licensed under the GNU AGPL version 3 or higher. + -} + +{-# LANGUAGE CPP #-} + +module Annex.Ssh ( + ConsumeStdin(..), + SshCommand, + sshCommand, + sshOptions, + sshCacheDir, + sshReadPort, + forceSshCleanup, + sshOptionsEnv, + sshOptionsTo, + inRepoWithSshOptionsTo, + runSshOptions, + sshAskPassEnv, + runSshAskPass +) where + +import Annex.Common +import Annex.LockFile +import qualified BuildInfo +import qualified Annex +import qualified Git +import qualified Git.Url +import Config +import Annex.Path +import Utility.Env +import Utility.Hash +import Types.CleanupActions +import Annex.Concurrent.Utility +import Types.Concurrency +import Git.Env +import Git.Ssh +import qualified Utility.RawFilePath as R +import Annex.Perms +#ifndef mingw32_HOST_OS +import Annex.LockPool +#endif + +import Control.Concurrent.STM +import qualified Data.ByteString as S +import qualified System.FilePath.ByteString as P + +{- Some ssh commands are fed stdin on a pipe and so should be allowed to + - consume it. But ssh commands that are not piped stdin should generally + - not be allowed to consume the process's stdin. -} +data ConsumeStdin = ConsumeStdin | NoConsumeStdin + +{- Generates a command to ssh to a given host (or user@host) on a given + - port. This includes connection caching parameters, and any ssh-options. + - If GIT_SSH or GIT_SSH_COMMAND is enabled, they are used instead. -} +sshCommand :: ConsumeStdin -> (SshHost, Maybe SshPort) -> RemoteGitConfig -> SshCommand -> Annex (FilePath, [CommandParam]) +sshCommand cs (host, port) gc remotecmd = ifM (liftIO safe_GIT_SSH) + ( maybe go return + =<< liftIO (gitSsh' host port remotecmd (consumeStdinParams cs)) + , go + ) + where + go = do + ps <- sshOptions cs (host, port) gc [] + return ("ssh", Param (fromSshHost host):ps++[Param remotecmd]) + +{- Generates parameters to ssh to a given host (or user@host) on a given + - port. This includes connection caching parameters, and any + - ssh-options. Note that the host to ssh to and the command to run + - are not included in the returned options. -} +sshOptions :: ConsumeStdin -> (SshHost, Maybe Integer) -> RemoteGitConfig -> [CommandParam] -> Annex [CommandParam] +sshOptions cs (host, port) gc opts = go =<< sshCachingInfo (host, port) + where + go (Nothing, params) = return $ mkparams cs params + go (Just socketfile, params) = do + prepSocket socketfile host (mkparams NoConsumeStdin params) + + return $ mkparams cs params + mkparams cs' ps = concat + [ ps + , map Param (remoteAnnexSshOptions gc) + , opts + , portParams port + , consumeStdinParams cs' + , [Param "-T"] + ] + +{- Due to passing -n to GIT_SSH and GIT_SSH_COMMAND, some settings + - of those that expect exactly git's parameters will break. So only + - use those if the user set GIT_ANNEX_USE_GIT_SSH to say it's ok. -} +safe_GIT_SSH :: IO Bool +safe_GIT_SSH = (== Just "1") <$> getEnv "GIT_ANNEX_USE_GIT_SSH" + +consumeStdinParams :: ConsumeStdin -> [CommandParam] +consumeStdinParams ConsumeStdin = [] +consumeStdinParams NoConsumeStdin = [Param "-n"] + +{- Returns a filename to use for a ssh connection caching socket, and + - parameters to enable ssh connection caching. -} +sshCachingInfo :: (SshHost, Maybe Integer) -> Annex (Maybe FilePath, [CommandParam]) +sshCachingInfo (host, port) = go =<< sshCacheDir' + where + go (Right dir) = + liftIO (bestSocketPath $ dir P. hostport2socket host port) >>= return . \case + Nothing -> (Nothing, []) + Just socketfile -> + let socketfile' = fromRawFilePath socketfile + in (Just socketfile', sshConnectionCachingParams socketfile') + -- No connection caching with concurrency is not a good + -- combination, so warn the user. + go (Left whynocaching) = do + getConcurrency >>= \case + NonConcurrent -> return () + Concurrent {} -> warnnocaching whynocaching + ConcurrentPerCpu -> warnnocaching whynocaching + return (Nothing, []) + + warnnocaching whynocaching = + whenM (annexAdviceNoSshCaching <$> Annex.getGitConfig) $ do + warning $ UnquotedString nocachingwarning + warning $ UnquotedString whynocaching + + nocachingwarning = unwords + [ "You have enabled concurrency, but git-annex is not able" + , "to use ssh connection caching. This may result in" + , "multiple ssh processes prompting for passwords at the" + , "same time." + ] + +{- Given an absolute path to use for a socket file, + - returns whichever is shorter of that or the relative path to the same + - file. + - + - If no path can be constructed that is a valid socket, returns Nothing. -} +bestSocketPath :: RawFilePath -> IO (Maybe RawFilePath) +bestSocketPath abssocketfile = do + relsocketfile <- liftIO $ relPathCwdToFile abssocketfile + let socketfile = if S.length abssocketfile <= S.length relsocketfile + then abssocketfile + else relsocketfile + return $ if valid_unix_socket_path socketfile sshgarbagelen + then Just socketfile + else Nothing + where + -- ssh appends a 16 char extension to the socket when setting it + -- up, which needs to be taken into account when checking + -- that a valid socket was constructed. + sshgarbagelen = 1+16 + +sshConnectionCachingParams :: FilePath -> [CommandParam] +sshConnectionCachingParams socketfile = + [ Param "-S", Param socketfile + , Param "-o", Param "ControlMaster=auto" + , Param "-o", Param "ControlPersist=yes" + ] + +sshSocketDirEnv :: String +sshSocketDirEnv = "GIT_ANNEX_SSH_SOCKET_DIR" + +{- Returns the directory where ssh connection caching sockets can be + - stored. + - + - The directory will be created if it does not exist. + -} +sshCacheDir :: Annex (Maybe RawFilePath) +sshCacheDir = eitherToMaybe <$> sshCacheDir' + +sshCacheDir' :: Annex (Either String RawFilePath) +sshCacheDir' = + ifM (fromMaybe BuildInfo.sshconnectioncaching . annexSshCaching <$> Annex.getGitConfig) + ( ifM crippledFileSystem + ( gettmpdir >>= \case + Nothing -> + return (Left crippledfswarning) + Just tmpdir -> + liftIO $ catchMsgIO $ + usetmpdir tmpdir + , do + d <- fromRepo gitAnnexSshDir + createAnnexDirectory d + return (Right d) + ) + , return (Left "annex.sshcaching is not set to true") + ) + where + gettmpdir = liftIO $ getEnv sshSocketDirEnv + + usetmpdir tmpdir = do + let socktmp = tmpdir "ssh" + createDirectoryIfMissing True socktmp + return (toRawFilePath socktmp) + + crippledfswarning = unwords + [ "This repository is on a crippled filesystem, so unix named" + , "pipes probably don't work, and ssh connection caching" + , "relies on those. One workaround is to set" + , sshSocketDirEnv + , "to point to a directory on a non-crippled filesystem." + ] + +portParams :: Maybe Integer -> [CommandParam] +portParams Nothing = [] +portParams (Just port) = [Param "-p", Param $ show port] + +{- Prepare to use a socket file for ssh connection caching. + - + - When concurrency is enabled, this blocks until a ssh connection + - has been made to the host. So, any password prompting by ssh will + - happen in this call, and only one ssh process will prompt at a time. + - + - Locks the socket lock file to prevent other git-annex processes from + - stopping the ssh multiplexer on this socket. + -} +prepSocket :: FilePath -> SshHost -> [CommandParam] -> Annex () +prepSocket socketfile sshhost sshparams = do + -- There could be stale ssh connections hanging around + -- from a previous git-annex run that was interrupted. + -- This must run only once, before we have made any ssh connection, + -- and any other prepSocket calls must block while it's run. + tv <- Annex.getRead Annex.sshstalecleaned + join $ liftIO $ atomically $ do + cleaned <- takeTMVar tv + if cleaned + then do + putTMVar tv cleaned + return noop + else return $ do + sshCleanup + liftIO $ atomically $ putTMVar tv True + -- Cleanup at shutdown. + Annex.addCleanupAction SshCachingCleanup sshCleanup + + let socketlock = socket2lock socketfile + + getConcurrency >>= \case + NonConcurrent -> return () + Concurrent {} -> makeconnection socketlock + ConcurrentPerCpu -> makeconnection socketlock + + lockFileCached socketlock + where + -- When the LockCache already has the socketlock in it, + -- the connection has already been started. Otherwise, + -- get the connection started now. + makeconnection socketlock = debugLocks $ + whenM (isNothing <$> fromLockCache socketlock) $ + -- See if ssh can connect in batch mode, + -- if so there's no need to block for a password + -- prompt. + unlessM (tryssh ["-o", "BatchMode=true"]) $ + -- ssh needs to prompt (probably) + -- If the user enters the wrong password, + -- ssh will tell them, so we can ignore + -- failure. + void $ prompt $ tryssh [] + -- Try to ssh to the host quietly. Returns True if ssh apparently + -- connected to the host successfully. If ssh failed to connect, + -- returns False. + -- Even if ssh is forced to run some specific command, this will + -- return True. + -- (Except there's an unlikely false positive where a forced + -- ssh command exits 255.) + tryssh extraps = liftIO $ withNullHandle $ \nullh -> do + let p = (proc "ssh" $ concat + [ extraps + , toCommand sshparams + , [fromSshHost sshhost, "true"] + ]) + { std_out = UseHandle nullh + , std_err = UseHandle nullh + } + withCreateProcess p $ \_ _ _ pid -> do + exitcode <- waitForProcess pid + return $ case exitcode of + ExitFailure 255 -> False + _ -> True + +{- Find ssh socket files. + - + - The check that the lock file exists makes only socket files + - that were set up by prepSocket be found. On some NFS systems, + - a deleted socket file may linger for a while under another filename; + - and this check makes such files be skipped since the corresponding lock + - file won't exist. + -} +enumSocketFiles :: Annex [FilePath] +enumSocketFiles = liftIO . go =<< sshCacheDir + where + go Nothing = return [] + go (Just dir) = filterM (R.doesPathExist . socket2lock) + =<< filter (not . isLock) + <$> catchDefaultIO [] (dirContents (fromRawFilePath dir)) + +{- Stop any unused ssh connection caching processes. -} +sshCleanup :: Annex () +sshCleanup = mapM_ cleanup =<< enumSocketFiles + where + cleanup socketfile = do +#ifndef mingw32_HOST_OS + -- Drop any shared lock we have, and take an + -- exclusive lock, without blocking. If the lock + -- succeeds, nothing is using this ssh, and it can + -- be stopped. + -- + -- After ssh is stopped cannot remove the lock file; + -- other processes may be waiting on our exclusive + -- lock to use it. + let lockfile = socket2lock socketfile + unlockFile lockfile + mode <- annexFileMode + tryLockExclusive (Just mode) lockfile >>= \case + Nothing -> noop + Just lck -> do + forceStopSsh socketfile + liftIO $ dropLock lck +#else + forceStopSsh socketfile +#endif + +{- Stop all ssh connection caching processes, even when they're in use. -} +forceSshCleanup :: Annex () +forceSshCleanup = mapM_ forceStopSsh =<< enumSocketFiles + +forceStopSsh :: FilePath -> Annex () +forceStopSsh socketfile = withNullHandle $ \nullh -> do + let (dir, base) = splitFileName socketfile + let p = (proc "ssh" $ toCommand $ + [ Param "-O", Param "stop" ] ++ + sshConnectionCachingParams base ++ + [Param "localhost"]) + { cwd = Just dir + -- "ssh -O stop" is noisy on stderr even with -q + , std_out = UseHandle nullh + , std_err = UseHandle nullh + } + void $ liftIO $ catchMaybeIO $ withCreateProcess p $ \_ _ _ pid -> + forceSuccessProcess p pid + liftIO $ removeWhenExistsWith R.removeLink (toRawFilePath socketfile) + +{- This needs to be as short as possible, due to limitations on the length + - of the path to a socket file. At the same time, it needs to be unique + - for each host. + -} +hostport2socket :: SshHost -> Maybe Integer -> RawFilePath +hostport2socket host Nothing = hostport2socket' $ fromSshHost host +hostport2socket host (Just port) = hostport2socket' $ + fromSshHost host ++ "!" ++ show port +hostport2socket' :: String -> RawFilePath +hostport2socket' s + | length s > lengthofmd5s = toRawFilePath $ show $ md5 $ encodeBL s + | otherwise = toRawFilePath s + where + lengthofmd5s = 32 + +socket2lock :: FilePath -> RawFilePath +socket2lock socket = toRawFilePath (socket ++ lockExt) + +isLock :: FilePath -> Bool +isLock f = lockExt `isSuffixOf` f + +lockExt :: String +lockExt = ".lock" + +{- This is the size of the sun_path component of sockaddr_un, which + - is the limit to the total length of the filename of a unix socket. + - + - On Linux, this is 108. On OSX, 104. TODO: Probe + -} +sizeof_sockaddr_un_sun_path :: Int +sizeof_sockaddr_un_sun_path = 100 + +{- Note that this looks at the true length of the path in bytes, as it will + - appear on disk. -} +valid_unix_socket_path :: RawFilePath -> Int -> Bool +valid_unix_socket_path f n = S.length f + n < sizeof_sockaddr_un_sun_path + +{- Parses the SSH port, and returns the other OpenSSH options. If + - several ports are found, the last one takes precedence. -} +sshReadPort :: [String] -> (Maybe Integer, [String]) +sshReadPort params = (port, reverse args) + where + (port,args) = aux (Nothing, []) params + aux (p,ps) [] = (p,ps) + aux (_,ps) ("-p":p:rest) = aux (readPort p, ps) rest + aux (p,ps) (q:rest) | "-p" `isPrefixOf` q = aux (readPort $ drop 2 q, ps) rest + | otherwise = aux (p,q:ps) rest + readPort p = fmap fst $ listToMaybe $ reads p + +{- When this env var is set, git-annex runs ssh with the specified + - options. (The options are separated by newlines.) + - + - This is a workaround for GIT_SSH not being able to contain + - additional parameters to pass to ssh. (GIT_SSH_COMMAND can, + - but is not supported by older versions of git.) -} +sshOptionsEnv :: String +sshOptionsEnv = "GIT_ANNEX_SSHOPTION" + +toSshOptionsEnv :: [CommandParam] -> String +toSshOptionsEnv = unlines . toCommand + +fromSshOptionsEnv :: String -> [CommandParam] +fromSshOptionsEnv = map Param . lines + +{- Enables ssh caching for git push/pull to a particular + - remote git repo. (Can safely be used on non-ssh remotes.) + - + - Also propigates any configured ssh-options. + - + - Like inRepo, the action is run with the local git repo. + - But here it's a modified version, with gitEnv to set GIT_SSH=git-annex, + - and sshOptionsEnv set so that git-annex will know what socket + - file to use. -} +inRepoWithSshOptionsTo :: Git.Repo -> RemoteGitConfig -> (Git.Repo -> IO a) -> Annex a +inRepoWithSshOptionsTo remote gc a = + liftIO . a =<< sshOptionsTo remote gc =<< gitRepo + +{- To make any git commands be run with ssh caching enabled, + - and configured ssh-options alters the local Git.Repo's gitEnv + - to set GIT_SSH=git-annex, and set sshOptionsEnv when running git + - commands. + - + - If GIT_SSH or GIT_SSH_COMMAND are enabled, this has no effect. -} +sshOptionsTo :: Git.Repo -> RemoteGitConfig -> Git.Repo -> Annex Git.Repo +sshOptionsTo remote gc localr + | not (Git.repoIsUrl remote) || Git.repoIsHttp remote = unchanged + | otherwise = case Git.Url.hostuser remote of + Nothing -> unchanged + Just host -> ifM (liftIO $ safe_GIT_SSH <&&> gitSshEnvSet) + ( unchanged + , do + let port = Git.Url.port remote + let sshhost = either giveup id (mkSshHost host) + (msockfile, cacheparams) <- sshCachingInfo (sshhost, port) + case msockfile of + Nothing -> use [] + Just sockfile -> do + prepSocket sockfile sshhost $ concat + [ cacheparams + , map Param (remoteAnnexSshOptions gc) + , portParams port + , consumeStdinParams NoConsumeStdin + , [Param "-T"] + ] + use cacheparams + ) + where + unchanged = return localr + + use opts = do + let sshopts = concat + [ opts + , map Param (remoteAnnexSshOptions gc) + ] + if null sshopts + then unchanged + else do + command <- liftIO programPath + liftIO $ do + localr' <- addGitEnv localr sshOptionsEnv + (toSshOptionsEnv sshopts) + addGitEnv localr' gitSshEnv command + +runSshOptions :: [String] -> String -> IO () +runSshOptions args s = do + let args' = toCommand (fromSshOptionsEnv s) ++ args + let p = proc "ssh" args' + exitcode <- withCreateProcess p $ \_ _ _ pid -> waitForProcess pid + exitWith exitcode + +{- When this env var is set, git-annex is being used as a ssh-askpass + - program, and should read the password from the specified location, + - and output it for ssh to read. -} +sshAskPassEnv :: String +sshAskPassEnv = "GIT_ANNEX_SSHASKPASS" + +runSshAskPass :: FilePath -> IO () +runSshAskPass passfile = putStrLn =<< readFile passfile diff --git a/Annex/StallDetection.hs b/Annex/StallDetection.hs new file mode 100644 index 0000000000..9b885c2ecf --- /dev/null +++ b/Annex/StallDetection.hs @@ -0,0 +1,154 @@ +{- Stall detection for transfers. + - + - Copyright 2020-2024 Joey Hess + - + - Licensed under the GNU AGPL version 3 or higher. + -} + +module Annex.StallDetection ( + getStallDetection, + detectStalls, + StallDetection, +) where + +import Annex.Common +import Types.StallDetection +import Types.Direction +import Types.Remote (gitconfig) +import Utility.Metered +import Utility.HumanTime +import Utility.DataUnits +import Utility.ThreadScheduler + +import Control.Concurrent.STM +import Control.Monad.IO.Class (MonadIO) +import Data.Time.Clock + +getStallDetection :: Direction -> Remote -> Maybe StallDetection +getStallDetection Download r = + remoteAnnexStallDetectionDownload (gitconfig r) + <|> remoteAnnexStallDetection (gitconfig r) +getStallDetection Upload r = + remoteAnnexStallDetectionUpload (gitconfig r) + <|> remoteAnnexStallDetection (gitconfig r) + +{- This may be safely canceled (with eg uninterruptibleCancel), + - as long as the passed action can be safely canceled. -} +detectStalls :: (Monad m, MonadIO m) => Maybe StallDetection -> TVar (Maybe BytesProcessed) -> m () -> m () +detectStalls Nothing _ _ = noop +detectStalls (Just StallDetectionDisabled) _ _ = noop +detectStalls (Just (StallDetection bwrate@(BwRate _minsz duration))) metervar onstall = do + -- If the progress is being updated, but less frequently than + -- the specified duration, a stall would be incorrectly detected. + -- + -- For example, consider the case of a remote that does + -- not support progress updates, but is chunked with a large chunk + -- size. In that case, progress is only updated after each chunk. + -- + -- So, wait for the first update, and see how long it takes. + -- When it's longer than the duration (or close to it), + -- upscale the duration and minsz accordingly. + starttime <- liftIO getCurrentTime + v <- waitforfirstupdate =<< readMeterVar metervar + endtime <- liftIO getCurrentTime + let timepassed = floor (endtime `diffUTCTime` starttime) + let BwRate scaledminsz scaledduration = upscale bwrate timepassed + detectStalls' scaledminsz scaledduration metervar onstall v + where + minwaitsecs = Seconds $ + min 60 (fromIntegral (durationSeconds duration)) + waitforfirstupdate startval = do + liftIO $ threadDelaySeconds minwaitsecs + v <- readMeterVar metervar + if v > startval + then return v + else waitforfirstupdate startval +detectStalls (Just ProbeStallDetection) metervar onstall = do + -- Only do stall detection once the progress is confirmed to be + -- consistently updating. After the first update, it needs to + -- advance twice within 30 seconds. With that established, + -- if no data at all is sent for a 60 second period, it's + -- assumed to be a stall. + v <- readMeterVar metervar >>= waitforfirstupdate + ontimelyadvance v $ \v' -> ontimelyadvance v' $ + detectStalls' 1 duration metervar onstall + where + duration = Duration 60 + + delay = Seconds (fromIntegral (durationSeconds duration) `div` 2) + + waitforfirstupdate startval = do + liftIO $ threadDelaySeconds delay + v <- readMeterVar metervar + if v > startval + then return v + else waitforfirstupdate startval + + ontimelyadvance v cont = do + liftIO $ threadDelaySeconds delay + v' <- readMeterVar metervar + when (v' > v) $ + cont v' + +detectStalls' + :: (Monad m, MonadIO m) + => ByteSize + -> Duration + -> TVar (Maybe BytesProcessed) + -> m () + -> Maybe ByteSize + -> m () +detectStalls' minsz duration metervar onstall st = do + liftIO $ threadDelaySeconds delay + -- Get whatever progress value was reported most recently, if any. + v <- readMeterVar metervar + let cont = detectStalls' minsz duration metervar onstall v + case (st, v) of + (Nothing, _) -> cont + (_, Nothing) -> cont + (Just prev, Just sofar) + -- Just in case a progress meter somehow runs + -- backwards, or a second progress meter was + -- started and is at a smaller value than + -- the previous one. + | prev > sofar -> cont + | sofar - prev < minsz -> onstall + | otherwise -> cont + where + delay = Seconds (fromIntegral (durationSeconds duration)) + +readMeterVar + :: MonadIO m + => TVar (Maybe BytesProcessed) + -> m (Maybe ByteSize) +readMeterVar metervar = liftIO $ atomically $ + fmap fromBytesProcessed <$> readTVar metervar + +-- Scale up the minsz and duration to match the observed time that passed +-- between progress updates. This allows for some variation in the transfer +-- rate causing later progress updates to happen less frequently. +upscale :: BwRate -> Integer -> BwRate +upscale input@(BwRate minsz duration) timepassedsecs + | timepassedsecs > dsecs `div` allowedvariation = BwRate + (ceiling (fromIntegral minsz * scale)) + (Duration (ceiling (fromIntegral dsecs * scale))) + | otherwise = input + where + scale = max (1 :: Double) $ + (fromIntegral timepassedsecs / fromIntegral (max dsecs 1)) + * fromIntegral allowedvariation + + dsecs = durationSeconds duration + + -- Setting this too low will make normal bandwidth variations be + -- considered to be stalls, while setting it too high will make + -- stalls not be detected for much longer than the expected + -- duration. + -- + -- For example, a BwRate of 20MB/1m, when the first progress + -- update takes 10m to arrive, is scaled to 600MB/30m. That 30m + -- is a reasonable since only 3 chunks get sent in that amount of + -- time at that rate. If allowedvariation = 10, that would + -- be 2000MB/100m, which seems much too long to wait to detect a + -- stall. + allowedvariation = 3 diff --git a/Annex/TaggedPush.hs b/Annex/TaggedPush.hs new file mode 100644 index 0000000000..d728678e9a --- /dev/null +++ b/Annex/TaggedPush.hs @@ -0,0 +1,68 @@ +{- git-annex tagged pushes + - + - Copyright 2012 Joey Hess + - + - Licensed under the GNU AGPL version 3 or higher. + -} + +{-# LANGUAGE OverloadedStrings #-} + +module Annex.TaggedPush where + +import Annex.Common +import qualified Remote +import qualified Annex.Branch +import qualified Git +import qualified Git.Ref +import qualified Git.Command +import qualified Git.Branch +import Utility.Base64 + +import qualified Data.ByteString as S + +{- Converts a git branch into a branch that is tagged with a UUID, typically + - the UUID of the repo that will be pushing it, and possibly with other + - information. + - + - Pushing to branches on the remote that have our uuid in them is ugly, + - but it reserves those branches for pushing by us, and so our pushes will + - never conflict with other pushes. + - + - To avoid cluttering up the branch display, the branch is put under + - refs/synced/, rather than the usual refs/remotes/ + - + - Both UUIDs and Base64 encoded data are always legal to be used in git + - refs, per git-check-ref-format. + -} +toTaggedBranch :: UUID -> Maybe String -> Git.Branch -> Git.Ref +toTaggedBranch u info b = Git.Ref $ S.intercalate "/" $ catMaybes + [ Just "refs/synced" + , Just $ fromUUID u + , toB64 . encodeBS <$> info + , Just $ Git.fromRef' $ Git.Ref.base b + ] + +fromTaggedBranch :: Git.Ref -> Maybe (UUID, Maybe S.ByteString) +fromTaggedBranch b = case splitc '/' $ Git.fromRef b of + ("refs":"synced":u:info:_base) -> + Just (toUUID u, fromB64Maybe (encodeBS info)) + ("refs":"synced":u:_base) -> + Just (toUUID u, Nothing) + _ -> Nothing + +listTaggedBranches :: Annex [(Git.Sha, Git.Ref)] +listTaggedBranches = filter (isJust . fromTaggedBranch . snd) + <$> inRepo Git.Ref.list + +taggedPush :: UUID -> Maybe String -> Git.Ref -> Remote -> Git.Repo -> IO Bool +taggedPush u info branch remote = Git.Command.runBool + [ Param "push" + , Param $ Remote.name remote + {- Using forcePush here is safe because we "own" the tagged branch + - we're pushing; it has no other writers. Ensures it is pushed + - even if it has been rewritten by a transition. -} + , Param $ Git.Branch.forcePush $ refspec Annex.Branch.name + , Param $ refspec branch + ] + where + refspec b = Git.fromRef b ++ ":" ++ Git.fromRef (toTaggedBranch u info b) diff --git a/Annex/Tmp.hs b/Annex/Tmp.hs new file mode 100644 index 0000000000..2bbebd6388 --- /dev/null +++ b/Annex/Tmp.hs @@ -0,0 +1,74 @@ +{- git-annex tmp files + - + - Copyright 2019 Joey Hess + - + - Licensed under the GNU AGPL version 3 or higher. + -} + +module Annex.Tmp where + +import Annex.Common +import qualified Annex +import Annex.LockFile +import Annex.Perms +import Types.CleanupActions +import qualified Utility.RawFilePath as R + +import Data.Time.Clock.POSIX +import System.PosixCompat.Files (modificationTime) + +-- | For creation of tmp files, other than for key's contents. +-- +-- The action should normally clean up whatever files it writes to the temp +-- directory that is passed to it. However, once the action is done, +-- any files left in that directory may be cleaned up by another process at +-- any time. +withOtherTmp :: (RawFilePath -> Annex a) -> Annex a +withOtherTmp a = do + Annex.addCleanupAction OtherTmpCleanup cleanupOtherTmp + tmpdir <- fromRepo gitAnnexTmpOtherDir + tmplck <- fromRepo gitAnnexTmpOtherLock + withSharedLock tmplck $ do + void $ createAnnexDirectory tmpdir + a tmpdir + +-- | This uses an alternate temp directory. The action should normally +-- clean up whatever files it writes there, but if it leaves files +-- there (perhaps due to being interrupted), the files will be eventually +-- cleaned up by another git-annex process (after they're a week old). +-- +-- Unlike withOtherTmp, this does not rely on locking working. +-- Its main use is in situations where the state of lockfile is not +-- determined yet, eg during initialization. +withEventuallyCleanedOtherTmp :: (RawFilePath -> Annex a) -> Annex a +withEventuallyCleanedOtherTmp = bracket setup cleanup + where + setup = do + tmpdir <- fromRepo gitAnnexTmpOtherDirOld + void $ createAnnexDirectory tmpdir + return tmpdir + cleanup = liftIO . void . tryIO . removeDirectory . fromRawFilePath + +-- | Cleans up any tmp files that were left by a previous +-- git-annex process that got interrupted or failed to clean up after +-- itself for some other reason. +-- +-- Does not do anything if withOtherTmp is running. +cleanupOtherTmp :: Annex () +cleanupOtherTmp = do + tmplck <- fromRepo gitAnnexTmpOtherLock + void $ tryIO $ tryExclusiveLock tmplck $ do + tmpdir <- fromRawFilePath <$> fromRepo gitAnnexTmpOtherDir + void $ liftIO $ tryIO $ removeDirectoryRecursive tmpdir + oldtmp <- fromRawFilePath <$> fromRepo gitAnnexTmpOtherDirOld + liftIO $ mapM_ cleanold + =<< emptyWhenDoesNotExist (dirContentsRecursive oldtmp) + liftIO $ void $ tryIO $ removeDirectory oldtmp -- when empty + where + cleanold f = do + now <- liftIO getPOSIXTime + let oldenough = now - (60 * 60 * 24 * 7) + catchMaybeIO (modificationTime <$> R.getSymbolicLinkStatus (toRawFilePath f)) >>= \case + Just mtime | realToFrac mtime <= oldenough -> + void $ tryIO $ removeWhenExistsWith R.removeLink (toRawFilePath f) + _ -> return () diff --git a/Annex/Transfer.hs b/Annex/Transfer.hs new file mode 100644 index 0000000000..4235dfcd8d --- /dev/null +++ b/Annex/Transfer.hs @@ -0,0 +1,443 @@ +{- git-annex transfers + - + - Copyright 2012-2024 Joey Hess + - + - Licensed under the GNU AGPL version 3 or higher. + -} + +{-# LANGUAGE CPP, BangPatterns, OverloadedStrings #-} + +module Annex.Transfer ( + module X, + upload, + upload', + alwaysUpload, + download, + download', + runTransfer, + alwaysRunTransfer, + noRetry, + stdRetry, + pickRemote, +) where + +import Annex.Common +import qualified Annex +import Logs.Transfer as X +import Types.Transfer as X +import Annex.Notification as X +import Annex.Content +import Annex.Perms +import Annex.Action +import Utility.Metered +import Utility.ThreadScheduler +import Utility.FileMode +import Annex.LockPool +import Types.Key +import qualified Types.Remote as Remote +import qualified Types.Backend +import Types.Concurrency +import Annex.Concurrent +import Types.WorkerPool +import Annex.WorkerPool +import Annex.TransferrerPool +import Annex.StallDetection +import Backend (isCryptographicallySecureKey) +import Types.StallDetection +import qualified Utility.RawFilePath as R + +import Control.Concurrent +import Control.Concurrent.Async +import Control.Concurrent.STM hiding (retry) +import qualified Data.Map.Strict as M +import qualified System.FilePath.ByteString as P +import Data.Ord + +-- Upload, supporting canceling detected stalls. +upload :: Remote -> Key -> AssociatedFile -> RetryDecider -> NotifyWitness -> Annex Bool +upload r key f d witness = + case getStallDetection Upload r of + Nothing -> go (Just ProbeStallDetection) + Just StallDetectionDisabled -> go Nothing + Just sd -> runTransferrer sd r key f d Upload witness + where + go sd = upload' (Remote.uuid r) key f sd d (action . Remote.storeKey r key f) witness + +-- Upload, not supporting canceling detected stalls +upload' :: Observable v => UUID -> Key -> AssociatedFile -> Maybe StallDetection -> RetryDecider -> (MeterUpdate -> Annex v) -> NotifyWitness -> Annex v +upload' u key f sd d a _witness = guardHaveUUID u $ + runTransfer (Transfer Upload u (fromKey id key)) Nothing f sd d a + +alwaysUpload :: Observable v => UUID -> Key -> AssociatedFile -> Maybe StallDetection -> RetryDecider -> (MeterUpdate -> Annex v) -> NotifyWitness -> Annex v +alwaysUpload u key f sd d a _witness = guardHaveUUID u $ + alwaysRunTransfer (Transfer Upload u (fromKey id key)) Nothing f sd d a + +-- Download, supporting canceling detected stalls. +download :: Remote -> Key -> AssociatedFile -> RetryDecider -> NotifyWitness -> Annex Bool +download r key f d witness = + case getStallDetection Download r of + Nothing -> go (Just ProbeStallDetection) + Just StallDetectionDisabled -> go Nothing + Just sd -> runTransferrer sd r key f d Download witness + where + go sd = getViaTmp (Remote.retrievalSecurityPolicy r) vc key f Nothing $ \dest -> + download' (Remote.uuid r) key f sd d (go' dest) witness + go' dest p = verifiedAction $ + Remote.retrieveKeyFile r key f (fromRawFilePath dest) p vc + vc = Remote.RemoteVerify r + +-- Download, not supporting canceling detected stalls. +download' :: Observable v => UUID -> Key -> AssociatedFile -> Maybe StallDetection -> RetryDecider -> (MeterUpdate -> Annex v) -> NotifyWitness -> Annex v +download' u key f sd d a _witness = guardHaveUUID u $ + runTransfer (Transfer Download u (fromKey id key)) Nothing f sd d a + +guardHaveUUID :: Observable v => UUID -> Annex v -> Annex v +guardHaveUUID u a + | u == NoUUID = return observeFailure + | otherwise = a + +{- Runs a transfer action. Creates and locks the lock file while the + - action is running, and stores info in the transfer information + - file. + - + - If the transfer action returns False, the transfer info is + - left in the failedTransferDir. + - + - If the transfer is already in progress, returns False. + - + - An upload can be run from a read-only filesystem, and in this case + - no transfer information or lock file is used. + - + - Cannot cancel stalls, but when a likely stall is detected, + - suggests to the user that they enable stall detection handling. + -} +runTransfer :: Observable v => Transfer -> Maybe Backend -> AssociatedFile -> Maybe StallDetection -> RetryDecider -> (MeterUpdate -> Annex v) -> Annex v +runTransfer = runTransfer' False + +{- Like runTransfer, but ignores any existing transfer lock file for the + - transfer, allowing re-running a transfer that is already in progress. + -} +alwaysRunTransfer :: Observable v => Transfer -> Maybe Backend -> AssociatedFile -> Maybe StallDetection -> RetryDecider -> (MeterUpdate -> Annex v) -> Annex v +alwaysRunTransfer = runTransfer' True + +runTransfer' :: Observable v => Bool -> Transfer -> Maybe Backend -> AssociatedFile -> Maybe StallDetection -> RetryDecider -> (MeterUpdate -> Annex v) -> Annex v +runTransfer' ignorelock t eventualbackend afile stalldetection retrydecider transferaction = + enteringStage (TransferStage (transferDirection t)) $ + debugLocks $ + preCheckSecureHashes (transferKey t) eventualbackend go + where + go = do + info <- liftIO $ startTransferInfo afile + (tfile, lckfile, moldlckfile) <- fromRepo $ transferFileAndLockFile t + (meter, createtfile, metervar) <- mkProgressUpdater t info tfile + mode <- annexFileMode + (lck, inprogress) <- prep lckfile moldlckfile createtfile mode + if inprogress && not ignorelock + then do + warning "transfer already in progress, or unable to take transfer lock" + return observeFailure + else do + v <- retry 0 info metervar $ + detectStallsAndSuggestConfig stalldetection metervar $ + transferaction meter + liftIO $ cleanup tfile lckfile moldlckfile lck + if observeBool v + then removeFailedTransfer t + else recordFailedTransfer t info + return v + + prep :: RawFilePath -> Maybe RawFilePath -> Annex () -> ModeSetter -> Annex (Maybe (LockHandle, Maybe LockHandle), Bool) +#ifndef mingw32_HOST_OS + prep lckfile moldlckfile createtfile mode = catchPermissionDenied (const prepfailed) $ do + createAnnexDirectory $ P.takeDirectory lckfile + tryLockExclusive (Just mode) lckfile >>= \case + Nothing -> return (Nothing, True) + -- Since the lock file is removed in cleanup, + -- there's a race where different processes + -- may have a deleted and a new version of the same + -- lock file open. checkSaneLock guards against + -- that. + Just lockhandle -> ifM (checkSaneLock lckfile lockhandle) + ( case moldlckfile of + Nothing -> do + createtfile + return (Just (lockhandle, Nothing), False) + Just oldlckfile -> do + createAnnexDirectory $ P.takeDirectory oldlckfile + tryLockExclusive (Just mode) oldlckfile >>= \case + Nothing -> do + liftIO $ dropLock lockhandle + return (Nothing, True) + Just oldlockhandle -> ifM (checkSaneLock oldlckfile oldlockhandle) + ( do + createtfile + return (Just (lockhandle, Just oldlockhandle), False) + , do + liftIO $ dropLock oldlockhandle + liftIO $ dropLock lockhandle + return (Nothing, True) + ) + , do + liftIO $ dropLock lockhandle + return (Nothing, True) + ) +#else + prep lckfile moldlckfile createtfile _mode = catchPermissionDenied (const prepfailed) $ do + createAnnexDirectory $ P.takeDirectory lckfile + catchMaybeIO (liftIO $ lockExclusive lckfile) >>= \case + Just (Just lockhandle) -> case moldlckfile of + Nothing -> do + createtfile + return (Just (lockhandle, Nothing), False) + Just oldlckfile -> do + createAnnexDirectory $ P.takeDirectory oldlckfile + catchMaybeIO (liftIO $ lockExclusive oldlckfile) >>= \case + Just (Just oldlockhandle) -> do + createtfile + return (Just (lockhandle, Just oldlockhandle), False) + _ -> do + liftIO $ dropLock lockhandle + return (Nothing, False) + _ -> return (Nothing, False) +#endif + prepfailed = return (Nothing, False) + + cleanup _ _ _ Nothing = noop + cleanup tfile lckfile moldlckfile (Just (lockhandle, moldlockhandle)) = do + void $ tryIO $ R.removeLink tfile +#ifndef mingw32_HOST_OS + void $ tryIO $ R.removeLink lckfile + maybe noop (void . tryIO . R.removeLink) moldlckfile + maybe noop dropLock moldlockhandle + dropLock lockhandle +#else + {- Windows cannot delete the lockfile until the lock + - is closed. So it's possible to race with another + - process that takes the lock before it's removed, + - so ignore failure to remove. + -} + maybe noop dropLock moldlockhandle + dropLock lockhandle + void $ tryIO $ R.removeLink lckfile + maybe noop (void . tryIO . R.removeLink) moldlckfile +#endif + + retry numretries oldinfo metervar run = + tryNonAsync run >>= \case + Right v + | observeBool v -> return v + | otherwise -> checkretry + Left e -> do + warning (UnquotedString (show e)) + checkretry + where + checkretry = do + b <- getbytescomplete metervar + let newinfo = oldinfo { bytesComplete = Just b } + let !numretries' = succ numretries + ifM (retrydecider numretries' oldinfo newinfo) + ( retry numretries' newinfo metervar run + , return observeFailure + ) + + getbytescomplete metervar = liftIO $ + maybe 0 fromBytesProcessed <$> readTVarIO metervar + +detectStallsAndSuggestConfig :: Maybe StallDetection -> TVar (Maybe BytesProcessed) -> Annex a -> Annex a +detectStallsAndSuggestConfig Nothing _ a = a +detectStallsAndSuggestConfig sd@(Just _) metervar a = + bracket setup cleanup (const a) + where + setup = do + v <- liftIO newEmptyTMVarIO + sdt <- liftIO $ async $ detectStalls sd metervar $ + void $ atomically $ tryPutTMVar v True + wt <- liftIO . async =<< forkState (warnonstall v) + return (v, sdt, wt) + cleanup (v, sdt, wt) = do + liftIO $ uninterruptibleCancel sdt + void $ liftIO $ atomically $ tryPutTMVar v False + join (liftIO (wait wt)) + warnonstall v = whenM (liftIO (atomically (takeTMVar v))) $ + warning "Transfer seems to have stalled. To restart stalled transfers, configure annex.stalldetection" + +{- Runs a transfer using a separate process, which lets detected stalls be + - canceled. -} +runTransferrer + :: StallDetection + -> Remote + -> Key + -> AssociatedFile + -> RetryDecider + -> Direction + -> NotifyWitness + -> Annex Bool +runTransferrer sd r k afile retrydecider direction _witness = + enteringStage (TransferStage direction) $ preCheckSecureHashes k Nothing $ do + info <- liftIO $ startTransferInfo afile + go 0 info + where + go numretries info = + withTransferrer (performTransfer (Just sd) AnnexLevel id (Just r) t info) >>= \case + Right () -> return True + Left newinfo -> do + let !numretries' = succ numretries + ifM (retrydecider numretries' info newinfo) + ( go numretries' newinfo + , return False + ) + t = Transfer direction (Remote.uuid r) (fromKey id k) + +{- Avoid download and upload of keys with insecure content when + - annex.securehashesonly is configured. + - + - This is not a security check. Even if this let the content be + - downloaded, the actual security checks would prevent the content from + - being added to the repository. The only reason this is done here is to + - avoid transferring content that's going to be rejected anyway. + - + - We assume that, if annex.securehashesonly is set and the local repo + - still contains content using an insecure hash, remotes will likewise + - tend to be configured to reject it, so Upload is also prevented. + -} +preCheckSecureHashes :: Observable v => Key -> Maybe Backend -> Annex v -> Annex v +preCheckSecureHashes k meventualbackend a = case meventualbackend of + Just eventualbackend -> go + (pure (Types.Backend.isCryptographicallySecure eventualbackend)) + (Types.Backend.backendVariety eventualbackend) + Nothing -> go + (isCryptographicallySecureKey k) + (fromKey keyVariety k) + where + go checksecure variety = ifM checksecure + ( a + , ifM (annexSecureHashesOnly <$> Annex.getGitConfig) + ( blocked variety + , a + ) + ) + blocked variety = do + warning $ UnquotedString $ "annex.securehashesonly blocked transfer of " ++ decodeBS (formatKeyVariety variety) ++ " key" + return observeFailure + +type NumRetries = Integer + +type RetryDecider = NumRetries -> TransferInfo -> TransferInfo -> Annex Bool + +{- Both retry deciders are checked together, so if one chooses to delay, + - it will always take effect. -} +combineRetryDeciders :: RetryDecider -> RetryDecider -> RetryDecider +combineRetryDeciders a b = \n old new -> do + ar <- a n old new + br <- b n old new + return (ar || br) + +noRetry :: RetryDecider +noRetry _ _ _ = pure False + +stdRetry :: RetryDecider +stdRetry = combineRetryDeciders forwardRetry configuredRetry + +{- Keep retrying failed transfers, as long as forward progress is being + - made. + - + - Up to a point -- while some remotes can resume where the previous + - transfer left off, and so it would make sense to keep retrying forever, + - other remotes restart each transfer from the beginning, and so even if + - forward progress is being made, it's not real progress. So, retry a + - maximum of 5 times by default. + -} +forwardRetry :: RetryDecider +forwardRetry numretries old new + | fromMaybe 0 (bytesComplete old) < fromMaybe 0 (bytesComplete new) = + (numretries <=) <$> maybe globalretrycfg pure remoteretrycfg + | otherwise = return False + where + globalretrycfg = fromMaybe 5 . annexForwardRetry + <$> Annex.getGitConfig + remoteretrycfg = remoteAnnexRetry =<< + (Remote.gitconfig <$> transferRemote new) + +{- Retries a number of times with growing delays in between when enabled + - by git configuration. -} +configuredRetry :: RetryDecider +configuredRetry numretries _old new = do + (maxretries, Seconds initretrydelay) <- getcfg $ + Remote.gitconfig <$> transferRemote new + if numretries < maxretries + then do + let retrydelay = Seconds (initretrydelay * 2^(numretries-1)) + showSideAction $ UnquotedString $ "Delaying " ++ show (fromSeconds retrydelay) ++ "s before retrying." + liftIO $ threadDelaySeconds retrydelay + return True + else return False + where + globalretrycfg = fromMaybe 0 . annexRetry + <$> Annex.getGitConfig + globalretrydelaycfg = fromMaybe (Seconds 1) . annexRetryDelay + <$> Annex.getGitConfig + getcfg Nothing = (,) <$> globalretrycfg <*> globalretrydelaycfg + getcfg (Just gc) = (,) + <$> maybe globalretrycfg return (remoteAnnexRetry gc) + <*> maybe globalretrydelaycfg return (remoteAnnexRetryDelay gc) + +{- Picks a remote from the list and tries a transfer to it. If the transfer + - does not succeed, goes on to try other remotes from the list. + - + - The list should already be ordered by remote cost, and is normally + - tried in order. However, when concurrent jobs are running, they will + - be assigned different remotes of the same cost when possible. This can + - increase total transfer speed. + -} +pickRemote :: Observable v => [Remote] -> (Remote -> Annex v) -> Annex v +pickRemote l a = debugLocks $ go l =<< getConcurrency + where + go [] _ = return observeFailure + go (r:[]) _ = a r + go rs NonConcurrent = gononconcurrent rs + go rs (Concurrent n) + | n <= 1 = gononconcurrent rs + | otherwise = goconcurrent rs + go rs ConcurrentPerCpu = goconcurrent rs + + gononconcurrent [] = return observeFailure + gononconcurrent (r:rs) = do + ok <- a r + if observeBool ok + then return ok + else gononconcurrent rs + + goconcurrent rs = do + mv <- Annex.getRead Annex.activeremotes + active <- liftIO $ takeMVar mv + let rs' = sortBy (lessActiveFirst active) rs + goconcurrent' mv active rs' + + goconcurrent' mv active [] = do + liftIO $ putMVar mv active + return observeFailure + goconcurrent' mv active (r:rs) = do + let !active' = M.insertWith (+) r 1 active + liftIO $ putMVar mv active' + let getnewactive = do + active'' <- liftIO $ takeMVar mv + let !active''' = M.update (\n -> if n > 1 then Just (n-1) else Nothing) r active'' + return active''' + let removeactive = liftIO . putMVar mv =<< getnewactive + ok <- a r `onException` removeactive + if observeBool ok + then do + removeactive + return ok + else do + active'' <- getnewactive + -- Re-sort the remaining rs + -- because other threads could have + -- been assigned them in the meantime. + let rs' = sortBy (lessActiveFirst active'') rs + goconcurrent' mv active'' rs' + +lessActiveFirst :: M.Map Remote Integer -> Remote -> Remote -> Ordering +lessActiveFirst active a b + | Remote.cost a == Remote.cost b = comparing (`M.lookup` active) a b + | otherwise = comparing Remote.cost a b diff --git a/Annex/TransferrerPool.hs b/Annex/TransferrerPool.hs new file mode 100644 index 0000000000..481e08e9f7 --- /dev/null +++ b/Annex/TransferrerPool.hs @@ -0,0 +1,300 @@ +{- A pool of "git-annex transferrer" processes + - + - Copyright 2013-2022 Joey Hess + - + - Licensed under the GNU AGPL version 3 or higher. + -} + +{-# LANGUAGE OverloadedStrings #-} +{-# LANGUAGE RankNTypes #-} +{-# LANGUAGE CPP #-} + +module Annex.TransferrerPool where + +import Annex.Common +import qualified Annex +import Types.TransferrerPool +import Types.Transferrer +import Types.Transfer +import qualified Types.Remote as Remote +import Types.Messages +import Types.CleanupActions +import Messages.Serialized +import Annex.Path +import Annex.StallDetection +import Annex.Link +import Utility.Batch +import Utility.Metered +import qualified Utility.SimpleProtocol as Proto + +import Control.Concurrent +import Control.Concurrent.Async +import Control.Concurrent.STM hiding (check) +import Control.Monad.IO.Class (MonadIO) +import qualified Data.Map as M +#ifndef mingw32_HOST_OS +import System.Posix.Signals +import System.Posix.Process (getProcessGroupIDOf) +#endif + +type SignalActionsVar = TVar (M.Map SignalAction (Int -> IO ())) + +data RunTransferrer = RunTransferrer String [CommandParam] BatchCommandMaker + +mkRunTransferrer :: BatchCommandMaker -> Annex RunTransferrer +mkRunTransferrer batchmaker = RunTransferrer + <$> liftIO programPath + <*> gitAnnexChildProcessParams "transferrer" [] + <*> pure batchmaker + +{- Runs an action with a Transferrer from the pool. -} +withTransferrer :: (Transferrer -> Annex a) -> Annex a +withTransferrer a = do + rt <- mkRunTransferrer nonBatchCommandMaker + pool <- Annex.getRead Annex.transferrerpool + let nocheck = pure (pure True) + signalactonsvar <- Annex.getRead Annex.signalactions + withTransferrer' False signalactonsvar nocheck rt pool a + +withTransferrer' + :: (MonadIO m, MonadMask m) + => Bool + -- ^ When minimizeprocesses is True, only one Transferrer is left + -- running in the pool at a time. So if this needed to start a + -- new Transferrer, it's stopped when done. Otherwise, idle + -- processes are left in the pool for use later. + -> SignalActionsVar + -> MkCheckTransferrer + -> RunTransferrer + -> TransferrerPool + -> (Transferrer -> m a) + -> m a +withTransferrer' minimizeprocesses signalactonsvar mkcheck rt pool a = do + (mi, leftinpool) <- liftIO $ atomically (popTransferrerPool pool) + (i@(TransferrerPoolItem _ check), t) <- liftIO $ case mi of + Nothing -> do + t <- mkTransferrer signalactonsvar rt + i <- mkTransferrerPoolItem mkcheck t + return (i, t) + Just i -> checkTransferrerPoolItem signalactonsvar rt i + a t `finally` returntopool leftinpool check t i + where + returntopool leftinpool check t i + | not minimizeprocesses || leftinpool == 0 = + -- If the transferrer got killed, the handles will + -- be closed, so it should not be returned to the + -- pool. + liftIO $ whenM (hIsOpen (transferrerWrite t)) $ + liftIO $ atomically $ pushTransferrerPool pool i + | otherwise = liftIO $ do + void $ forkIO $ transferrerShutdown t + atomically $ pushTransferrerPool pool $ TransferrerPoolItem Nothing check + +{- Check if a Transferrer from the pool is still ok to be used. + - If not, stop it and start a new one. -} +checkTransferrerPoolItem :: SignalActionsVar -> RunTransferrer -> TransferrerPoolItem -> IO (TransferrerPoolItem, Transferrer) +checkTransferrerPoolItem signalactonsvar rt i = case i of + TransferrerPoolItem (Just t) check -> ifM check + ( return (i, t) + , do + transferrerShutdown t + new check + ) + TransferrerPoolItem Nothing check -> new check + where + new check = do + t <- mkTransferrer signalactonsvar rt + return (TransferrerPoolItem (Just t) check, t) + +data TransferRequestLevel = AnnexLevel | AssistantLevel + deriving (Show) + +{- Requests that a Transferrer perform a Transfer, and waits for it to + - finish. + - + - When a stall is detected, kills the Transferrer. + - + - If the transfer failed or stalled, returns TransferInfo with an + - updated bytesComplete reflecting how much data has been transferred. + -} +performTransfer + :: (Monad m, MonadIO m, MonadMask m) + => Maybe StallDetection + -> TransferRequestLevel + -> (forall a. Annex a -> m a) + -- ^ Run an annex action in the monad. Will not be used with + -- actions that block for a long time. + -> Maybe Remote + -> Transfer + -> TransferInfo + -> Transferrer + -> m (Either TransferInfo ()) +performTransfer stalldetection level runannex r t info transferrer = do + bpv <- liftIO $ newTVarIO zeroBytesProcessed + ifM (catchBoolIO $ bracket setup cleanup (go bpv)) + ( return (Right ()) + , do + n <- liftIO $ atomically $ + fromBytesProcessed <$> readTVar bpv + return $ Left $ info { bytesComplete = Just n } + ) + where + setup = do + liftIO $ sendRequest level t r + (associatedFile info) + (transferrerWrite transferrer) + metervar <- liftIO $ newTVarIO Nothing + stalledvar <- liftIO $ newTVarIO False + tid <- liftIO $ async $ + detectStalls stalldetection metervar $ do + atomically $ writeTVar stalledvar True + killTransferrer transferrer + return (metervar, tid, stalledvar) + + cleanup (_, tid, stalledvar) = do + liftIO $ uninterruptibleCancel tid + whenM (liftIO $ atomically $ readTVar stalledvar) $ do + runannex $ showLongNote "Transfer stalled" + -- Close handles, to prevent the transferrer being + -- reused since the process was killed. + liftIO $ hClose $ transferrerRead transferrer + liftIO $ hClose $ transferrerWrite transferrer + + go bpv (metervar, _, _) = relaySerializedOutput + (liftIO $ readResponse (transferrerRead transferrer)) + (liftIO . sendSerializedOutputResponse (transferrerWrite transferrer)) + (updatemeter bpv metervar) + runannex + + updatemeter bpv metervar (Just n) = liftIO $ do + atomically $ writeTVar metervar (Just n) + atomically $ writeTVar bpv n + updatemeter _bpv metervar Nothing = liftIO $ + atomically $ writeTVar metervar Nothing + +{- Starts a new git-annex transfer process, setting up handles + - that will be used to communicate with it. -} +mkTransferrer :: SignalActionsVar -> RunTransferrer -> IO Transferrer +#ifndef mingw32_HOST_OS +mkTransferrer signalactonsvar (RunTransferrer program params batchmaker) = do +#else +mkTransferrer _ (RunTransferrer program params batchmaker) = do +#endif + {- It runs as a batch job. -} + let (program', params') = batchmaker (program, params) + {- It's put into its own group so that the whole group can be + - killed to stop a transfer. -} + (Just writeh, Just readh, _, ph) <- createProcess + (proc program' $ toCommand params') + { create_group = True + , std_in = CreatePipe + , std_out = CreatePipe + } + + {- Set up signal propagation, so eg ctrl-c will also interrupt + - the processes in the transferrer's process group. + - + - There is a race between the process being created and this point. + - If a signal is received before this can run, it is not sent to + - the transferrer. This leaves the transferrer waiting for the + - first message on stdin to tell what to do. If the signal kills + - this parent process, the transferrer will then get a sigpipe + - and die too. If the signal suspends this parent process, + - it's ok to leave the transferrer running, as it's waiting on + - the pipe until this process wakes back up. + -} +#ifndef mingw32_HOST_OS + pid <- getPid ph + unregistersignalprop <- case pid of + Just p -> getProcessGroupIDOf p >>= \pgrp -> do + atomically $ modifyTVar' signalactonsvar $ + M.insert (PropagateSignalProcessGroup p) $ \sig -> + signalProcessGroup (fromIntegral sig) pgrp + return $ atomically $ modifyTVar' signalactonsvar $ + M.delete (PropagateSignalProcessGroup p) + Nothing -> return noop +#else + let unregistersignalprop = noop +#endif + + return $ Transferrer + { transferrerRead = readh + , transferrerWrite = writeh + , transferrerHandle = ph + , transferrerShutdown = do + -- The transferrer may write to stdout + -- as it's shutting down, so don't close + -- the readh right away. Instead, drain + -- anything sent to it. + drainer <- async $ void $ hGetContents readh + hClose writeh + void $ waitForProcess ph + wait drainer + hClose readh + unregistersignalprop + } + +-- | Send a request to perform a transfer. +sendRequest :: TransferRequestLevel -> Transfer -> Maybe Remote -> AssociatedFile -> Handle -> IO () +sendRequest level t mremote afile h = do + let tr = maybe + (TransferRemoteUUID (transferUUID t)) + (TransferRemoteName . Remote.name) + mremote + let f = case (level, transferDirection t) of + (AnnexLevel, Upload) -> UploadRequest + (AnnexLevel, Download) -> DownloadRequest + (AssistantLevel, Upload) -> AssistantUploadRequest + (AssistantLevel, Download) -> AssistantDownloadRequest + let r = f tr (transferKey t) (TransferAssociatedFile afile) + let l = unwords $ Proto.formatMessage r + debug "Annex.TransferrerPool" ("> " ++ l) + hPutStrLn h l + hFlush h + +sendSerializedOutputResponse :: Handle -> SerializedOutputResponse -> IO () +sendSerializedOutputResponse h sor = do + let l = unwords $ Proto.formatMessage $ + TransferSerializedOutputResponse sor + debug "Annex.TransferrerPool" ("> " ++ show l) + hPutStrLn h l + hFlush h + +-- | Read a response to a transfer request. +-- +-- Before the final response, this will return whatever SerializedOutput +-- should be displayed as the transfer is performed. +readResponse :: Handle -> IO (Either SerializedOutput Bool) +readResponse h = do + l <- liftIO $ hGetLine h + debug "Annex.TransferrerPool" ("< " ++ l) + case Proto.parseMessage l of + Just (TransferOutput so) -> return (Left so) + Just (TransferResult r) -> return (Right r) + Nothing -> transferrerProtocolError l + +transferrerProtocolError :: String -> a +transferrerProtocolError l = giveup $ "transferrer protocol error: " ++ show l + +{- Kill the transferrer, and all its child processes. -} +killTransferrer :: Transferrer -> IO () +killTransferrer t = do + interruptProcessGroupOf $ transferrerHandle t + threadDelay 50000 -- 0.05 second grace period + terminateProcess $ transferrerHandle t + +{- Stop all transferrers in the pool. -} +emptyTransferrerPool :: Annex () +emptyTransferrerPool = do + poolvar <- Annex.getRead Annex.transferrerpool + pool <- liftIO $ atomically $ swapTVar poolvar [] + liftIO $ forM_ pool $ \case + TransferrerPoolItem (Just t) _ -> transferrerShutdown t + TransferrerPoolItem Nothing _ -> noop + -- Transferrers usually restage pointer files themselves, + -- but when killTransferrer is used, a transferrer may have + -- pointer files it has not gotten around to restaging yet. + -- So, restage pointer files here in clean up from such killed + -- transferrers. + unless (null pool) $ + restagePointerFiles =<< Annex.gitRepo diff --git a/Annex/UUID.hs b/Annex/UUID.hs new file mode 100644 index 0000000000..8986f2d7a0 --- /dev/null +++ b/Annex/UUID.hs @@ -0,0 +1,123 @@ +{- git-annex uuids + - + - Each git repository used by git-annex has an annex.uuid setting that + - uniquely identifies that repository. + - + - UUIDs of remotes are cached in git config, using keys named + - remote..annex-uuid + - + - Copyright 2010-2016 Joey Hess + - + - Licensed under the GNU AGPL version 3 or higher. + -} + +{-# LANGUAGE OverloadedStrings #-} + +module Annex.UUID ( + configkeyUUID, + getUUID, + getRepoUUID, + getUncachedUUID, + isUUIDConfigured, + prepUUID, + genUUID, + genUUIDInNameSpace, + gCryptNameSpace, + removeRepoUUID, + storeUUID, + storeUUIDIn, + setUUID, + webUUID, + bitTorrentUUID, +) where + +import Annex.Common +import qualified Annex +import qualified Git +import qualified Git.Config +import Git.Types +import Config + +import qualified Data.UUID as U +import qualified Data.UUID.V4 as U4 +import qualified Data.UUID.V5 as U5 +import qualified Data.ByteString as S +import Data.String + +configkeyUUID :: ConfigKey +configkeyUUID = annexConfig "uuid" + +{- Generates a random UUID, that does not include the MAC address. -} +genUUID :: IO UUID +genUUID = toUUID <$> U4.nextRandom + +{- Generates a UUID from a given string, using a namespace. + - Given the same namespace, the same string will always result + - in the same UUID. -} +genUUIDInNameSpace :: U.UUID -> S.ByteString -> UUID +genUUIDInNameSpace namespace = toUUID . U5.generateNamed namespace . S.unpack + +{- Namespace used for UUIDs derived from git-remote-gcrypt ids. -} +gCryptNameSpace :: U.UUID +gCryptNameSpace = U5.generateNamed U5.namespaceURL $ + S.unpack "http://git-annex.branchable.com/design/gcrypt/" + +{- Get current repository's UUID. -} +getUUID :: Annex UUID +getUUID = annexUUID <$> Annex.getGitConfig + +{- Looks up a remote repo's UUID, caching it in .git/config if + - it's not already. -} +getRepoUUID :: Git.Repo -> Annex UUID +getRepoUUID r = do + c <- toUUID <$> getConfig cachekey "" + let u = getUncachedUUID r + + if c /= u && u /= NoUUID + then do + updatecache u + return u + else return c + where + updatecache u = do + g <- gitRepo + when (g /= r) $ storeUUIDIn cachekey u + cachekey = remoteAnnexConfig r "uuid" + +removeRepoUUID :: Annex () +removeRepoUUID = do + unsetConfig configkeyUUID + storeUUID NoUUID + +getUncachedUUID :: Git.Repo -> UUID +getUncachedUUID = toUUID . Git.Config.get configkeyUUID "" + +-- Does the repo's config have a key for the UUID? +-- True even when the key has no value. +isUUIDConfigured :: Git.Repo -> Bool +isUUIDConfigured = isJust . Git.Config.getMaybe configkeyUUID + +{- Make sure that the repo has an annex.uuid setting. -} +prepUUID :: Annex () +prepUUID = whenM ((==) NoUUID <$> getUUID) $ + storeUUID =<< liftIO genUUID + +storeUUID :: UUID -> Annex () +storeUUID = storeUUIDIn configkeyUUID + +storeUUIDIn :: ConfigKey -> UUID -> Annex () +storeUUIDIn configfield = setConfig configfield . fromUUID + +{- Only sets the configkey in the Repo; does not change .git/config -} +setUUID :: Git.Repo -> UUID -> IO Git.Repo +setUUID r u = do + let s = encodeBS $ show configkeyUUID ++ "=" ++ fromUUID u + Git.Config.store s Git.Config.ConfigList r + +-- Dummy uuid for the whole web. Do not alter. +webUUID :: UUID +webUUID = UUID (fromString "00000000-0000-0000-0000-000000000001") + +-- Dummy uuid for bittorrent. Do not alter. +bitTorrentUUID :: UUID +bitTorrentUUID = UUID (fromString "00000000-0000-0000-0000-000000000002") diff --git a/Annex/UntrustedFilePath.hs b/Annex/UntrustedFilePath.hs new file mode 100644 index 0000000000..df7ac3bd35 --- /dev/null +++ b/Annex/UntrustedFilePath.hs @@ -0,0 +1,77 @@ +{- handling untrusted filepaths + - + - Copyright 2010-2020 Joey Hess + - + - Licensed under the GNU AGPL version 3 or higher. + -} + +module Annex.UntrustedFilePath where + +import Data.Char +import System.FilePath + +import Utility.SafeOutput + +{- Given a string that we'd like to use as the basis for FilePath, but that + - was provided by a third party and is not to be trusted, returns the closest + - sane FilePath. + - + - All spaces and punctuation and other wacky stuff are replaced + - with '_', except for '.' and '-' + - + - "../" becomes ".._", which is safe. + - "/foo" becomes "_foo", which is safe. + - "c:foo" becomes "c_foo", which is safe even on windows. + - + - Leading '.' and '-' are also replaced with '_', so + - so no dotfiles that might control a program are inadvertently created, + - and to avoid filenames being treated as options to commands the user + - might run. + - + - Also there's an off chance the string might be empty, so to avoid + - needing to handle such an invalid filepath, return a dummy "file" in + - that case. + -} +sanitizeFilePath :: String -> FilePath +sanitizeFilePath = sanitizeLeadingFilePathCharacter . sanitizeFilePathComponent + +{- For when the filepath is being built up out of components that should be + - individually sanitized, this can be used for each component, followed by + - sanitizeLeadingFilePathCharacter for the whole thing. + -} +sanitizeFilePathComponent :: String -> String +sanitizeFilePathComponent = map sanitize + where + sanitize c + | c == '.' || c == '-' = c + | isSpace c || isPunctuation c || isSymbol c || isControl c || c == '/' = '_' + | otherwise = c + +sanitizeLeadingFilePathCharacter :: String -> FilePath +sanitizeLeadingFilePathCharacter [] = "file" +sanitizeLeadingFilePathCharacter ('.':s) = '_':s +sanitizeLeadingFilePathCharacter ('-':s) = '_':s +sanitizeLeadingFilePathCharacter ('/':s) = '_':s +sanitizeLeadingFilePathCharacter s = s + +controlCharacterInFilePath :: FilePath -> Bool +controlCharacterInFilePath = any (not . safechar) + where + safechar c = safeOutputChar c && c /= '\n' + +{- ../ is a path traversal, no matter where it appears. + - + - An absolute path is, of course. + -} +pathTraversalInFilePath :: FilePath -> Bool +pathTraversalInFilePath f + | isAbsolute f = True + | any (== "..") (splitPath f) = True + -- On windows, C:foo with no directory is not considered absolute + | hasDrive f = True + | otherwise = False + +gitDirectoryInFilePath :: FilePath -> Bool +gitDirectoryInFilePath = any (== ".git") + . map dropTrailingPathSeparator + . splitPath diff --git a/Annex/UpdateInstead.hs b/Annex/UpdateInstead.hs new file mode 100644 index 0000000000..3f197cb580 --- /dev/null +++ b/Annex/UpdateInstead.hs @@ -0,0 +1,23 @@ +{- git-annex UpdateIntead emulation + - + - Copyright 2017 Joey Hess + - + - Licensed under the GNU AGPL version 3 or higher. + -} + +module Annex.UpdateInstead where + +import qualified Annex +import Annex.Common +import Annex.AdjustedBranch +import Git.Branch +import Git.ConfigTypes + +{- receive.denyCurrentBranch=updateInstead does not work + - when an adjusted branch is checked out, so must be emulated. -} +needUpdateInsteadEmulation :: Annex Bool +needUpdateInsteadEmulation = updateinsteadset <&&> isadjusted + where + updateinsteadset = (== UpdateInstead) . receiveDenyCurrentBranch + <$> Annex.getGitConfig + isadjusted = (maybe False (isJust . getAdjustment) <$> inRepo Git.Branch.current) diff --git a/Annex/Url.hs b/Annex/Url.hs new file mode 100644 index 0000000000..2f12a10768 --- /dev/null +++ b/Annex/Url.hs @@ -0,0 +1,190 @@ +{- Url downloading, with git-annex user agent and configured http + - headers, security restrictions, etc. + - + - Copyright 2013-2022 Joey Hess + - + - Licensed under the GNU AGPL version 3 or higher. + -} + +{-# LANGUAGE OverloadedStrings #-} + +module Annex.Url ( + withUrlOptions, + withUrlOptionsPromptingCreds, + getUrlOptions, + getUserAgent, + ipAddressesUnlimited, + checkBoth, + download, + download', + exists, + getUrlInfo, + U.URLString, + U.UrlOptions(..), + U.UrlInfo(..), + U.sinkResponseFile, + U.matchStatusCodeException, + U.downloadConduit, + U.downloadPartial, + U.parseURIRelaxed, + U.allowedScheme, + U.assumeUrlExists, +) where + +import Annex.Common +import qualified Annex +import qualified Utility.Url as U +import qualified Utility.Url.Parse as U +import Utility.Hash (IncrementalVerifier) +import Utility.IPAddress +import Network.HTTP.Client.Restricted +import Utility.Metered +import Git.Credential +import qualified BuildInfo + +import Network.Socket +import Network.HTTP.Client +import Network.HTTP.Client.TLS +import Text.Read +import qualified Data.Set as S + +defaultUserAgent :: U.UserAgent +defaultUserAgent = "git-annex/" ++ BuildInfo.packageversion + +getUserAgent :: Annex U.UserAgent +getUserAgent = Annex.getRead $ + fromMaybe defaultUserAgent . Annex.useragent + +getUrlOptions :: Annex U.UrlOptions +getUrlOptions = Annex.getState Annex.urloptions >>= \case + Just uo -> return uo + Nothing -> do + uo <- mk + Annex.changeState $ \s -> s + { Annex.urloptions = Just uo } + return uo + where + mk = do + (urldownloader, manager) <- checkallowedaddr + U.mkUrlOptions + <$> (Just <$> getUserAgent) + <*> headers + <*> pure urldownloader + <*> pure manager + <*> (annexAllowedUrlSchemes <$> Annex.getGitConfig) + <*> pure (Just (\u -> "Configuration of annex.security.allowed-url-schemes does not allow accessing " ++ show u)) + <*> pure U.noBasicAuth + + headers = annexHttpHeadersCommand <$> Annex.getGitConfig >>= \case + Just cmd -> lines <$> liftIO (readProcess "sh" ["-c", cmd]) + Nothing -> annexHttpHeaders <$> Annex.getGitConfig + + checkallowedaddr = words . annexAllowedIPAddresses <$> Annex.getGitConfig >>= \case + ["all"] -> do + curlopts <- map Param . annexWebOptions <$> Annex.getGitConfig + allowedurlschemes <- annexAllowedUrlSchemes <$> Annex.getGitConfig + let urldownloader = if null curlopts && not (any (`S.notMember` U.conduitUrlSchemes) allowedurlschemes) + then U.DownloadWithConduit $ + U.DownloadWithCurlRestricted mempty + else U.DownloadWithCurl curlopts + manager <- liftIO $ U.newManager $ + avoidtimeout $ tlsManagerSettings + return (urldownloader, manager) + allowedaddrsports -> do + addrmatcher <- liftIO $ + (\l v -> any (\f -> f v) l) . catMaybes + <$> mapM (uncurry makeAddressMatcher) + (mapMaybe splitAddrPort allowedaddrsports) + -- Default to not allowing access to loopback + -- and private IP addresses to avoid data + -- leakage. + let isallowed addr + | addrmatcher addr = True + | isLoopbackAddress addr = False + | isPrivateAddress addr = False + | otherwise = True + let connectionrestricted = connectionRestricted + ("Configuration of annex.security.allowed-ip-addresses does not allow accessing address " ++) + let r = addressRestriction $ \addr -> + if isallowed (addrAddress addr) + then Nothing + else Just (connectionrestricted addr) + (settings, pr) <- liftIO $ + mkRestrictedManagerSettings r Nothing Nothing + case pr of + Nothing -> return () + Just ProxyRestricted -> toplevelWarning True + "http proxy settings not used due to annex.security.allowed-ip-addresses configuration" + manager <- liftIO $ U.newManager $ + avoidtimeout settings + -- Curl is not used, as its interface does not allow + -- preventing it from accessing specific IP addresses. + let urldownloader = U.DownloadWithConduit $ + U.DownloadWithCurlRestricted r + return (urldownloader, manager) + + -- http-client defailts to timing out a request after 30 seconds + -- or so, but some web servers are slower and git-annex has its own + -- separate timeout controls, so disable that. + avoidtimeout s = s { managerResponseTimeout = responseTimeoutNone } + +splitAddrPort :: String -> Maybe (String, Maybe PortNumber) +splitAddrPort s + -- "[addr]:port" (also allow "[addr]") + | "[" `isPrefixOf` s = case splitc ']' (drop 1 s) of + [a,cp] -> case splitc ':' cp of + ["",p] -> do + pn <- readMaybe p + return (a, Just pn) + [""] -> Just (a, Nothing) + _ -> Nothing + _ -> Nothing + | otherwise = Just (s, Nothing) + +ipAddressesUnlimited :: Annex Bool +ipAddressesUnlimited = + ("all" == ) . annexAllowedIPAddresses <$> Annex.getGitConfig + +withUrlOptions :: (U.UrlOptions -> Annex a) -> Annex a +withUrlOptions a = a =<< getUrlOptions + +-- When downloading an url, if authentication is needed, uses +-- git-credential to prompt for username and password. +-- +-- Note that, when the downloader is curl, it will not use git-credential. +-- If the user wants to, they can configure curl to use a netrc file that +-- handles authentication. +withUrlOptionsPromptingCreds :: (U.UrlOptions -> Annex a) -> Annex a +withUrlOptionsPromptingCreds a = do + g <- Annex.gitRepo + uo <- getUrlOptions + prompter <- mkPrompter + cc <- Annex.getRead Annex.gitcredentialcache + a $ uo + { U.getBasicAuth = \u -> prompter $ + getBasicAuthFromCredential g cc u + } + +checkBoth :: U.URLString -> Maybe Integer -> U.UrlOptions -> Annex Bool +checkBoth url expected_size uo = + liftIO (U.checkBoth url expected_size uo) >>= \case + Right r -> return r + Left err -> warning (UnquotedString err) >> return False + +download :: MeterUpdate -> Maybe IncrementalVerifier -> U.URLString -> FilePath -> U.UrlOptions -> Annex Bool +download meterupdate iv url file uo = + liftIO (U.download meterupdate iv url file uo) >>= \case + Right () -> return True + Left err -> warning (UnquotedString err) >> return False + +download' :: MeterUpdate -> Maybe IncrementalVerifier -> U.URLString -> FilePath -> U.UrlOptions -> Annex (Either String ()) +download' meterupdate iv url file uo = + liftIO (U.download meterupdate iv url file uo) + +exists :: U.URLString -> U.UrlOptions -> Annex Bool +exists url uo = liftIO (U.exists url uo) >>= \case + Right b -> return b + Left err -> warning (UnquotedString err) >> return False + +getUrlInfo :: U.URLString -> U.UrlOptions -> Annex (Either String U.UrlInfo) +getUrlInfo url uo = liftIO (U.getUrlInfo url uo) diff --git a/Annex/VariantFile.hs b/Annex/VariantFile.hs new file mode 100644 index 0000000000..781732368d --- /dev/null +++ b/Annex/VariantFile.hs @@ -0,0 +1,45 @@ +{- git-annex .variant files for automatic merge conflict resolution + - + - Copyright 2014 Joey Hess + - + - Licensed under the GNU AGPL version 3 or higher. + -} + +module Annex.VariantFile where + +import Annex.Common +import Utility.Hash + +import qualified Data.ByteString as S + +variantMarker :: String +variantMarker = ".variant-" + +mkVariant :: FilePath -> String -> FilePath +mkVariant file variant = takeDirectory file + dropExtension (takeFileName file) + ++ variantMarker ++ variant + ++ takeExtension file + +{- The filename to use when resolving a conflicted merge of a file, + - that points to a key. + - + - Something derived from the key needs to be included in the filename, + - but rather than exposing the whole key to the user, a very weak hash + - is used. There is a very real, although still unlikely, chance of + - conflicts using this hash. + - + - In the event that there is a conflict with the filename generated + - for some other key, that conflict will itself be handled by the + - conflicted merge resolution code. That case is detected, and the full + - key is used in the filename. + -} +variantFile :: FilePath -> Key -> FilePath +variantFile file key + | doubleconflict = mkVariant file (fromRawFilePath (keyFile key)) + | otherwise = mkVariant file (shortHash $ serializeKey' key) + where + doubleconflict = variantMarker `isInfixOf` file + +shortHash :: S.ByteString -> String +shortHash = take 4 . show . md5s diff --git a/Annex/VectorClock.hs b/Annex/VectorClock.hs new file mode 100644 index 0000000000..db2c63c0bd --- /dev/null +++ b/Annex/VectorClock.hs @@ -0,0 +1,83 @@ +{- git-annex vector clocks + - + - These are basically a timestamp. However, when logging a new + - value, if the old value has a vector clock that is the same or greater + - than the current vector clock, the old vector clock is incremented. + - This way, clock skew does not cause confusion. + - + - Copyright 2017-2021 Joey Hess + - + - Licensed under the GNU AGPL version 3 or higher. + -} + +module Annex.VectorClock ( + module Annex.VectorClock, + module Types.VectorClock, +) where + +import Types.VectorClock +import Annex.Common +import qualified Annex +import Utility.TimeStamp + +import Data.ByteString.Builder +import qualified Data.Attoparsec.ByteString.Lazy as A + +currentVectorClock :: Annex CandidateVectorClock +currentVectorClock = liftIO =<< Annex.getState Annex.getvectorclock + +-- Runs the action and uses the same vector clock throughout, +-- except when it's necessary to use a newer one due to a past value having +-- a newer vector clock. +-- +-- When the action modifies several files in the git-annex branch, +-- this can cause less space to be used, since the same vector clock +-- value is used, which can compress better. +-- +-- However, this should not be used when running a long-duration action, +-- because the vector clock is based on the start of the action, and not on +-- the later points where it writes changes. For example, if this were +-- used across downloads of several files, the location log information +-- would have an earlier vector clock than necessary, which might cause it +-- to be disregarded in favor of other information that was collected +-- at an earlier point in time than when the transfers completted and the +-- log was written. +reuseVectorClockWhile :: Annex a -> Annex a +reuseVectorClockWhile = bracket setup cleanup . const + where + setup = do + origget <- Annex.getState Annex.getvectorclock + vc <- liftIO origget + use (pure vc) + return origget + + cleanup origget = use origget + + use vc = Annex.changeState $ \s -> + s { Annex.getvectorclock = vc } + +-- Convert a candidate vector clock in to the final one to use, +-- advancing it if necessary when necessary to get ahead of a previously +-- used vector clock. +advanceVectorClock :: CandidateVectorClock -> [VectorClock] -> VectorClock +advanceVectorClock (CandidateVectorClock c) [] = VectorClock c +advanceVectorClock (CandidateVectorClock c) prevs + | prev >= VectorClock c = case prev of + VectorClock v -> VectorClock (v + 1) + Unknown -> VectorClock c + | otherwise = VectorClock c + where + prev = maximum prevs + +formatVectorClock :: VectorClock -> String +formatVectorClock Unknown = "0" +formatVectorClock (VectorClock t) = show t + +buildVectorClock :: VectorClock -> Builder +buildVectorClock = string7 . formatVectorClock + +parseVectorClock :: String -> Maybe VectorClock +parseVectorClock t = VectorClock <$> parsePOSIXTime t + +vectorClockParser :: A.Parser VectorClock +vectorClockParser = VectorClock <$> parserPOSIXTime diff --git a/Annex/VectorClock/Utility.hs b/Annex/VectorClock/Utility.hs new file mode 100644 index 0000000000..76b74d9cd5 --- /dev/null +++ b/Annex/VectorClock/Utility.hs @@ -0,0 +1,33 @@ +{- git-annex vector clock utilities + - + - Copyright 2017-2020 Joey Hess + - + - Licensed under the GNU AGPL version 3 or higher. + -} + +module Annex.VectorClock.Utility where + +import Data.Time.Clock.POSIX + +import Types.VectorClock +import Utility.Env +import Utility.TimeStamp + +startVectorClock :: IO (IO CandidateVectorClock) +startVectorClock = go =<< getEnv "GIT_ANNEX_VECTOR_CLOCK" + where + go Nothing = timebased + go (Just s) = case parsePOSIXTime s of + Just t -> return (pure (CandidateVectorClock t)) + Nothing -> timebased + -- Avoid using fractional seconds in the CandidateVectorClock. + -- This reduces the size of the packed git-annex branch by up + -- to 8%. + -- + -- Due to the use of vector clocks, high resolution timestamps are + -- not necessary to make clear which information is most recent when + -- eg, a value is changed repeatedly in the same second. In such a + -- case, the vector clock will be advanced to the next second after + -- the last modification. + timebased = return $ + CandidateVectorClock . truncateResolution 0 <$> getPOSIXTime diff --git a/Annex/Verify.hs b/Annex/Verify.hs new file mode 100644 index 0000000000..bfd1435803 --- /dev/null +++ b/Annex/Verify.hs @@ -0,0 +1,352 @@ +{- verification + - + - Copyright 2010-2022 Joey Hess + - + - Licensed under the GNU AGPL version 3 or higher. + -} + +{-# LANGUAGE CPP #-} +{-# LANGUAGE OverloadedStrings #-} + +module Annex.Verify ( + shouldVerify, + verifyKeyContentPostRetrieval, + verifyKeyContent, + verifyKeyContent', + Verification(..), + unVerified, + warnUnverifiableInsecure, + isVerifiable, + startVerifyKeyContentIncrementally, + finishVerifyKeyContentIncrementally, + verifyKeyContentIncrementally, + IncrementalVerifier(..), + tailVerify, +) where + +import Annex.Common +import qualified Annex +import qualified Types.Remote +import Types.Remote (VerifyConfigA(..)) +import qualified Types.Backend +import qualified Backend +import Types.Remote (unVerified, Verification(..), RetrievalSecurityPolicy(..)) +import Utility.Hash (IncrementalVerifier(..)) +import Annex.WorkerPool +import Types.WorkerPool +import Types.Key + +import Control.Concurrent.STM +import Control.Concurrent.Async +import qualified Data.ByteString as S +#if WITH_INOTIFY +import qualified System.INotify as INotify +import qualified System.FilePath.ByteString as P +#endif + +shouldVerify :: VerifyConfig -> Annex Bool +shouldVerify AlwaysVerify = return True +shouldVerify NoVerify = return False +shouldVerify DefaultVerify = annexVerify <$> Annex.getGitConfig +shouldVerify (RemoteVerify r) = + (shouldVerify DefaultVerify + <&&> pure (remoteAnnexVerify (Types.Remote.gitconfig r))) + -- Export remotes are not key/value stores, so always verify + -- content from them even when verification is disabled. + <||> Types.Remote.isExportSupported r + +{- Verifies that a file is the expected content of a key. + - + - Configuration can prevent verification, for either a + - particular remote or always, unless the RetrievalSecurityPolicy + - requires verification. + - + - Most keys have a known size, and if so, the file size is checked. + - + - When the key's backend allows verifying the content (via checksum), + - it is checked. + - + - If the RetrievalSecurityPolicy requires verification and the key's + - backend doesn't support it, the verification will fail. + -} +verifyKeyContentPostRetrieval :: RetrievalSecurityPolicy -> VerifyConfig -> Verification -> Key -> RawFilePath -> Annex Bool +verifyKeyContentPostRetrieval rsp v verification k f = case (rsp, verification) of + (_, Verified) -> return True + (RetrievalVerifiableKeysSecure, _) -> ifM (isVerifiable k) + ( verify + , ifM (annexAllowUnverifiedDownloads <$> Annex.getGitConfig) + ( verify + , warnUnverifiableInsecure k >> return False + ) + ) + (_, UnVerified) -> ifM (shouldVerify v) + ( verify + , return True + ) + (_, IncompleteVerify _) -> ifM (shouldVerify v) + ( verify + , return True + ) + (_, MustVerify) -> verify + (_, MustFinishIncompleteVerify _) -> verify + where + verify = enteringStage VerifyStage $ + case verification of + IncompleteVerify iv -> + resumeVerifyKeyContent k f iv + MustFinishIncompleteVerify iv -> + resumeVerifyKeyContent k f iv + _ -> verifyKeyContent k f + +-- When possible, does an incremental verification, because that can be +-- faster. Eg, the VURL backend can need to try multiple checksums and only +-- with an incremental verification does it avoid reading files twice. +verifyKeyContent :: Key -> RawFilePath -> Annex Bool +verifyKeyContent k f = verifyKeySize k f <&&> verifyKeyContent' k f + +-- Does not verify size. +verifyKeyContent' :: Key -> RawFilePath -> Annex Bool +verifyKeyContent' k f = + Backend.maybeLookupBackendVariety (fromKey keyVariety k) >>= \case + Nothing -> return True + Just b -> case (Types.Backend.verifyKeyContentIncrementally b, Types.Backend.verifyKeyContent b) of + (Nothing, Nothing) -> return True + (Just mkiv, mverifier) -> do + iv <- mkiv k + showAction (UnquotedString (descIncrementalVerifier iv)) + res <- liftIO $ catchDefaultIO Nothing $ + withBinaryFile (fromRawFilePath f) ReadMode $ \h -> do + feedIncrementalVerifier h iv + finalizeIncrementalVerifier iv + case res of + Just res' -> return res' + Nothing -> case mverifier of + Nothing -> return True + Just verifier -> verifier k f + (Nothing, Just verifier) -> verifier k f + +resumeVerifyKeyContent :: Key -> RawFilePath -> IncrementalVerifier -> Annex Bool +resumeVerifyKeyContent k f iv = liftIO (positionIncrementalVerifier iv) >>= \case + Nothing -> fallback + Just endpos -> do + fsz <- liftIO $ catchDefaultIO 0 $ getFileSize f + if fsz < endpos + then fallback + else case fromKey keySize k of + Just size | fsz /= size -> return False + _ -> go fsz endpos >>= \case + Just v -> return v + Nothing -> fallback + where + fallback = verifyKeyContent k f + + go fsz endpos + | fsz == endpos = + liftIO $ catchDefaultIO (Just False) $ + finalizeIncrementalVerifier iv + | otherwise = do + showAction (UnquotedString (descIncrementalVerifier iv)) + liftIO $ catchDefaultIO (Just False) $ + withBinaryFile (fromRawFilePath f) ReadMode $ \h -> do + hSeek h AbsoluteSeek endpos + feedIncrementalVerifier h iv + finalizeIncrementalVerifier iv + +feedIncrementalVerifier :: Handle -> IncrementalVerifier -> IO () +feedIncrementalVerifier h iv = do + b <- S.hGetSome h chunk + if S.null b + then return () + else do + updateIncrementalVerifier iv b + feedIncrementalVerifier h iv + where + chunk = 65536 + +verifyKeySize :: Key -> RawFilePath -> Annex Bool +verifyKeySize k f = case fromKey keySize k of + Just size -> do + size' <- liftIO $ catchDefaultIO 0 $ getFileSize f + return (size' == size) + Nothing -> return True + +warnUnverifiableInsecure :: Key -> Annex () +warnUnverifiableInsecure k = warning $ UnquotedString $ unwords + [ "Getting " ++ kv ++ " keys with this remote is not secure;" + , "the content cannot be verified to be correct." + , "(Use annex.security.allow-unverified-downloads to bypass" + , "this safety check.)" + ] + where + kv = decodeBS (formatKeyVariety (fromKey keyVariety k)) + +isVerifiable :: Key -> Annex Bool +isVerifiable k = maybe False (isJust . Types.Backend.verifyKeyContent) + <$> Backend.maybeLookupBackendVariety (fromKey keyVariety k) + +startVerifyKeyContentIncrementally :: VerifyConfig -> Key -> Annex (Maybe IncrementalVerifier) +startVerifyKeyContentIncrementally verifyconfig k = + ifM (shouldVerify verifyconfig) + ( Backend.maybeLookupBackendVariety (fromKey keyVariety k) >>= \case + Just b -> case Types.Backend.verifyKeyContentIncrementally b of + Just v -> Just <$> v k + Nothing -> return Nothing + Nothing -> return Nothing + , return Nothing + ) + +finishVerifyKeyContentIncrementally :: Maybe IncrementalVerifier -> Annex (Bool, Verification) +finishVerifyKeyContentIncrementally Nothing = + return (True, UnVerified) +finishVerifyKeyContentIncrementally (Just iv) = + liftIO (finalizeIncrementalVerifier iv) >>= \case + Just True -> return (True, Verified) + Just False -> do + warning "verification of content failed" + return (False, UnVerified) + -- Incremental verification was not able to be done. + Nothing -> return (True, UnVerified) + +verifyKeyContentIncrementally :: VerifyConfig -> Key -> (Maybe IncrementalVerifier -> Annex ()) -> Annex Verification +verifyKeyContentIncrementally verifyconfig k a = do + miv <- startVerifyKeyContentIncrementally verifyconfig k + a miv + snd <$> finishVerifyKeyContentIncrementally miv + +-- | Runs a writer action that retrieves to a file. In another thread, +-- reads the file as it grows, and feeds it to the incremental verifier. +-- +-- Once the writer finishes, this returns quickly. It may not feed +-- the entire content of the file to the incremental verifier. +-- +-- The file does not need to exist yet when this is called. It will wait +-- for the file to appear before opening it and starting verification. +-- +-- This is not supported for all OSs, and on OS's where it is not +-- supported, verification will not happen. +-- +-- The writer probably needs to be another process. If the file is being +-- written directly by git-annex, the haskell RTS will prevent opening it +-- for read at the same time, and verification will not happen. +-- +-- Note that there are situations where the file may fail to verify despite +-- having the correct content. For example, when the file is written out +-- of order, or gets replaced part way through. To deal with such cases, +-- when verification fails, it should not be treated as if the file's +-- content is known to be incorrect, but instead as an indication that the +-- file should be verified again, once it's done being written to. +-- +-- (It is also possible, in theory, for a file to verify despite having +-- incorrect content. For that to happen, the file would need to have +-- the right content when this checks it, but then the content gets +-- changed later by whatever is writing to the file.) +-- +-- This should be fairly efficient, reading from the disk cache, +-- as long as the writer does not get very far ahead of it. However, +-- there are situations where it would be much less expensive to verify +-- chunks as they are being written. For example, when resuming with +-- a lot of content in the file, all that content needs to be read, +-- and if the disk is slow, the reader may never catch up to the writer, +-- and the disk cache may never speed up reads. So this should only be +-- used when there's not a better way to incrementally verify. +tailVerify :: Maybe IncrementalVerifier -> RawFilePath -> Annex a -> Annex a +tailVerify (Just iv) f writer = do + finished <- liftIO newEmptyTMVarIO + t <- liftIO $ async $ tailVerify' iv f finished + let finishtail = do + liftIO $ atomically $ putTMVar finished () + liftIO (wait t) + writer `finally` finishtail +tailVerify Nothing _ writer = writer + +tailVerify' :: IncrementalVerifier -> RawFilePath -> TMVar () -> IO () +#if WITH_INOTIFY +tailVerify' iv f finished = + tryNonAsync go >>= \case + Right r -> return r + Left _ -> unableIncrementalVerifier iv + where + -- Watch the directory containing the file, and wait for + -- the file to be modified. It's possible that the file already + -- exists before the downloader starts, but it replaces it instead + -- of resuming, and waiting for modification deals with such + -- situations. + inotifydirchange i cont = + INotify.addWatch i [INotify.Modify] dir $ \case + -- Ignore changes to other files in the directory. + INotify.Modified { INotify.maybeFilePath = fn } + | fn == Just basef -> cont + _ -> noop + where + (dir, basef) = P.splitFileName f + + inotifyfilechange i = INotify.addWatch i [INotify.Modify] f . const + + go = INotify.withINotify $ \i -> do + modified <- newEmptyTMVarIO + let signalmodified = atomically $ void $ tryPutTMVar modified () + wd <- inotifydirchange i signalmodified + let cleanup = void . tryNonAsync . INotify.removeWatch + let stop w = do + cleanup w + unableIncrementalVerifier iv + waitopen modified >>= \case + Nothing -> stop wd + Just h -> do + cleanup wd + wf <- inotifyfilechange i signalmodified + tryNonAsync (follow h modified) >>= \case + Left _ -> stop wf + Right () -> cleanup wf + hClose h + + waitopen modified = do + v <- atomically $ + (Just <$> takeTMVar modified) + `orElse` + ((const Nothing) <$> takeTMVar finished) + case v of + Just () -> do + r <- tryNonAsync $ + tryWhenExists (openBinaryFile (fromRawFilePath f) ReadMode) >>= \case + Just h -> return (Just h) + -- File does not exist, must have been + -- deleted. Wait for next modification + -- and try again. + Nothing -> waitopen modified + case r of + Right r' -> return r' + -- Permission error prevents + -- reading, or this same process + -- is writing to the file, + -- and it cannot be read at the + -- same time. + Left _ -> return Nothing + -- finished without the file being modified + Nothing -> return Nothing + + follow h modified = do + b <- S.hGetNonBlocking h chunk + if S.null b + then do + -- We've caught up to the writer. + -- Wait for the file to get modified again, + -- or until we're told it is done being + -- written. + cont <- atomically $ + (const (follow h modified) + <$> takeTMVar modified) + `orElse` + (const (return ()) + <$> takeTMVar finished) + cont + else do + updateIncrementalVerifier iv b + atomically (tryTakeTMVar finished) >>= \case + Nothing -> follow h modified + Just () -> return () + + chunk = 65536 +#else +tailVerify' iv _ _ = unableIncrementalVerifier iv +#endif diff --git a/Annex/Version.hs b/Annex/Version.hs new file mode 100644 index 0000000000..c3504cfd93 --- /dev/null +++ b/Annex/Version.hs @@ -0,0 +1,68 @@ +{- git-annex repository versioning + - + - Copyright 2010-2022 Joey Hess + - + - Licensed under the GNU AGPL version 3 or higher. + -} + +{-# LANGUAGE CPP #-} +{-# LANGUAGE OverloadedStrings #-} + +module Annex.Version where + +import Annex.Common +import Config +import Git.Types +import Types.RepoVersion +import qualified Annex + +import qualified Data.Map as M + +defaultVersion :: RepoVersion +defaultVersion = RepoVersion 10 + +latestVersion :: RepoVersion +latestVersion = RepoVersion 10 + +supportedVersions :: [RepoVersion] +supportedVersions = map RepoVersion [8, 9, 10] + +upgradeableVersions :: [RepoVersion] +#ifndef mingw32_HOST_OS +upgradeableVersions = map RepoVersion [0..10] +#else +upgradeableVersions = map RepoVersion [2..10] +#endif + +autoUpgradeableVersions :: M.Map RepoVersion RepoVersion +autoUpgradeableVersions = M.fromList + [ (RepoVersion 3, defaultVersion) + , (RepoVersion 4, defaultVersion) + , (RepoVersion 5, defaultVersion) + , (RepoVersion 6, defaultVersion) + , (RepoVersion 7, defaultVersion) + , (RepoVersion 8, defaultVersion) + , (RepoVersion 9, defaultVersion) + ] + +versionField :: ConfigKey +versionField = annexConfig "version" + +getVersion :: Annex (Maybe RepoVersion) +getVersion = annexVersion <$> Annex.getGitConfig + +setVersion :: RepoVersion -> Annex () +setVersion (RepoVersion v) = setConfig versionField (show v) + +removeVersion :: Annex () +removeVersion = unsetConfig versionField + +versionSupportsFilterProcess :: Maybe RepoVersion -> Bool +versionSupportsFilterProcess (Just v) + | v >= RepoVersion 9 = True +versionSupportsFilterProcess _ = False + +versionNeedsWritableContentFiles :: Maybe RepoVersion -> Bool +versionNeedsWritableContentFiles (Just v) + | v >= RepoVersion 10 = False +versionNeedsWritableContentFiles _ = True diff --git a/Annex/View.hs b/Annex/View.hs new file mode 100644 index 0000000000..482ce17c3a --- /dev/null +++ b/Annex/View.hs @@ -0,0 +1,636 @@ +{- metadata based branch views + - + - Copyright 2014-2023 Joey Hess + - + - Licensed under the GNU AGPL version 3 or higher. + -} + +{-# LANGUAGE OverloadedStrings, PackageImports #-} + +module Annex.View where + +import Annex.Common +import Annex.View.ViewedFile +import Types.View +import Types.AdjustedBranch +import Types.MetaData +import Annex.MetaData +import qualified Annex +import qualified Annex.Branch +import qualified Git +import qualified Git.DiffTree as DiffTree +import qualified Git.Branch +import qualified Git.LsFiles +import qualified Git.LsTree +import qualified Git.Ref +import Git.CatFile +import Git.UpdateIndex +import Git.Sha +import Git.Types +import Git.FilePath +import Annex.WorkTree +import Annex.GitOverlay +import Annex.Link +import Annex.CatFile +import Annex.Concurrent +import Annex.Content.Presence +import Logs +import Logs.MetaData +import Logs.View +import Utility.Glob +import Types.Command +import CmdLine.Action +import qualified Utility.RawFilePath as R + +import qualified Data.Text as T +import qualified Data.ByteString as B +import qualified Data.Set as S +import qualified Data.Map as M +import qualified System.FilePath.ByteString as P +import Control.Concurrent.Async +import "mtl" Control.Monad.Writer + +{- Each visible ViewFilter in a view results in another level of + - subdirectory nesting. When a file matches multiple ways, it will appear + - in multiple subdirectories. This means there is a bit of an exponential + - blowup with a single file appearing in a crazy number of places! + - + - Capping the view size to 5 is reasonable; why wants to dig + - through 5+ levels of subdirectories to find anything? + -} +viewTooLarge :: View -> Bool +viewTooLarge view = visibleViewSize view > 5 + +visibleViewSize :: View -> Int +visibleViewSize = length . filter viewVisible . viewComponents + +{- Parses field=value, field!=value, field?=value, tag, !tag, and ?tag + - + - Note that the field may not be a legal metadata field name, + - but it's let through anyway. + - This is useful when matching on directory names with spaces, + - which are not legal MetaFields. + -} +parseViewParam :: ViewUnset -> String -> (MetaField, ViewFilter) +parseViewParam vu s = case separate (== '=') s of + ('!':tag, []) | not (null tag) -> + ( tagMetaField + , mkExcludeValues tag + ) + ('?':tag, []) | not (null tag) -> + ( tagMetaField + , mkFilterOrUnsetValues tag + ) + (tag, []) -> + ( tagMetaField + , mkFilterValues tag + ) + (field, wanted) + | end field == "!" -> + ( mkMetaFieldUnchecked (T.pack (beginning field)) + , mkExcludeValues wanted + ) + | end field == "?" -> + ( mkMetaFieldUnchecked (T.pack (beginning field)) + , mkFilterOrUnsetValues wanted + ) + | otherwise -> + ( mkMetaFieldUnchecked (T.pack field) + , mkFilterValues wanted + ) + where + mkExcludeValues = ExcludeValues . S.singleton . toMetaValue . encodeBS + mkFilterValues v + | any (`elem` v) ['*', '?'] = FilterGlob v + | otherwise = FilterValues $ S.singleton $ toMetaValue $ encodeBS v + mkFilterOrUnsetValues v + | any (`elem` v) ['*', '?'] = FilterGlobOrUnset v vu + | otherwise = FilterValuesOrUnset (S.singleton $ toMetaValue $ encodeBS v) vu + +data ViewChange = Unchanged | Narrowing | Widening + deriving (Ord, Eq, Show) + +{- Updates a view, adding new fields to filter on (Narrowing), + - or allowing new values in an existing field (Widening). -} +refineView :: View -> [(MetaField, ViewFilter)] -> (View, ViewChange) +refineView origview = checksize . calc Unchanged origview + where + calc c v [] = (v, c) + calc c v ((f, vf):rest) = + let (v', c') = refine v f vf + in calc (max c c') v' rest + + refine view field vf + | field `elem` map viewField (viewComponents view) = + let (components', viewchanges) = runWriter $ + mapM (\c -> updateViewComponent c field vf) (viewComponents view) + viewchange = if field `elem` map viewField (viewComponents origview) + then maximum viewchanges + else Narrowing + in (view { viewComponents = components' }, viewchange) + | otherwise = + let component = mkViewComponent field vf + view' = view { viewComponents = component : viewComponents view } + in (view', Narrowing) + + checksize r@(v, _) + | viewTooLarge v = giveup $ "View is too large (" ++ show (visibleViewSize v) ++ " levels of subdirectories)" + | otherwise = r + +updateViewComponent :: ViewComponent -> MetaField -> ViewFilter -> Writer [ViewChange] ViewComponent +updateViewComponent c field vf + | viewField c == field = do + let (newvf, viewchange) = combineViewFilter (viewFilter c) vf + tell [viewchange] + return $ mkViewComponent field newvf + | otherwise = return c + +{- Adds an additional filter to a view. This can only result in narrowing + - the view. Multivalued filters are added in non-visible form. -} +filterView :: View -> [(MetaField, ViewFilter)] -> View +filterView v vs = v { viewComponents = viewComponents f' ++ viewComponents v} + where + f = fst $ refineView (v {viewComponents = []}) vs + f' = f { viewComponents = map toinvisible (viewComponents f) } + toinvisible c = c { viewVisible = False } + +{- Combine old and new ViewFilters, yielding a result that matches + - either old+new, or only new. Which depends on the types of things + - being combined. + -} +combineViewFilter :: ViewFilter -> ViewFilter -> (ViewFilter, ViewChange) +combineViewFilter old@(FilterValues olds) (FilterValues news) + | combined == old = (combined, Unchanged) + | otherwise = (combined, Widening) + where + combined = FilterValues (S.union olds news) +combineViewFilter old@(ExcludeValues olds) (ExcludeValues news) + | combined == old = (combined, Unchanged) + | otherwise = (combined, Narrowing) + where + combined = ExcludeValues (S.union olds news) +{- If we have FilterValues and change to a FilterGlob, + - it's always a widening change, because the glob could match other + - values. OTOH, going the other way, it's a Narrowing change if the old + - glob matches all the new FilterValues. -} +combineViewFilter (FilterValues _) newglob@(FilterGlob _) = + (newglob, Widening) +combineViewFilter (FilterGlob oldglob) new@(FilterValues s) + | all (matchGlob (compileGlob oldglob CaseInsensitive (GlobFilePath False)) . decodeBS . fromMetaValue) (S.toList s) = (new, Narrowing) + | otherwise = (new, Widening) +{- With two globs, the old one is discarded, and the new one is used. + - We can tell if that's a narrowing change by checking if the old + - glob matches the new glob. For example, "*" matches "foo*", + - so that's narrowing. While "f?o" does not match "f??", so that's + - widening. -} +combineViewFilter (FilterGlob old) newglob@(FilterGlob new) + | old == new = (newglob, Unchanged) + | matchGlob (compileGlob old CaseInsensitive (GlobFilePath False)) new = (newglob, Narrowing) + | otherwise = (newglob, Widening) +{- Combining FilterValuesOrUnset and FilterGlobOrUnset with FilterValues + - and FilterGlob maintains the OrUnset if the second parameter has it, + - and is otherwise the same as combining without OrUnset, except that + - eliminating the OrUnset can be narrowing, and adding it can be widening. -} +combineViewFilter old@(FilterValuesOrUnset olds _) (FilterValuesOrUnset news newvu) + | combined == old = (combined, Unchanged) + | otherwise = (combined, Widening) + where + combined = FilterValuesOrUnset (S.union olds news) newvu +combineViewFilter (FilterValues olds) (FilterValuesOrUnset news vu) = + (combined, Widening) + where + combined = FilterValuesOrUnset (S.union olds news) vu +combineViewFilter old@(FilterValuesOrUnset olds _) (FilterValues news) + | combined == old = (combined, Narrowing) + | otherwise = (combined, Widening) + where + combined = FilterValues (S.union olds news) +combineViewFilter (FilterValuesOrUnset _ _) newglob@(FilterGlob _) = + (newglob, Widening) +combineViewFilter (FilterGlob _) new@(FilterValuesOrUnset _ _) = + (new, Widening) +combineViewFilter (FilterValues _) newglob@(FilterGlobOrUnset _ _) = + (newglob, Widening) +combineViewFilter (FilterValuesOrUnset _ _) newglob@(FilterGlobOrUnset _ _) = + (newglob, Widening) +combineViewFilter (FilterGlobOrUnset oldglob _) new@(FilterValues _) = + combineViewFilter (FilterGlob oldglob) new +combineViewFilter (FilterGlobOrUnset oldglob _) new@(FilterValuesOrUnset _ _) = + let (_, viewchange) = combineViewFilter (FilterGlob oldglob) new + in (new, viewchange) +combineViewFilter (FilterGlobOrUnset old _) newglob@(FilterGlobOrUnset new _) + | old == new = (newglob, Unchanged) + | matchGlob (compileGlob old CaseInsensitive (GlobFilePath False)) new = (newglob, Narrowing) + | otherwise = (newglob, Widening) +combineViewFilter (FilterGlob _) newglob@(FilterGlobOrUnset _ _) = + (newglob, Widening) +combineViewFilter (FilterGlobOrUnset _ _) newglob@(FilterGlob _) = + (newglob, Narrowing) +{- There is not a way to filter a value and also apply an exclude. So: + - When adding an exclude to a filter, use only the exclude. + - When adding a filter to an exclude, use only the filter. -} +combineViewFilter (FilterGlob _) new@(ExcludeValues _) = (new, Narrowing) +combineViewFilter (ExcludeValues _) new@(FilterGlob _) = (new, Widening) +combineViewFilter (FilterValues _) new@(ExcludeValues _) = (new, Narrowing) +combineViewFilter (ExcludeValues _) new@(FilterValues _) = (new, Widening) +combineViewFilter (FilterValuesOrUnset _ _) new@(ExcludeValues _) = (new, Narrowing) +combineViewFilter (ExcludeValues _) new@(FilterValuesOrUnset _ _) = (new, Widening) +combineViewFilter (FilterGlobOrUnset _ _) new@(ExcludeValues _) = (new, Narrowing) +combineViewFilter (ExcludeValues _) new@(FilterGlobOrUnset _ _) = (new, Widening) + +{- Generates views for a file from a branch, based on its metadata + - and the filename used in the branch. + - + - Note that a file may appear multiple times in a view, when it + - has multiple matching values for a MetaField used in the View. + - + - Of course if its MetaData does not match the View, it won't appear at + - all. + - + - Note that for efficiency, it's useful to partially + - evaluate this function with the view parameter and reuse + - the result. The globs in the view will then be compiled and memoized. + -} +viewedFiles :: View -> MkViewedFile -> FilePath -> MetaData -> [ViewedFile] +viewedFiles view = + let matchers = map viewComponentMatcher (viewComponents view) + in \mkviewedfile file metadata -> + let matches = map (\m -> m metadata) matchers + in if any isNothing matches + then [] + else + let paths = pathProduct $ + map (map toviewpath) (visible matches) + in if null paths + then [mkviewedfile file] + else map ( mkviewedfile file) paths + where + visible = map (fromJust . snd) . + filter (viewVisible . fst) . + zip (viewComponents view) + + toviewpath (MatchingMetaValue v) = toViewPath v + toviewpath (MatchingUnset v) = toViewPath (toMetaValue (encodeBS v)) + +data MatchingValue = MatchingMetaValue MetaValue | MatchingUnset String + +{- Checks if metadata matches a ViewComponent filter, and if so + - returns the value, or values that match. Self-memoizing on ViewComponent. -} +viewComponentMatcher :: ViewComponent -> (MetaData -> Maybe [MatchingValue]) +viewComponentMatcher viewcomponent = \metadata -> + matcher Nothing (viewFilter viewcomponent) + (currentMetaDataValues metafield metadata) + where + metafield = viewField viewcomponent + matcher matchunset (FilterValues s) = + \values -> setmatches matchunset $ S.intersection s values + matcher matchunset (FilterGlob glob) = + let cglob = compileGlob glob CaseInsensitive (GlobFilePath False) + in \values -> setmatches matchunset $ + S.filter (matchGlob cglob . decodeBS . fromMetaValue) values + matcher _ (ExcludeValues excludes) = + \values -> + if S.null (S.intersection values excludes) + then Just [] + else Nothing + matcher _ (FilterValuesOrUnset s (ViewUnset u)) = + matcher (Just [MatchingUnset u]) (FilterValues s) + matcher _ (FilterGlobOrUnset glob (ViewUnset u)) = + matcher (Just [MatchingUnset u]) (FilterGlob glob) + + setmatches matchunset s + | S.null s = matchunset + | otherwise = Just $ + map MatchingMetaValue (S.toList s) + +-- This is '∕', a unicode character that displays the same as '/' but is +-- not it. It is encoded using the filesystem encoding, which allows it +-- to be used even when not in a unicode capable locale. +pseudoSlash :: String +pseudoSlash = "\56546\56456\56469" + +-- And this is '╲' similarly. +pseudoBackslash :: String +pseudoBackslash = "\56546\56469\56498" + +-- And this is '﹕' similarly. +pseudoColon :: String +pseudoColon = "\56559\56505\56469" + +toViewPath :: MetaValue -> FilePath +toViewPath = escapepseudo [] . decodeBS . fromMetaValue + where + escapepseudo s ('/':cs) = escapepseudo (pseudoSlash:s) cs + escapepseudo s ('\\':cs) = escapepseudo (pseudoBackslash:s) cs + escapepseudo s (':':cs) = escapepseudo (pseudoColon:s) cs + escapepseudo s ('%':cs) = escapepseudo ("%%":s) cs + escapepseudo s (c1:c2:c3:cs) + | [c1,c2,c3] == pseudoSlash = escapepseudo ("%":pseudoSlash:s) cs + | [c1,c2,c3] == pseudoBackslash = escapepseudo ("%":pseudoBackslash:s) cs + | [c1,c2,c3] == pseudoColon = escapepseudo ("%":pseudoColon:s) cs + | otherwise = escapepseudo ([c1]:s) (c2:c3:cs) + escapepseudo s (c:cs) = escapepseudo ([c]:s) cs + escapepseudo s [] = concat (reverse s) + +fromViewPath :: FilePath -> MetaValue +fromViewPath = toMetaValue . encodeBS . deescapepseudo [] + where + deescapepseudo s ('%':escapedc:cs) = deescapepseudo ([escapedc]:s) cs + deescapepseudo s (c1:c2:c3:cs) + | [c1,c2,c3] == pseudoSlash = deescapepseudo ("/":s) cs + | [c1,c2,c3] == pseudoBackslash = deescapepseudo ("\\":s) cs + | [c1,c2,c3] == pseudoColon = deescapepseudo (":":s) cs + | otherwise = deescapepseudo ([c1]:s) (c2:c3:cs) + deescapepseudo s cs = concat (reverse (cs:s)) + +prop_viewPath_roundtrips :: MetaValue -> Bool +prop_viewPath_roundtrips v = fromViewPath (toViewPath v) == v + +pathProduct :: [[FilePath]] -> [FilePath] +pathProduct [] = [] +pathProduct (l:ls) = foldl combinel l ls + where + combinel xs ys = [combine x y | x <- xs, y <- ys] + +{- Extracts the metadata from a ViewedFile, based on the view that was used + - to construct it. + - + - Derived metadata is excluded. + -} +fromView :: View -> ViewedFile -> MetaData +fromView view f = MetaData $ m `M.difference` derived + where + m = M.fromList $ map convfield $ + filter (not . isviewunset) (zip visible values) + visible = filter viewVisible (viewComponents view) + paths = splitDirectories (dropFileName f) + values = map (S.singleton . fromViewPath) paths + MetaData derived = getViewedFileMetaData f + convfield (vc, v) = (viewField vc, v) + + -- When a directory is the one used to hold files that don't + -- have the metadata set, don't include it in the MetaData. + isviewunset (vc, v) = case viewFilter vc of + FilterValues {} -> False + FilterGlob {} -> False + ExcludeValues {} -> False + FilterValuesOrUnset _ (ViewUnset vu) -> isviewunset' vu v + FilterGlobOrUnset _ (ViewUnset vu) -> isviewunset' vu v + isviewunset' vu v = S.member (fromViewPath vu) v + +{- Constructing a view that will match arbitrary metadata, and applying + - it to a file yields a set of ViewedFile which all contain the same + - MetaFields that were present in the input metadata + - (excluding fields that are not visible). -} +prop_view_roundtrips :: AssociatedFile -> MetaData -> Bool -> Bool +prop_view_roundtrips (AssociatedFile Nothing) _ _ = True +prop_view_roundtrips (AssociatedFile (Just f)) metadata visible = or + [ B.null (P.takeFileName f) && B.null (P.takeDirectory f) + , viewTooLarge view + , all hasfields (viewedFiles view (viewedFileFromReference' Nothing Nothing) (fromRawFilePath f) metadata) + ] + where + view = View (Git.Ref "foo") $ + map (\(mf, mv) -> ViewComponent mf (FilterValues $ S.filter (not . B.null . fromMetaValue) mv) visible) + (fromMetaData metadata) + visiblefields = sort (map viewField $ filter viewVisible (viewComponents view)) + hasfields fv = sort (map fst (fromMetaData (fromView view fv))) == visiblefields + +{- A directory foo/bar/baz/ is turned into metadata fields + - /=foo, foo/=bar, foo/bar/=baz. + - + - Note that this may generate MetaFields that legalField rejects. + - This is necessary to have a 1:1 mapping between directory names and + - fields. So this MetaData cannot safely be serialized. -} +getDirMetaData :: FilePath -> MetaData +getDirMetaData d = MetaData $ M.fromList $ zip fields values + where + dirs = splitDirectories d + fields = map (mkMetaFieldUnchecked . T.pack . addTrailingPathSeparator . joinPath) + (inits dirs) + values = map (S.singleton . toMetaValue . encodeBS . fromMaybe "" . headMaybe) + (tails dirs) + +getWorkTreeMetaData :: FilePath -> MetaData +getWorkTreeMetaData = getDirMetaData . dropFileName + +getViewedFileMetaData :: FilePath -> MetaData +getViewedFileMetaData = getDirMetaData . dirFromViewedFile . takeFileName + +{- Applies a view to the currently checked out branch, generating a new + - branch for the view. + -} +applyView :: View -> Maybe Adjustment -> Annex Git.Branch +applyView v ma = do + gc <- Annex.getGitConfig + applyView' (viewedFileFromReference gc) getWorkTreeMetaData v ma + +{- Generates a new branch for a View, which must be a more narrow + - version of the View originally used to generate the currently + - checked out branch. That is, it must match a subset of the files + - in view, not any others. + -} +narrowView :: View -> Maybe Adjustment -> Annex Git.Branch +narrowView = applyView' viewedFileReuse getViewedFileMetaData + +{- Go through each staged file. + - If the file is not annexed, skip it, unless it's a dotfile in the top, + - or a file in a dotdir in the top. + - Look up the metadata of annexed files, and generate any ViewedFiles, + - and stage them. + -} +applyView' :: MkViewedFile -> (FilePath -> MetaData) -> View -> Maybe Adjustment -> Annex Git.Branch +applyView' mkviewedfile getfilemetadata view madj = do + top <- fromRepo Git.repoPath + (l, clean) <- inRepo $ Git.LsFiles.inRepoDetails [] [top] + applyView'' mkviewedfile getfilemetadata view madj l clean $ + \(f, sha, mode) -> do + topf <- inRepo (toTopFilePath f) + k <- lookupKey f + return (topf, sha, toTreeItemType mode, k) + genViewBranch view madj + +applyView'' + :: MkViewedFile + -> (FilePath -> MetaData) + -> View + -> Maybe Adjustment + -> [t] + -> IO Bool + -> (t -> Annex (TopFilePath, Sha, Maybe TreeItemType, Maybe Key)) + -> Annex () +applyView'' mkviewedfile getfilemetadata view madj l clean conv = do + viewg <- withNewViewIndex gitRepo + withUpdateIndex viewg $ \uh -> do + g <- Annex.gitRepo + gc <- Annex.getGitConfig + -- Streaming the metadata like this is an optimisation. + catObjectStream g $ \mdfeeder mdcloser mdreader -> do + tid <- liftIO . async =<< forkState + (getmetadata gc mdfeeder mdcloser l) + process uh mdreader + join (liftIO (wait tid)) + liftIO $ void clean + where + genviewedfiles = viewedFiles view mkviewedfile -- enables memoization + + getmetadata _ _ mdcloser [] = liftIO mdcloser + getmetadata gc mdfeeder mdcloser (t:ts) = do + v@(topf, _sha, _treeitemtype, mkey) <- conv t + let feed mdlogf = liftIO $ mdfeeder + (v, Git.Ref.branchFileRef Annex.Branch.fullname mdlogf) + case mkey of + Just key -> feed (metaDataLogFile gc key) + Nothing + -- Handle toplevel dotfiles that are not + -- annexed files by feeding through a query + -- for dummy metadata. Calling + -- Git.UpdateIndex.streamUpdateIndex' + -- here would race with process's calls + -- to it. + | "." `B.isPrefixOf` getTopFilePath topf -> + feed "dummy" + | otherwise -> noop + getmetadata gc mdfeeder mdcloser ts + + process uh mdreader = liftIO mdreader >>= \case + Just ((topf, _, mtreeitemtype, Just k), mdlog) -> do + let metadata = maybe emptyMetaData parseCurrentMetaData mdlog + let f = fromRawFilePath $ getTopFilePath topf + let metadata' = getfilemetadata f `unionMetaData` metadata + forM_ (genviewedfiles f metadata') $ \fv -> do + f' <- fromRepo (fromTopFilePath $ asTopFilePath $ toRawFilePath fv) + stagefile uh f' k mtreeitemtype + process uh mdreader + Just ((topf, sha, Just treeitemtype, Nothing), _) -> do + liftIO $ Git.UpdateIndex.streamUpdateIndex' uh $ + pureStreamer $ updateIndexLine sha treeitemtype topf + process uh mdreader + Just _ -> process uh mdreader + Nothing -> return () + + stagefile uh f k mtreeitemtype = case madj of + Nothing -> stagesymlink uh f k + Just (LinkAdjustment UnlockAdjustment) -> + stagepointerfile uh f k mtreeitemtype + Just (LinkPresentAdjustment UnlockPresentAdjustment) -> + ifM (inAnnex k) + ( stagepointerfile uh f k mtreeitemtype + , stagesymlink uh f k + ) + Just (PresenceAdjustment HideMissingAdjustment (Just UnlockAdjustment)) -> + whenM (inAnnex k) $ + stagepointerfile uh f k mtreeitemtype + Just (PresenceAdjustment HideMissingAdjustment _) -> + whenM (inAnnex k) $ + stagesymlink uh f k + _ -> stagesymlink uh f k + + stagesymlink uh f k = do + linktarget <- calcRepo (gitAnnexLink f k) + sha <- hashSymlink linktarget + liftIO . Git.UpdateIndex.streamUpdateIndex' uh + =<< inRepo (Git.UpdateIndex.stageSymlink f sha) + + stagepointerfile uh f k mtreeitemtype = do + let treeitemtype = if mtreeitemtype == Just TreeExecutable + then TreeExecutable + else TreeFile + sha <- hashPointerFile k + liftIO . Git.UpdateIndex.streamUpdateIndex' uh + =<< inRepo (Git.UpdateIndex.stageFile sha treeitemtype f) + +{- Updates the current view with any changes that have been made to its + - parent branch or the metadata since the view was created or last updated. + - + - When there were changes, returns a ref to a commit for the updated view. + - Does not update the view branch with it. + - + - This is not very optimised. An incremental update would be possible to + - implement and would be faster, but more complicated. + -} +updateView :: View -> Maybe Adjustment -> Annex (Maybe Git.Ref) +updateView view madj = do + (l, clean) <- inRepo $ Git.LsTree.lsTree + Git.LsTree.LsTreeRecursive + (Git.LsTree.LsTreeLong True) + (viewParentBranch view) + gc <- Annex.getGitConfig + applyView'' (viewedFileFromReference gc) getWorkTreeMetaData view madj l clean $ + \ti -> do + let ref = Git.Ref.branchFileRef (viewParentBranch view) + (getTopFilePath (Git.LsTree.file ti)) + k <- case Git.LsTree.size ti of + Nothing -> catKey ref + Just sz -> catKey' ref sz + return + ( (Git.LsTree.file ti) + , (Git.LsTree.sha ti) + , (toTreeItemType (Git.LsTree.mode ti)) + , k + ) + oldcommit <- inRepo $ Git.Ref.sha (branchView view madj) + oldtree <- maybe (pure Nothing) (inRepo . Git.Ref.tree) oldcommit + newtree <- withViewIndex $ inRepo Git.Branch.writeTree + if oldtree /= Just newtree + then Just <$> do + cmode <- annexCommitMode <$> Annex.getGitConfig + let msg = "updated " ++ fromRef (branchView view madj) + let parent = catMaybes [oldcommit] + inRepo (Git.Branch.commitTree cmode [msg] parent newtree) + else return Nothing + +{- Diff between currently checked out branch and staged changes, and + - update metadata to reflect the changes that are being committed to the + - view. + - + - Adding a file to a directory adds the metadata represented by + - that directory to the file, and removing a file from a directory + - removes the metadata. + - + - Note that removes must be handled before adds. This is so + - that moving a file from x/foo/ to x/bar/ adds back the metadata for x. + -} +withViewChanges :: (ViewedFile -> Key -> CommandStart) -> (ViewedFile -> Key -> CommandStart) -> Annex () +withViewChanges addmeta removemeta = do + (diffs, cleanup) <- inRepo $ DiffTree.diffIndex Git.Ref.headRef + forM_ diffs handleremovals + forM_ diffs handleadds + void $ liftIO cleanup + where + handleremovals item + | DiffTree.srcsha item `notElem` nullShas = + handlechange item removemeta + =<< catKey (DiffTree.srcsha item) + | otherwise = noop + handleadds item + | DiffTree.dstsha item `notElem` nullShas = + handlechange item addmeta + =<< catKey (DiffTree.dstsha item) + | otherwise = noop + handlechange item a = maybe noop + (void . commandAction . a (fromRawFilePath $ getTopFilePath $ DiffTree.file item)) + +{- Runs an action using the view index file. + - Note that the file does not necessarily exist, or can contain + - info staged for an old view. -} +withViewIndex :: Annex a -> Annex a +withViewIndex = withIndexFile ViewIndexFile . const + +withNewViewIndex :: Annex a -> Annex a +withNewViewIndex a = do + liftIO . removeWhenExistsWith R.removeLink =<< fromRepo gitAnnexViewIndex + withViewIndex a + +{- Generates a branch for a view, using the view index file + - to make a commit to the view branch. The view branch is not + - checked out, but entering it will display the view. -} +genViewBranch :: View -> Maybe Adjustment -> Annex Git.Branch +genViewBranch view madj = withViewIndex $ do + let branch = branchView view madj + cmode <- annexCommitMode <$> Annex.getGitConfig + void $ inRepo $ Git.Branch.commit cmode True (fromRef branch) branch [] + return branch + +withCurrentView :: (View -> Maybe Adjustment -> Annex a) -> Annex a +withCurrentView a = maybe (giveup "Not in a view.") (uncurry a) =<< currentView diff --git a/Annex/View/ViewedFile.hs b/Annex/View/ViewedFile.hs new file mode 100644 index 0000000000..84dcbc897a --- /dev/null +++ b/Annex/View/ViewedFile.hs @@ -0,0 +1,112 @@ +{- filenames (not paths) used in views + - + - Copyright 2014-2024 Joey Hess + - + - Licensed under the GNU AGPL version 3 or higher. + -} + +{-# LANGUAGE CPP #-} + +module Annex.View.ViewedFile ( + ViewedFile, + MkViewedFile, + viewedFileFromReference, + viewedFileFromReference', + viewedFileReuse, + dirFromViewedFile, + prop_viewedFile_roundtrips, +) where + +import Annex.Common +import Utility.QuickCheck +import Backend.Utilities (maxExtensions) + +import qualified Data.ByteString as S + +type FileName = String +type ViewedFile = FileName + +type MkViewedFile = FilePath -> ViewedFile + +{- Converts a filepath used in a reference branch to the + - filename that will be used in the view. + - + - No two filepaths from the same branch should yield the same result, + - so all directory structure needs to be included in the output filename + - in some way. + - + - So, from dir/subdir/file.foo, generate file_%dir%subdir%.foo + -} +viewedFileFromReference :: GitConfig -> MkViewedFile +viewedFileFromReference g = viewedFileFromReference' + (annexMaxExtensionLength g) + (annexMaxExtensions g) + +viewedFileFromReference' :: Maybe Int -> Maybe Int -> MkViewedFile +viewedFileFromReference' maxextlen maxextensions f = concat $ + [ escape (fromRawFilePath base') + , if null dirs then "" else "_%" ++ intercalate "%" (map escape dirs) ++ "%" + , escape $ fromRawFilePath $ S.concat extensions' + ] + where + (path, basefile) = splitFileName f + dirs = filter (/= ".") $ map dropTrailingPathSeparator (splitPath path) + (base, extensions) = case maxextlen of + Nothing -> splitShortExtensions (toRawFilePath basefile') + Just n -> splitShortExtensions' (n+1) (toRawFilePath basefile') + {- Limit number of extensions. -} + maxextensions' = fromMaybe maxExtensions maxextensions + (base', extensions') + | length extensions <= maxextensions' = (base, extensions) + | otherwise = + let (es,more) = splitAt maxextensions' (reverse extensions) + in (base <> mconcat (reverse more), reverse es) + {- On Windows, if the filename looked like "dir/c:foo" then + - basefile would look like it contains a drive letter, which will + - not work. There cannot really be a filename like that, probably, + - but it prevents the test suite failing. -} + (_basedrive, basefile') = splitDrive basefile + + {- To avoid collisions with filenames or directories that contain + - '%', and to allow the original directories to be extracted + - from the ViewedFile, '%' is escaped. ) + -} + escape :: String -> String + escape = replace "%" (escchar:'%':[]) . replace [escchar] [escchar, escchar] + +escchar :: Char +#ifndef mingw32_HOST_OS +escchar = '\\' +#else +-- \ is path separator on Windows, so instead use ! +escchar = '!' +#endif + +{- For use when operating already within a view, so whatever filepath + - is present in the work tree is already a ViewedFile. -} +viewedFileReuse :: MkViewedFile +viewedFileReuse = takeFileName + +{- Extracts from a ViewedFile the directory where the file is located on + - in the reference branch. -} +dirFromViewedFile :: ViewedFile -> FilePath +dirFromViewedFile = joinPath . drop 1 . sep [] "" + where + sep l _ [] = reverse l + sep l curr (c:cs) + | c == '%' = sep (reverse curr:l) "" cs + | c == escchar = case cs of + (c':cs') -> sep l (c':curr) cs' + [] -> sep l curr cs + | otherwise = sep l (c:curr) cs + +prop_viewedFile_roundtrips :: TestableFilePath -> Bool +prop_viewedFile_roundtrips tf + -- Relative filenames wanted, not directories. + | any (isPathSeparator) (end f ++ beginning f) = True + | isAbsolute f || isDrive f = True + | otherwise = dir == dirFromViewedFile + (viewedFileFromReference' Nothing Nothing f) + where + f = fromTestableFilePath tf + dir = joinPath $ beginning $ splitDirectories f diff --git a/Annex/Wanted.hs b/Annex/Wanted.hs new file mode 100644 index 0000000000..87fdbdae49 --- /dev/null +++ b/Annex/Wanted.hs @@ -0,0 +1,75 @@ +{- git-annex checking whether content is wanted + - + - Copyright 2012-2021 Joey Hess + - + - Licensed under the GNU AGPL version 3 or higher. + -} + +module Annex.Wanted where + +import Annex.Common +import Logs.PreferredContent +import Annex.UUID +import Annex.CatFile +import Git.FilePath +import qualified Database.Keys +import Types.FileMatcher + +import qualified Data.Set as S + +{- Check if a file is preferred content for the local repository. -} +wantGet :: Bool -> Maybe Key -> AssociatedFile -> Annex Bool +wantGet d key file = isPreferredContent Nothing S.empty key file d + +{- Check if a file is preferred content for a repository. -} +wantGetBy :: Bool -> Maybe Key -> AssociatedFile -> UUID -> Annex Bool +wantGetBy d key file to = isPreferredContent (Just to) S.empty key file d + +{- Check if a file is not preferred or required content, and can be + - dropped. When a UUID is provided, checks for that repository. + - + - The AssociatedFile is the one that the user requested to drop. + - There may be other files that use the same key, and preferred content + - may match some of those and not others. If any are preferred content, + - that will prevent dropping. When the other associated files are known, + - they can be provided, otherwise this looks them up. + -} +wantDrop :: Bool -> Maybe UUID -> Maybe Key -> AssociatedFile -> (Maybe [AssociatedFile]) -> Annex Bool +wantDrop d from key file others = + isNothing <$> checkDrop isPreferredContent d from key file others + +{- Generalization of wantDrop that can also be used with isRequiredContent. + - + - When the content should not be dropped, returns Just the file that + - the checker matches. + -} +checkDrop :: (Maybe UUID -> AssumeNotPresent -> Maybe Key -> AssociatedFile -> Bool -> Annex Bool) -> Bool -> Maybe UUID -> Maybe Key -> AssociatedFile -> (Maybe [AssociatedFile]) -> Annex (Maybe AssociatedFile) +checkDrop checker d from key file others = do + u <- maybe getUUID (pure . id) from + let s = S.singleton u + let checker' f = checker (Just u) s key f d + ifM (checker' file) + ( return (Just file) + , do + others' <- case others of + Just afs -> pure (filter (/= file) afs) + Nothing -> case key of + Just k -> + mapM (\f -> AssociatedFile . Just <$> fromRepo (fromTopFilePath f)) + =<< Database.Keys.getAssociatedFiles k + Nothing -> pure [] + l <- filterM checker' others' + if null l + then return Nothing + else checkassociated l + ) + where + -- Some associated files that are in the keys database may no + -- longer correspond to files in the repository, and should + -- not prevent dropping. + checkassociated [] = return Nothing + checkassociated (af@(AssociatedFile (Just f)):fs) = + catKeyFile f >>= \case + Just k | Just k == key -> return (Just af) + _ -> checkassociated fs + checkassociated (AssociatedFile Nothing:fs) = checkassociated fs diff --git a/Annex/WorkTree.hs b/Annex/WorkTree.hs new file mode 100644 index 0000000000..41abc2471e --- /dev/null +++ b/Annex/WorkTree.hs @@ -0,0 +1,60 @@ +{- git-annex worktree files + - + - Copyright 2013-2022 Joey Hess + - + - Licensed under the GNU AGPL version 3 or higher. + -} + +module Annex.WorkTree where + +import Annex.Common +import Annex.Link +import Annex.CatFile +import Annex.CurrentBranch +import qualified Database.Keys + +{- Looks up the key corresponding to an annexed file in the work tree, + - by examining what the symlink points to. + - + - An unlocked file will not have a link on disk, so fall back to + - looking for a pointer to a key in git. + - + - When in an adjusted branch that may have hidden the file, looks for a + - pointer to a key in the original branch. + -} +lookupKey :: RawFilePath -> Annex (Maybe Key) +lookupKey = lookupKey' catkeyfile + where + catkeyfile file = + ifM (liftIO $ doesFileExist $ fromRawFilePath file) + ( catKeyFile file + , catKeyFileHidden file =<< getCurrentBranch + ) + +{- Like lookupKey, but only looks at files staged in git, not at unstaged + - changes in the work tree. This means it's slower, but it also has + - consistently the same behavior for locked files as for unlocked files. + -} +lookupKeyStaged :: RawFilePath -> Annex (Maybe Key) +lookupKeyStaged file = catKeyFile file >>= \case + Just k -> return (Just k) + Nothing -> catKeyFileHidden file =<< getCurrentBranch + +{- Like lookupKey, but does not find keys for hidden files. -} +lookupKeyNotHidden :: RawFilePath -> Annex (Maybe Key) +lookupKeyNotHidden = lookupKey' catkeyfile + where + catkeyfile file = + ifM (liftIO $ doesFileExist $ fromRawFilePath file) + ( catKeyFile file + , return Nothing + ) + +lookupKey' :: (RawFilePath -> Annex (Maybe Key)) -> RawFilePath -> Annex (Maybe Key) +lookupKey' catkeyfile file = isAnnexLink file >>= \case + Just key -> return (Just key) + Nothing -> catkeyfile file + +{- Find all annexed files and update the keys database for them. -} +scanAnnexedFiles :: Annex () +scanAnnexedFiles = Database.Keys.updateDatabase diff --git a/Annex/WorkerPool.hs b/Annex/WorkerPool.hs new file mode 100644 index 0000000000..9f2b7f872f --- /dev/null +++ b/Annex/WorkerPool.hs @@ -0,0 +1,126 @@ +{- git-annex worker thread pool + - + - Copyright 2015-2019 Joey Hess + - + - Licensed under the GNU AGPL version 3 or higher. + -} + +module Annex.WorkerPool where + +import Annex +import Annex.Common +import Types.WorkerPool + +import Control.Concurrent +import Control.Concurrent.STM + +{- Runs an action and makes the current thread have the specified stage + - while doing so. If too many other threads are running in the specified + - stage, waits for one of them to become idle. + - + - Noop if the current thread already has the requested stage, or if the + - current thread is not in the worker pool, or if concurrency is not + - enabled. + - + - Also a noop if the stage is not one of the stages that the worker pool + - uses. + -} +enteringStage :: WorkerStage -> Annex a -> Annex a +enteringStage newstage a = Annex.getState Annex.workers >>= \case + Nothing -> a + Just tv -> do + mytid <- liftIO myThreadId + let set = changeStageTo mytid tv (const newstage) + let restore = maybe noop (void . changeStageTo mytid tv . const) + bracket set restore (const a) + +{- Transition the current thread to the initial stage. + - This is done once the thread is ready to begin work. + -} +enteringInitialStage :: Annex () +enteringInitialStage = Annex.getState Annex.workers >>= \case + Nothing -> noop + Just tv -> do + mytid <- liftIO myThreadId + void $ changeStageTo mytid tv initialStage + +{- This needs to leave the WorkerPool with the same number of + - idle and active threads, and with the same number of threads for each + - WorkerStage. So, all it can do is swap the WorkerStage of our thread's + - ActiveWorker with an IdleWorker. + - + - Must avoid a deadlock if all worker threads end up here at the same + - time, or if there are no suitable IdleWorkers left. So if necessary + - we first replace our ActiveWorker with an IdleWorker in the pool, to allow + - some other thread to use it, before waiting for a suitable IdleWorker + - for us to use. + - + - Note that the spareVals in the WorkerPool does not get anything added to + - it when adding the IdleWorker, so there will for a while be more IdleWorkers + - in the pool than spareVals. That does not prevent other threads that call + - this from using them though, so it's fine. + -} +changeStageTo :: ThreadId -> TMVar (WorkerPool t) -> (UsedStages -> WorkerStage) -> Annex (Maybe WorkerStage) +changeStageTo mytid tv getnewstage = liftIO $ + replaceidle >>= maybe + (return Nothing) + (either waitidle (return . Just)) + where + replaceidle = atomically $ do + pool <- takeTMVar tv + let newstage = getnewstage (usedStages pool) + let notchanging = do + putTMVar tv pool + return Nothing + if memberStage newstage (usedStages pool) + then case removeThreadIdWorkerPool mytid pool of + Just ((myaid, oldstage), pool') + | oldstage /= newstage -> case getIdleWorkerSlot newstage pool' of + Nothing -> do + putTMVar tv $ + addWorkerPool (IdleWorker oldstage) pool' + return $ Just $ Left (myaid, newstage, oldstage) + Just pool'' -> do + -- optimisation + putTMVar tv $ + addWorkerPool (IdleWorker oldstage) $ + addWorkerPool (ActiveWorker myaid newstage) pool'' + return $ Just $ Right oldstage + | otherwise -> notchanging + _ -> notchanging + else notchanging + + waitidle (myaid, newstage, oldstage) = atomically $ do + pool <- waitIdleWorkerSlot newstage =<< takeTMVar tv + putTMVar tv $ addWorkerPool (ActiveWorker myaid newstage) pool + return (Just oldstage) + +-- | Waits until there's an idle StartStage worker in the worker pool, +-- removes it from the pool, and returns its state. +-- +-- If the worker pool is not already allocated, returns Nothing. +waitStartWorkerSlot :: TMVar (WorkerPool t) -> STM (Maybe (t, WorkerStage)) +waitStartWorkerSlot tv = do + pool <- takeTMVar tv + v <- go pool + return $ Just (v, StartStage) + where + go pool = case spareVals pool of + [] -> retry + (v:vs) -> do + let pool' = pool { spareVals = vs } + putTMVar tv =<< waitIdleWorkerSlot StartStage pool' + return v + +waitIdleWorkerSlot :: WorkerStage -> WorkerPool t -> STM (WorkerPool t) +waitIdleWorkerSlot wantstage = maybe retry return . getIdleWorkerSlot wantstage + +getIdleWorkerSlot :: WorkerStage -> WorkerPool t -> Maybe (WorkerPool t) +getIdleWorkerSlot wantstage pool = do + l <- findidle [] (workerList pool) + return $ pool { workerList = l } + where + findidle _ [] = Nothing + findidle c ((IdleWorker stage):rest) + | stage == wantstage = Just (c ++ rest) + findidle c (w:rest) = findidle (w:c) rest diff --git a/Annex/YoutubeDl.hs b/Annex/YoutubeDl.hs new file mode 100644 index 0000000000..0ed67e9aec --- /dev/null +++ b/Annex/YoutubeDl.hs @@ -0,0 +1,410 @@ +{- yt-dlp (and deprecated youtube-dl) integration for git-annex + - + - Copyright 2017-2024 Joey Hess + - + - Licensed under the GNU AGPL version 3 or higher. + -} + +{-# LANGUAGE DeriveGeneric #-} + +module Annex.YoutubeDl ( + youtubeDl, + youtubeDlTo, + youtubeDlSupported, + youtubeDlCheck, + youtubeDlFileName, + youtubeDlFileNameHtmlOnly, + youtubeDlCommand, + youtubePlaylist, + YoutubePlaylistItem(..), +) where + +import Annex.Common +import qualified Annex +import Annex.Content +import Annex.Url +import Utility.DiskFree +import Utility.HtmlDetect +import Utility.Process.Transcript +import Utility.Metered +import Utility.Tmp +import Messages.Progress +import Logs.Transfer + +import Network.URI +import Control.Concurrent.Async +import Text.Read +import Data.Either +import qualified Data.Aeson as Aeson +import GHC.Generics +import qualified Data.ByteString as B +import qualified Data.ByteString.Char8 as B8 + +-- youtube-dl can follow redirects to anywhere, including potentially +-- localhost or a private address. So, it's only allowed to download +-- content if the user has allowed access to all addresses. +youtubeDlAllowed :: Annex Bool +youtubeDlAllowed = ipAddressesUnlimited + +youtubeDlNotAllowedMessage :: String +youtubeDlNotAllowedMessage = unwords + [ "This url is supported by yt-dlp, but" + , "yt-dlp could potentially access any address, and the" + , "configuration of annex.security.allowed-ip-addresses" + , "does not allow that. Not using yt-dlp (or youtube-dl)." + ] + +-- Runs youtube-dl in a work directory, to download a single media file +-- from the url. Returns the path to the media file in the work directory. +-- +-- Displays a progress meter as youtube-dl downloads. +-- +-- If no file is downloaded, or the program is not installed, +-- returns Right Nothing. +-- +-- youtube-dl can write to multiple files, either temporary files, or +-- multiple videos found at the url, and git-annex needs only one file. +-- So we need to find the destination file, and make sure there is not +-- more than one. With yt-dlp use --print-to-file to make it record the +-- file(s) it downloads. With youtube-dl, the best that can be done is +-- to require that the work directory end up with only 1 file in it. +-- (This can fail, but youtube-dl is deprecated, and they closed my +-- issue requesting something like --print-to-file; +-- ) +youtubeDl :: URLString -> FilePath -> MeterUpdate -> Annex (Either String (Maybe FilePath)) +youtubeDl url workdir p = ifM ipAddressesUnlimited + ( withUrlOptions $ youtubeDl' url workdir p + , return $ Left youtubeDlNotAllowedMessage + ) + +youtubeDl' :: URLString -> FilePath -> MeterUpdate -> UrlOptions -> Annex (Either String (Maybe FilePath)) +youtubeDl' url workdir p uo + | supportedScheme uo url = do + cmd <- youtubeDlCommand + ifM (liftIO $ inSearchPath cmd) + ( runcmd cmd >>= \case + Right True -> downloadedfiles cmd >>= \case + (f:[]) -> return (Right (Just f)) + [] -> return (nofiles cmd) + fs -> return (toomanyfiles cmd fs) + Right False -> workdirfiles >>= \case + [] -> return (Right Nothing) + _ -> return (Left $ cmd ++ " download is incomplete. Run the command again to resume.") + Left msg -> return (Left msg) + , return (Right Nothing) + ) + | otherwise = return (Right Nothing) + where + nofiles cmd = Left $ cmd ++ " did not put any media in its work directory, perhaps it's been configured to store files somewhere else?" + toomanyfiles cmd fs = Left $ cmd ++ " downloaded multiple media files; git-annex is only able to deal with one per url: " ++ show fs + downloadedfiles cmd + | isytdlp cmd = liftIO $ + (nub . lines <$> readFile filelistfile) + `catchIO` (pure . const []) + | otherwise = workdirfiles + workdirfiles = liftIO $ filter (/= filelistfile) + <$> (filterM (doesFileExist) =<< dirContents workdir) + filelistfile = workdir filelistfilebase + filelistfilebase = "git-annex-file-list-file" + isytdlp cmd = cmd == "yt-dlp" + runcmd cmd = youtubeDlMaxSize workdir >>= \case + Left msg -> return (Left msg) + Right maxsize -> do + opts <- youtubeDlOpts (dlopts cmd ++ maxsize) + oh <- mkOutputHandlerQuiet + -- The size is unknown to start. Once youtube-dl + -- outputs some progress, the meter will be updated + -- with the size, which is why it's important the + -- meter is passed into commandMeter' + let unknownsize = Nothing :: Maybe FileSize + ok <- metered (Just p) unknownsize Nothing $ \meter meterupdate -> + liftIO $ commandMeter' + (if isytdlp cmd then parseYtdlpProgress else parseYoutubeDlProgress) + oh (Just meter) meterupdate cmd opts + (\pr -> pr { cwd = Just workdir }) + return (Right ok) + dlopts cmd = + [ Param url + -- To make it only download one file when given a + -- page with a video and a playlist, download only the video. + , Param "--no-playlist" + -- And when given a page with only a playlist, download only + -- the first video on the playlist. (Assumes the video is + -- somewhat stable, but this is the only way to prevent + -- it from downloading the whole playlist.) + , Param "--playlist-items", Param "0" + ] ++ + if isytdlp cmd + then + -- Avoid warnings, which go to + -- stderr and may mess up + -- git-annex's display. + [ Param "--no-warnings" + , Param "--progress-template" + , Param progressTemplate + , Param "--print-to-file" + , Param "after_move:filepath" + , Param filelistfilebase + ] + else [] + +-- To honor annex.diskreserve, ask youtube-dl to not download too +-- large a media file. Factors in other downloads that are in progress, +-- and any files in the workdir that it may have partially downloaded +-- before. +youtubeDlMaxSize :: FilePath -> Annex (Either String [CommandParam]) +youtubeDlMaxSize workdir = ifM (Annex.getRead Annex.force) + ( return $ Right [] + , liftIO (getDiskFree workdir) >>= \case + Just have -> do + inprogress <- sizeOfDownloadsInProgress (const True) + partial <- liftIO $ sum + <$> (mapM (getFileSize . toRawFilePath) =<< dirContents workdir) + reserve <- annexDiskReserve <$> Annex.getGitConfig + let maxsize = have - reserve - inprogress + partial + if maxsize > 0 + then return $ Right + [ Param "--max-filesize" + , Param (show maxsize) + ] + else return $ Left $ + needMoreDiskSpace $ + negate maxsize + 1024 + Nothing -> return $ Right [] + ) + +-- Download a media file to a destination, +youtubeDlTo :: Key -> URLString -> FilePath -> MeterUpdate -> Annex Bool +youtubeDlTo key url dest p = do + res <- withTmpWorkDir key $ \workdir -> + youtubeDl url (fromRawFilePath workdir) p >>= \case + Right (Just mediafile) -> do + liftIO $ moveFile (toRawFilePath mediafile) (toRawFilePath dest) + return (Just True) + Right Nothing -> return (Just False) + Left msg -> do + warning (UnquotedString msg) + return Nothing + return (fromMaybe False res) + +-- youtube-dl supports downloading urls that are not html pages, +-- but we don't want to use it for such urls, since they can be downloaded +-- without it. So, this first downloads part of the content and checks +-- if it's a html page; only then is youtube-dl used. +htmlOnly :: URLString -> a -> Annex a -> Annex a +htmlOnly url fallback a = withUrlOptions $ \uo -> + liftIO (downloadPartial url uo htmlPrefixLength) >>= \case + Just bs | isHtmlBs bs -> a + _ -> return fallback + +-- Check if youtube-dl supports downloading content from an url. +youtubeDlSupported :: URLString -> Annex Bool +youtubeDlSupported url = either (const False) id + <$> withUrlOptions (youtubeDlCheck' url) + +-- Check if youtube-dl can find media in an url. +-- +-- While this does not download anything, it checks youtubeDlAllowed +-- for symmetry with youtubeDl; the check should not succeed if the +-- download won't succeed. +youtubeDlCheck :: URLString -> Annex (Either String Bool) +youtubeDlCheck url = ifM youtubeDlAllowed + ( withUrlOptions $ youtubeDlCheck' url + , return $ Left youtubeDlNotAllowedMessage + ) + +youtubeDlCheck' :: URLString -> UrlOptions -> Annex (Either String Bool) +youtubeDlCheck' url uo + | supportedScheme uo url = catchMsgIO $ htmlOnly url False $ do + opts <- youtubeDlOpts [ Param url, Param "--simulate" ] + cmd <- youtubeDlCommand + liftIO $ snd <$> processTranscript cmd (toCommand opts) Nothing + | otherwise = return (Right False) + +-- Ask youtube-dl for the filename of media in an url. +-- +-- (This is not always identical to the filename it uses when downloading.) +youtubeDlFileName :: URLString -> Annex (Either String FilePath) +youtubeDlFileName url = withUrlOptions go + where + go uo + | supportedScheme uo url = flip catchIO (pure . Left . show) $ + htmlOnly url nomedia (youtubeDlFileNameHtmlOnly' url uo) + | otherwise = return nomedia + nomedia = Left "no media in url" + +-- Does not check if the url contains htmlOnly; use when that's already +-- been verified. +youtubeDlFileNameHtmlOnly :: URLString -> Annex (Either String FilePath) +youtubeDlFileNameHtmlOnly = withUrlOptions . youtubeDlFileNameHtmlOnly' + +youtubeDlFileNameHtmlOnly' :: URLString -> UrlOptions -> Annex (Either String FilePath) +youtubeDlFileNameHtmlOnly' url uo + | supportedScheme uo url = flip catchIO (pure . Left . show) go + | otherwise = return nomedia + where + go = do + -- Sometimes youtube-dl will fail with an ugly backtrace + -- (eg, http://bugs.debian.org/874321) + -- so catch stderr as well as stdout to avoid the user + -- seeing it. --no-warnings avoids warning messages that + -- are output to stdout. + opts <- youtubeDlOpts + [ Param url + , Param "--get-filename" + , Param "--no-warnings" + , Param "--no-playlist" + ] + cmd <- youtubeDlCommand + let p = (proc cmd (toCommand opts)) + { std_out = CreatePipe + , std_err = CreatePipe + } + liftIO $ withCreateProcess p waitproc + + waitproc Nothing (Just o) (Just e) pid = do + errt <- async $ discardstderr pid e + output <- hGetContentsStrict o + ok <- liftIO $ checkSuccessProcess pid + wait errt + return $ case (ok, lines output) of + (True, (f:_)) | not (null f) -> Right f + _ -> nomedia + waitproc _ _ _ _ = error "internal" + + discardstderr pid e = hGetLineUntilExitOrEOF pid e >>= \case + Nothing -> return () + Just _ -> discardstderr pid e + + nomedia = Left "no media in url" + +youtubeDlOpts :: [CommandParam] -> Annex [CommandParam] +youtubeDlOpts addopts = do + opts <- map Param . annexYoutubeDlOptions <$> Annex.getGitConfig + return (opts ++ addopts) + +youtubeDlCommand :: Annex String +youtubeDlCommand = annexYoutubeDlCommand <$> Annex.getGitConfig >>= \case + Just c -> pure c + Nothing -> ifM (liftIO $ inSearchPath "yt-dlp") + ( return "yt-dlp" + , return "youtube-dl" + ) + +supportedScheme :: UrlOptions -> URLString -> Bool +supportedScheme uo url = case parseURIRelaxed url of + Nothing -> False + Just u -> case uriScheme u of + -- avoid ugly message from youtube-dl about not supporting file: + "file:" -> False + -- ftp indexes may look like html pages, and there's no point + -- involving youtube-dl in a ftp download + "ftp:" -> False + _ -> allowedScheme uo u + +progressTemplate :: String +progressTemplate = "ANNEX %(progress.downloaded_bytes)i %(progress.total_bytes_estimate)i %(progress.total_bytes)i ANNEX" + +{- The progressTemplate makes output look like "ANNEX 10 100 NA ANNEX" or + - "ANNEX 10 NA 100 ANNEX" depending on whether the total bytes are estimated + - or known. That makes parsing much easier (and less fragile) than parsing + - the usual progress output. + -} +parseYtdlpProgress :: ProgressParser +parseYtdlpProgress = go [] . reverse . progresschunks + where + delim = '\r' + + progresschunks = splitc delim + + go remainder [] = (Nothing, Nothing, remainder) + go remainder (x:xs) = case splitc ' ' x of + ("ANNEX":downloaded_bytes_s:total_bytes_estimate_s:total_bytes_s:"ANNEX":[]) -> + case (readMaybe downloaded_bytes_s, readMaybe total_bytes_estimate_s, readMaybe total_bytes_s) of + (Just downloaded_bytes, Nothing, Just total_bytes) -> + ( Just (BytesProcessed downloaded_bytes) + , Just (TotalSize total_bytes) + , remainder + ) + (Just downloaded_bytes, Just total_bytes_estimate, _) -> + ( Just (BytesProcessed downloaded_bytes) + , Just (TotalSize total_bytes_estimate) + , remainder + ) + _ -> go (remainder++x) xs + _ -> go (remainder++x) xs + +{- youtube-dl is deprecated, parsing its progress was attempted before but + - was buggy and is no longer done. -} +parseYoutubeDlProgress :: ProgressParser +parseYoutubeDlProgress _ = (Nothing, Nothing, "") + +{- List the items that yt-dlp can download from an url. + - + - Note that this does not check youtubeDlAllowed because it does not + - download content. + -} +youtubePlaylist :: URLString -> Annex (Either String [YoutubePlaylistItem]) +youtubePlaylist url = do + cmd <- youtubeDlCommand + if cmd == "yt-dlp" + then liftIO $ youtubePlaylist' url cmd + else return $ Left $ "Scraping needs yt-dlp, but git-annex has been configured to use " ++ cmd + +youtubePlaylist' :: URLString -> String -> IO (Either String [YoutubePlaylistItem]) +youtubePlaylist' url cmd = withTmpFile "yt-dlp" $ \tmpfile h -> do + hClose h + (outerr, ok) <- processTranscript cmd + [ "--simulate" + , "--flat-playlist" + -- Skip live videos in progress + , "--match-filter", "!is_live" + , "--print-to-file" + -- Write json with selected fields. + , "%(.{" ++ intercalate "," youtubePlaylistItemFields ++ "})j" + , tmpfile + , url + ] + Nothing + if ok + then flip catchIO (pure . Left . show) $ do + v <- map Aeson.eitherDecodeStrict . B8.lines + <$> B.readFile tmpfile + return $ case partitionEithers v of + ((parserr:_), _) -> + Left $ "yt-dlp json parse errror: " ++ parserr + ([], r) -> Right r + else return $ Left $ if null outerr + then "yt-dlp failed" + else "yt-dlp failed: " ++ outerr + +-- There are other fields that yt-dlp can extract, but these are similar to +-- the information from an RSS feed. +youtubePlaylistItemFields :: [String] +youtubePlaylistItemFields = + [ "playlist_title" + , "playlist_uploader" + , "title" + , "description" + , "license" + , "url" + , "timestamp" + ] + +-- Parse JSON generated by yt-dlp for playlist. Note that any field +-- may be omitted when that information is not supported for a given website. +data YoutubePlaylistItem = YoutubePlaylistItem + { youtube_playlist_title :: Maybe String + , youtube_playlist_uploader :: Maybe String + , youtube_title :: Maybe String + , youtube_description :: Maybe String + , youtube_license :: Maybe String + , youtube_url :: Maybe String + , youtube_timestamp :: Maybe Integer -- ^ unix timestamp + } deriving (Generic, Show) + +instance Aeson.FromJSON YoutubePlaylistItem + where + parseJSON = Aeson.genericParseJSON Aeson.defaultOptions + { Aeson.fieldLabelModifier = drop (length "youtube_") } + diff --git a/Assistant.hs b/Assistant.hs new file mode 100644 index 0000000000..2e50a79ff1 --- /dev/null +++ b/Assistant.hs @@ -0,0 +1,194 @@ +{- git-annex assistant daemon + - + - Copyright 2012-2013 Joey Hess + - + - Licensed under the GNU AGPL version 3 or higher. + -} + +{-# LANGUAGE CPP #-} +{-# LANGUAGE OverloadedStrings #-} + +module Assistant where + +import qualified Annex +import Assistant.Common +import Assistant.DaemonStatus +import Assistant.NamedThread +import Assistant.Types.ThreadedMonad +import Assistant.Threads.DaemonStatus +import Assistant.Threads.Watcher +import Assistant.Threads.Committer +import Assistant.Threads.Pusher +import Assistant.Threads.Exporter +import Assistant.Threads.Merger +import Assistant.Threads.TransferWatcher +import Assistant.Threads.Transferrer +import Assistant.Threads.RemoteControl +import Assistant.Threads.SanityChecker +import Assistant.Threads.Cronner +import Assistant.Threads.ProblemFixer +#ifndef mingw32_HOST_OS +import Assistant.Threads.MountWatcher +#endif +import Assistant.Threads.NetWatcher +import Assistant.Threads.Upgrader +import Assistant.Threads.UpgradeWatcher +import Assistant.Threads.TransferScanner +import Assistant.Threads.TransferPoller +import Assistant.Threads.ConfigMonitor +import Assistant.Threads.Glacier +#ifdef WITH_WEBAPP +import Assistant.WebApp +import Assistant.Threads.WebApp +#ifdef WITH_PAIRING +import Assistant.Threads.PairListener +#endif +#else +import Assistant.Types.UrlRenderer +#endif +import qualified Utility.Daemon +import Utility.ThreadScheduler +import Utility.HumanTime +import Annex.Perms +import Annex.BranchState +import Utility.LogFile +import Annex.Path +#ifdef mingw32_HOST_OS +import Utility.Env +import System.Environment (getArgs) +#endif +import qualified Utility.Debug as Debug + +import Network.Socket (HostName, PortNumber) + +stopDaemon :: Annex () +stopDaemon = liftIO . Utility.Daemon.stopDaemon . fromRawFilePath + =<< fromRepo gitAnnexPidFile + +{- Starts the daemon. If the daemon is run in the foreground, once it's + - running, can start the browser. + - + - startbrowser is passed the url and html shim file, as well as the original + - stdout and stderr descriptors. -} +startDaemon :: Bool -> Bool -> Maybe Duration -> Maybe String -> Maybe HostName -> Maybe PortNumber -> Maybe (Maybe Handle -> Maybe Handle -> String -> FilePath -> IO ()) -> Annex () +startDaemon assistant foreground startdelay cannotrun listenhost listenport startbrowser = do + Annex.changeState $ \s -> s { Annex.daemon = True } + enableInteractiveBranchAccess + pidfile <- fromRepo gitAnnexPidFile + logfile <- fromRepo gitAnnexDaemonLogFile + liftIO $ Debug.debug "Assistant" $ "logging to " ++ fromRawFilePath logfile + createAnnexDirectory (parentDir pidfile) +#ifndef mingw32_HOST_OS + createAnnexDirectory (parentDir logfile) + let logfd = handleToFd =<< openLog (fromRawFilePath logfile) + if foreground + then do + origout <- liftIO $ catchMaybeIO $ + fdToHandle =<< dup stdOutput + origerr <- liftIO $ catchMaybeIO $ + fdToHandle =<< dup stdError + let undaemonize = Utility.Daemon.foreground logfd (Just (fromRawFilePath pidfile)) + start undaemonize $ + case startbrowser of + Nothing -> Nothing + Just a -> Just $ a origout origerr + else do + git_annex <- liftIO programPath + ps <- gitAnnexDaemonizeParams + start (Utility.Daemon.daemonize git_annex ps logfd (Just (fromRawFilePath pidfile)) False) Nothing +#else + -- Windows doesn't daemonize, but does redirect output to the + -- log file. The only way to do so is to restart the program. + when (foreground || not foreground) $ do + let flag = "GIT_ANNEX_OUTPUT_REDIR" + createAnnexDirectory (parentDir logfile) + ifM (liftIO $ isNothing <$> getEnv flag) + ( liftIO $ withNullHandle $ \nullh -> do + loghandle <- openLog (fromRawFilePath logfile) + e <- getEnvironment + cmd <- programPath + ps <- getArgs + let p = (proc cmd ps) + { env = Just (addEntry flag "1" e) + , std_in = UseHandle nullh + , std_out = UseHandle loghandle + , std_err = UseHandle loghandle + } + exitcode <- withCreateProcess p $ \_ _ _ pid -> + waitForProcess pid + exitWith exitcode + , start (Utility.Daemon.foreground (Just (fromRawFilePath pidfile))) $ + case startbrowser of + Nothing -> Nothing + Just a -> Just $ a Nothing Nothing + ) +#endif + where + start daemonize webappwaiter = withThreadState $ \st -> do + checkCanWatch + dstatus <- startDaemonStatus + logfile <- fromRepo gitAnnexDaemonLogFile + liftIO $ Debug.debug "Assistant" $ "logging to " ++ fromRawFilePath logfile + liftIO $ daemonize $ + flip runAssistant (go webappwaiter) + =<< newAssistantData st dstatus + +#ifdef WITH_WEBAPP + go webappwaiter = do + d <- getAssistant id +#else + go _webappwaiter = do +#endif + urlrenderer <- liftIO newUrlRenderer +#ifdef WITH_WEBAPP + let webappthread = [ assist $ webAppThread d urlrenderer False cannotrun Nothing listenhost listenport webappwaiter ] +#else + let webappthread = [] +#endif + let threads = if isJust cannotrun + then webappthread + else webappthread ++ + [ watch commitThread +#ifdef WITH_WEBAPP +#ifdef WITH_PAIRING + , assist $ pairListenerThread urlrenderer +#endif +#endif + , assist pushThread + , assist pushRetryThread + , assist exportThread + , assist exportRetryThread + , assist mergeThread + , assist transferWatcherThread + , assist transferPollerThread + , assist transfererThread + , assist remoteControlThread + , assist daemonStatusThread + , assist $ sanityCheckerDailyThread urlrenderer + , assist sanityCheckerHourlyThread + , assist $ problemFixerThread urlrenderer +#ifndef mingw32_HOST_OS + , assist $ mountWatcherThread urlrenderer +#endif + , assist netWatcherThread + , assist $ upgraderThread urlrenderer + , assist $ upgradeWatcherThread urlrenderer + , assist netWatcherFallbackThread + , assist $ transferScannerThread urlrenderer + , assist $ cronnerThread urlrenderer + , assist configMonitorThread + , assist glacierThread + , watch watchThread + -- must come last so that all threads that wait + -- on it have already started waiting + , watch $ sanityCheckerStartupThread startdelay + ] + + mapM_ (startthread urlrenderer) threads + liftIO waitForTermination + + watch a = (True, a) + assist a = (False, a) + startthread urlrenderer (watcher, t) + | watcher || assistant = startNamedThread urlrenderer t + | otherwise = noop diff --git a/Assistant/Alert.hs b/Assistant/Alert.hs new file mode 100644 index 0000000000..ead791dcc9 --- /dev/null +++ b/Assistant/Alert.hs @@ -0,0 +1,460 @@ +{- git-annex assistant alerts + - + - Copyright 2012-2014 Joey Hess + - + - Licensed under the GNU AGPL version 3 or higher. + -} + +{-# LANGUAGE OverloadedStrings, CPP, BangPatterns #-} + +module Assistant.Alert where + +import Annex.Common +import Assistant.Types.Alert +import Assistant.Alert.Utility +import qualified Remote +import Utility.Tense +import Types.Transfer +import Types.Distribution +import Git.Types (RemoteName) + +import Data.String +import qualified Data.Text as T +import qualified Control.Exception as E + +#ifdef WITH_WEBAPP +import Assistant.DaemonStatus +import Assistant.WebApp.Types +import Assistant.WebApp (renderUrl) +#endif +import Assistant.Monad +import Assistant.Types.UrlRenderer + +{- Makes a button for an alert that opens a Route. + - + - If autoclose is set, the button will close the alert it's + - attached to when clicked. -} +#ifdef WITH_WEBAPP +mkAlertButton :: Bool -> T.Text -> UrlRenderer -> Route WebApp -> Assistant AlertButton +mkAlertButton autoclose label urlrenderer route = do + close <- asIO1 removeAlert + url <- liftIO $ renderUrl urlrenderer route [] + return $ AlertButton + { buttonLabel = label + , buttonUrl = url + , buttonAction = if autoclose then Just close else Nothing + , buttonPrimary = True + } +#endif + +renderData :: Alert -> TenseText +renderData = tenseWords . alertData + +baseActivityAlert :: Alert +baseActivityAlert = Alert + { alertClass = Activity + , alertHeader = Nothing + , alertMessageRender = renderData + , alertData = [] + , alertCounter = 0 + , alertBlockDisplay = False + , alertClosable = False + , alertPriority = Medium + , alertIcon = Just ActivityIcon + , alertCombiner = Nothing + , alertName = Nothing + , alertButtons = [] + } + +warningAlert :: String -> String -> Alert +warningAlert name msg = Alert + { alertClass = Warning + , alertHeader = Just $ tenseWords ["warning"] + , alertMessageRender = renderData + , alertData = [UnTensed $ T.pack msg] + , alertCounter = 0 + , alertBlockDisplay = True + , alertClosable = True + , alertPriority = High + , alertIcon = Just ErrorIcon + , alertCombiner = Just $ dataCombiner $ \_old new -> new + , alertName = Just $ WarningAlert name + , alertButtons = [] + } + +errorAlert :: String -> [AlertButton] -> Alert +errorAlert msg buttons = Alert + { alertClass = Error + , alertHeader = Nothing + , alertMessageRender = renderData + , alertData = [UnTensed $ T.pack msg] + , alertCounter = 0 + , alertBlockDisplay = True + , alertClosable = True + , alertPriority = Pinned + , alertIcon = Just ErrorIcon + , alertCombiner = Nothing + , alertName = Nothing + , alertButtons = buttons + } + +activityAlert :: Maybe TenseText -> [TenseChunk] -> Alert +activityAlert header dat = baseActivityAlert + { alertHeader = header + , alertData = dat + } + +startupScanAlert :: Alert +startupScanAlert = activityAlert Nothing + [Tensed "Performing" "Performed", "startup scan"] + +{- Displayed when a shutdown is occurring, so will be seen after shutdown + - has happened. -} +shutdownAlert :: Alert +shutdownAlert = warningAlert "shutdown" "git-annex has been shut down" + +commitAlert :: Alert +commitAlert = activityAlert Nothing + [Tensed "Committing" "Committed", "changes to git"] + +showRemotes :: [RemoteName] -> TenseChunk +showRemotes = UnTensed . T.intercalate ", " . map T.pack + +syncAlert :: [Remote] -> Alert +syncAlert = syncAlert' . map Remote.name + +syncAlert' :: [RemoteName] -> Alert +syncAlert' rs = baseActivityAlert + { alertName = Just SyncAlert + , alertHeader = Just $ tenseWords + [Tensed "Syncing" "Synced", "with", showRemotes rs] + , alertPriority = Low + , alertIcon = Just SyncIcon + } + +syncResultAlert :: [Remote] -> [Remote] -> Alert +syncResultAlert succeeded failed = syncResultAlert' + (map Remote.name succeeded) + (map Remote.name failed) + +syncResultAlert' :: [RemoteName] -> [RemoteName] -> Alert +syncResultAlert' succeeded failed = makeAlertFiller (not $ null succeeded) $ + baseActivityAlert + { alertName = Just SyncAlert + , alertHeader = Just $ tenseWords msg + } + where + msg + | null succeeded = ["Failed to sync with", showRemotes failed] + | null failed = ["Synced with", showRemotes succeeded] + | otherwise = + [ "Synced with", showRemotes succeeded + , "but not with", showRemotes failed + ] + +sanityCheckAlert :: Alert +sanityCheckAlert = activityAlert + (Just $ tenseWords [Tensed "Running" "Ran", "daily sanity check"]) + ["to make sure everything is ok."] + +sanityCheckFixAlert :: String -> Alert +sanityCheckFixAlert msg = Alert + { alertClass = Warning + , alertHeader = Just $ tenseWords ["Fixed a problem"] + , alertMessageRender = render + , alertData = [UnTensed $ T.pack msg] + , alertCounter = 0 + , alertBlockDisplay = True + , alertPriority = High + , alertClosable = True + , alertIcon = Just ErrorIcon + , alertName = Just SanityCheckFixAlert + , alertCombiner = Just $ dataCombiner (++) + , alertButtons = [] + } + where + render alert = tenseWords $ alerthead : alertData alert ++ [alertfoot] + alerthead = "The daily sanity check found and fixed a problem:" + alertfoot = "If these problems persist, consider filing a bug report." + +fsckingAlert :: AlertButton -> Maybe Remote -> Alert +fsckingAlert button mr = baseActivityAlert + { alertData = case mr of + Nothing -> [ UnTensed $ T.pack $ "Consistency check in progress" ] + Just r -> [ UnTensed $ T.pack $ "Consistency check of " ++ Remote.name r ++ " in progress"] + , alertButtons = [button] + } + +showFscking :: UrlRenderer -> Maybe Remote -> IO (Either E.SomeException a) -> Assistant a +showFscking urlrenderer mr a = do +#ifdef WITH_WEBAPP + button <- mkAlertButton False (T.pack "Configure") urlrenderer ConfigFsckR + r <- alertDuring (fsckingAlert button mr) $ + liftIO a +#else + r <- liftIO a +#endif + either (liftIO . E.throwIO) return r + +notFsckedNudge :: UrlRenderer -> Maybe Remote -> Assistant () +#ifdef WITH_WEBAPP +notFsckedNudge urlrenderer mr = do + button <- mkAlertButton True (T.pack "Configure") urlrenderer ConfigFsckR + void $ addAlert (notFsckedAlert mr button) +#else +notFsckedNudge _ _ = noop +#endif + +notFsckedAlert :: Maybe Remote -> AlertButton -> Alert +notFsckedAlert mr button = Alert + { alertHeader = Just $ fromString $ concat + [ "You should enable consistency checking to protect your data" + , maybe "" (\r -> " in " ++ Remote.name r) mr + , "." + ] + , alertIcon = Just InfoIcon + , alertPriority = High + , alertButtons = [button] + , alertClosable = True + , alertClass = Message + , alertMessageRender = renderData + , alertCounter = 0 + , alertBlockDisplay = True + , alertName = Just NotFsckedAlert + , alertCombiner = Just $ dataCombiner $ \_old new -> new + , alertData = [] + } + +baseUpgradeAlert :: [AlertButton] -> TenseText -> Alert +baseUpgradeAlert buttons message = Alert + { alertHeader = Just message + , alertIcon = Just UpgradeIcon + , alertPriority = High + , alertButtons = buttons + , alertClosable = True + , alertClass = Message + , alertMessageRender = renderData + , alertCounter = 0 + , alertBlockDisplay = True + , alertName = Just UpgradeAlert + , alertCombiner = Just $ fullCombiner $ \new _old -> new + , alertData = [] + } + +canUpgradeAlert :: AlertPriority -> GitAnnexVersion -> AlertButton -> Alert +canUpgradeAlert priority version button = + (baseUpgradeAlert [button] $ fromString msg) + { alertPriority = priority + , alertData = [fromString $ " (version " ++ version ++ ")"] + } + where + msg = if priority >= High + then "An important upgrade of git-annex is available!" + else "An upgrade of git-annex is available." + +upgradeReadyAlert :: AlertButton -> Alert +upgradeReadyAlert button = baseUpgradeAlert [button] $ + fromString "A new version of git-annex has been installed." + +upgradingAlert :: Alert +upgradingAlert = activityAlert Nothing [ fromString "Upgrading git-annex" ] + +upgradeFinishedAlert :: Maybe AlertButton -> GitAnnexVersion -> Alert +upgradeFinishedAlert button version = + baseUpgradeAlert (maybeToList button) $ fromString $ + "Finished upgrading git-annex to version " ++ version + +upgradeFailedAlert :: String -> Alert +upgradeFailedAlert msg = (errorAlert msg []) + { alertHeader = Just $ fromString "Upgrade failed." } + +unusedFilesAlert :: [AlertButton] -> String -> Alert +unusedFilesAlert buttons message = Alert + { alertHeader = Just $ fromString $ unwords + [ "Old and deleted files are piling up --" + , message + ] + , alertIcon = Just InfoIcon + , alertPriority = High + , alertButtons = buttons + , alertClosable = True + , alertClass = Message + , alertMessageRender = renderData + , alertCounter = 0 + , alertBlockDisplay = True + , alertName = Just UnusedFilesAlert + , alertCombiner = Just $ fullCombiner $ \new _old -> new + , alertData = [] + } + +brokenRepositoryAlert :: [AlertButton] -> Alert +brokenRepositoryAlert = errorAlert "Serious problems have been detected with your repository. This needs your immediate attention!" + +repairingAlert :: String -> Alert +repairingAlert repodesc = activityAlert Nothing + [ Tensed "Attempting to repair" "Repaired" + , UnTensed $ T.pack repodesc + ] + +pairingAlert :: AlertButton -> Alert +pairingAlert button = baseActivityAlert + { alertData = [ UnTensed "Pairing in progress" ] + , alertPriority = High + , alertButtons = [button] + } + +pairRequestReceivedAlert :: String -> AlertButton -> Alert +pairRequestReceivedAlert who button = Alert + { alertClass = Message + , alertHeader = Nothing + , alertMessageRender = renderData + , alertData = [UnTensed $ T.pack $ who ++ " is sending a pair request."] + , alertCounter = 0 + , alertBlockDisplay = False + , alertPriority = High + , alertClosable = True + , alertIcon = Just InfoIcon + , alertName = Just $ PairAlert who + , alertCombiner = Just $ dataCombiner $ \_old new -> new + , alertButtons = [button] + } + +pairRequestAcknowledgedAlert :: String -> Maybe AlertButton -> Alert +pairRequestAcknowledgedAlert who button = baseActivityAlert + { alertData = ["Pairing with", UnTensed (T.pack who), Tensed "in progress" "complete"] + , alertPriority = High + , alertName = Just $ PairAlert who + , alertCombiner = Just $ dataCombiner $ \_old new -> new + , alertButtons = maybeToList button + } + +connectionNeededAlert :: AlertButton -> Alert +connectionNeededAlert button = Alert + { alertHeader = Just "Share with friends, and keep your devices in sync across the cloud." + , alertIcon = Just ConnectionIcon + , alertPriority = High + , alertButtons = [button] + , alertClosable = True + , alertClass = Message + , alertMessageRender = renderData + , alertCounter = 0 + , alertBlockDisplay = True + , alertName = Just ConnectionNeededAlert + , alertCombiner = Just $ dataCombiner $ \_old new -> new + , alertData = [] + } + +cloudRepoNeededAlert :: Maybe String -> AlertButton -> Alert +cloudRepoNeededAlert friendname button = Alert + { alertHeader = Just $ fromString $ unwords + [ "Unable to download files from" + , (fromMaybe "your other devices" friendname) ++ "." + ] + , alertIcon = Just ErrorIcon + , alertPriority = High + , alertButtons = [button] + , alertClosable = True + , alertClass = Message + , alertMessageRender = renderData + , alertCounter = 0 + , alertBlockDisplay = True + , alertName = Just $ CloudRepoNeededAlert + , alertCombiner = Just $ dataCombiner $ \_old new -> new + , alertData = [] + } + +remoteRemovalAlert :: String -> AlertButton -> Alert +remoteRemovalAlert desc button = Alert + { alertHeader = Just $ fromString $ + "The repository \"" ++ desc ++ + "\" has been emptied, and can now be removed." + , alertIcon = Just InfoIcon + , alertPriority = High + , alertButtons = [button] + , alertClosable = True + , alertClass = Message + , alertMessageRender = renderData + , alertCounter = 0 + , alertBlockDisplay = True + , alertName = Just $ RemoteRemovalAlert desc + , alertCombiner = Just $ dataCombiner $ \_old new -> new + , alertData = [] + } + +{- Show a message that relates to a list of files. + - + - The most recent several files are shown, and a count of any others. -} +fileAlert :: TenseChunk -> [FilePath] -> Alert +fileAlert msg files = (activityAlert Nothing shortfiles) + { alertName = Just $ FileAlert msg + , alertMessageRender = renderer + , alertCounter = counter + , alertCombiner = Just $ fullCombiner combiner + } + where + maxfilesshown = 10 + + (!somefiles, !counter) = splitcounter (dedupadjacent files) + !shortfiles = map (fromString . shortFile . takeFileName) somefiles + + renderer alert = tenseWords $ msg : alertData alert ++ showcounter + where + showcounter = case alertCounter alert of + 0 -> [] + _ -> [fromString $ "and " ++ show (alertCounter alert) ++ " other files"] + + dedupadjacent (x:y:rest) + | x == y = dedupadjacent (y:rest) + | otherwise = x : dedupadjacent (y:rest) + dedupadjacent (x:[]) = [x] + dedupadjacent [] = [] + + {- Note that this ensures the counter is never 1; no need to say + - "1 file" when the filename could be shown. -} + splitcounter l + | length l <= maxfilesshown = (l, 0) + | otherwise = + let (keep, rest) = splitAt (maxfilesshown - 1) l + in (keep, length rest) + + combiner new old = + let (!fs, n) = splitcounter $ + dedupadjacent $ alertData new ++ alertData old + !cnt = n + alertCounter new + alertCounter old + in old + { alertData = fs + , alertCounter = cnt + } + +addFileAlert :: [FilePath] -> Alert +addFileAlert = fileAlert (Tensed "Adding" "Added") + +{- This is only used as a success alert after a transfer, not during it. -} +transferFileAlert :: Direction -> Bool -> FilePath -> Alert +transferFileAlert direction True file + | direction == Upload = fileAlert "Uploaded" [file] + | otherwise = fileAlert "Downloaded" [file] +transferFileAlert direction False file + | direction == Upload = fileAlert "Upload failed" [file] + | otherwise = fileAlert "Download failed" [file] + +dataCombiner :: ([TenseChunk] -> [TenseChunk] -> [TenseChunk]) -> AlertCombiner +dataCombiner combiner = fullCombiner $ + \new old -> old { alertData = alertData new `combiner` alertData old } + +fullCombiner :: (Alert -> Alert -> Alert) -> AlertCombiner +fullCombiner combiner new old + | alertClass new /= alertClass old = Nothing + | alertName new == alertName old = + Just $! new `combiner` old + | otherwise = Nothing + +shortFile :: FilePath -> String +shortFile f + | len < maxlen = f + | otherwise = take half f ++ ".." ++ drop (len - half) f + where + len = length f + maxlen = 20 + half = (maxlen - 2) `div` 2 + diff --git a/Assistant/Alert/Utility.hs b/Assistant/Alert/Utility.hs new file mode 100644 index 0000000000..8016d620a4 --- /dev/null +++ b/Assistant/Alert/Utility.hs @@ -0,0 +1,129 @@ +{- git-annex assistant alert utilities + - + - Copyright 2012, 2013 Joey Hess + - + - Licensed under the GNU AGPL version 3 or higher. + -} + +module Assistant.Alert.Utility where + +import Annex.Common +import Assistant.Types.Alert +import Utility.Tense + +import qualified Data.Text as T +import Data.Text (Text) +import qualified Data.Map.Strict as M + +{- This is as many alerts as it makes sense to display at a time. + - A display might be smaller, or larger, the point is to not overwhelm the + - user with a ton of alerts. -} +displayAlerts :: Int +displayAlerts = 6 + +{- This is not a hard maximum, but there's no point in keeping a great + - many filler alerts in an AlertMap, so when there's more than this many, + - they start being pruned, down toward displayAlerts. -} +maxAlerts :: Int +maxAlerts = displayAlerts * 2 + +type AlertPair = (AlertId, Alert) + +{- The desired order is the reverse of: + - + - - Pinned alerts + - - High priority alerts, newest first + - - Medium priority Activity, newest first (mostly used for Activity) + - - Low priority alerts, newest first + - - Filler priority alerts, newest first + - - Ties are broken by the AlertClass, with Errors etc coming first. + -} +compareAlertPairs :: AlertPair -> AlertPair -> Ordering +compareAlertPairs + (aid, Alert { alertClass = aclass, alertPriority = aprio }) + (bid, Alert { alertClass = bclass, alertPriority = bprio }) + = compare aprio bprio + `mappend` compare aid bid + `mappend` compare aclass bclass + +sortAlertPairs :: [AlertPair] -> [AlertPair] +sortAlertPairs = sortBy compareAlertPairs + +{- Renders an alert's header for display, if it has one. -} +renderAlertHeader :: Alert -> Maybe Text +renderAlertHeader alert = renderTense (alertTense alert) <$> alertHeader alert + +{- Renders an alert's message for display. -} +renderAlertMessage :: Alert -> Text +renderAlertMessage alert = renderTense (alertTense alert) $ + (alertMessageRender alert) alert + +showAlert :: Alert -> String +showAlert alert = T.unpack $ T.unwords $ catMaybes + [ renderAlertHeader alert + , Just $ renderAlertMessage alert + ] + +alertTense :: Alert -> Tense +alertTense alert + | alertClass alert == Activity = Present + | otherwise = Past + +{- Checks if two alerts display the same. -} +effectivelySameAlert :: Alert -> Alert -> Bool +effectivelySameAlert x y = all id + [ alertClass x == alertClass y + , alertHeader x == alertHeader y + , alertData x == alertData y + , alertBlockDisplay x == alertBlockDisplay y + , alertClosable x == alertClosable y + , alertPriority x == alertPriority y + ] + +makeAlertFiller :: Bool -> Alert -> Alert +makeAlertFiller success alert + | isFiller alert = alert + | otherwise = alert + { alertClass = if c == Activity then c' else c + , alertPriority = Filler + , alertClosable = True + , alertButtons = [] + , alertIcon = Just $ if success then SuccessIcon else ErrorIcon + } + where + c = alertClass alert + c' + | success = Success + | otherwise = Error + +isFiller :: Alert -> Bool +isFiller alert = alertPriority alert == Filler + +{- Updates the Alertmap, adding or updating an alert. + - + - Any old filler that looks the same as the alert is removed. + - + - Or, if the alert has an alertCombiner that combines it with + - an old alert, the old alert is replaced with the result, and the + - alert is removed. + - + - Old filler alerts are pruned once maxAlerts is reached. + -} +mergeAlert :: AlertId -> Alert -> AlertMap -> AlertMap +mergeAlert i al m = maybe updatePrune updateCombine (alertCombiner al) + where + pruneSame k al' = k == i || not (effectivelySameAlert al al') + pruneBloat m' + | bloat > 0 = M.fromList $ pruneold $ M.toList m' + | otherwise = m' + where + bloat = M.size m' - maxAlerts + pruneold l = + let (f, rest) = partition (\(_, a) -> isFiller a) l + in drop bloat f ++ rest + updatePrune = pruneBloat $ M.filterWithKey pruneSame $ M.insert i al m + updateCombine combiner = + let combined = M.mapMaybe (combiner al) m + in if M.null combined + then updatePrune + else M.delete i $ M.union combined m diff --git a/Assistant/BranchChange.hs b/Assistant/BranchChange.hs new file mode 100644 index 0000000000..b78e13a015 --- /dev/null +++ b/Assistant/BranchChange.hs @@ -0,0 +1,19 @@ +{- git-annex assistant git-annex branch change tracking + - + - Copyright 2012 Joey Hess + - + - Licensed under the GNU AGPL version 3 or higher. + -} + +module Assistant.BranchChange where + +import Assistant.Common +import Assistant.Types.BranchChange + +import Control.Concurrent.MSampleVar + +branchChanged :: Assistant () +branchChanged = flip writeSV () <<~ (fromBranchChangeHandle . branchChangeHandle) + +waitBranchChange :: Assistant () +waitBranchChange = readSV <<~ (fromBranchChangeHandle . branchChangeHandle) diff --git a/Assistant/Changes.hs b/Assistant/Changes.hs new file mode 100644 index 0000000000..4a20850fa0 --- /dev/null +++ b/Assistant/Changes.hs @@ -0,0 +1,47 @@ +{- git-annex assistant change tracking + - + - Copyright 2012-2013 Joey Hess + - + - Licensed under the GNU AGPL version 3 or higher. + -} + +module Assistant.Changes where + +import Assistant.Common +import Assistant.Types.Changes +import Utility.TList + +import Data.Time.Clock +import Control.Concurrent.STM + +{- Handlers call this when they made a change that needs to get committed. -} +madeChange :: FilePath -> ChangeInfo -> Assistant (Maybe Change) +madeChange f t = Just <$> (Change <$> liftIO getCurrentTime <*> pure f <*> pure t) + +noChange :: Assistant (Maybe Change) +noChange = return Nothing + +{- Indicates an add needs to be done, but has not started yet. -} +pendingAddChange :: FilePath -> Assistant (Maybe Change) +pendingAddChange f = Just <$> (PendingAddChange <$> liftIO getCurrentTime <*> pure f) + +{- Gets all unhandled changes. + - Blocks until at least one change is made. -} +getChanges :: Assistant [Change] +getChanges = (atomically . getTList) <<~ changePool + +{- Gets all unhandled changes, without blocking. -} +getAnyChanges :: Assistant [Change] +getAnyChanges = (atomically . takeTList) <<~ changePool + +{- Puts unhandled changes back into the pool. + - Note: Original order is not preserved. -} +refillChanges :: [Change] -> Assistant () +refillChanges cs = (atomically . flip appendTList cs) <<~ changePool + +{- Records a change to the pool. -} +recordChange :: Change -> Assistant () +recordChange c = (atomically . flip snocTList c) <<~ changePool + +recordChanges :: [Change] -> Assistant () +recordChanges = refillChanges diff --git a/Assistant/Commits.hs b/Assistant/Commits.hs new file mode 100644 index 0000000000..09c3172ad4 --- /dev/null +++ b/Assistant/Commits.hs @@ -0,0 +1,32 @@ +{- git-annex assistant commit tracking + - + - Copyright 2012 Joey Hess + - + - Licensed under the GNU AGPL version 3 or higher. + -} + +module Assistant.Commits where + +import Assistant.Common +import Assistant.Types.Commits +import Utility.TList + +import Control.Concurrent.STM + +{- Gets all unhandled commits. + - Blocks until at least one commit is made. -} +getCommits :: Assistant [Commit] +getCommits = (atomically . getTList) <<~ commitChan + +{- Records a commit in the channel. -} +recordCommit :: Assistant () +recordCommit = (atomically . flip consTList Commit) <<~ commitChan + +{- Gets all unhandled export commits. + - Blocks until at least one export commit is made. -} +getExportCommits :: Assistant [Commit] +getExportCommits = (atomically . getTList) <<~ exportCommitChan + +{- Records an export commit in the channel. -} +recordExportCommit :: Assistant () +recordExportCommit = (atomically . flip consTList Commit) <<~ exportCommitChan diff --git a/Assistant/Common.hs b/Assistant/Common.hs new file mode 100644 index 0000000000..33532ec216 --- /dev/null +++ b/Assistant/Common.hs @@ -0,0 +1,14 @@ +{- Common infrastructure for the git-annex assistant. + - + - Copyright 2012 Joey Hess + - + - Licensed under the GNU AGPL version 3 or higher. + -} + +module Assistant.Common (module X) where + +import Annex.Common as X hiding (debug) +import Assistant.Monad as X +import Assistant.Types.DaemonStatus as X +import Assistant.Types.NamedThread as X +import Assistant.Types.Alert as X diff --git a/Assistant/CredPairCache.hs b/Assistant/CredPairCache.hs new file mode 100644 index 0000000000..eba3d2b779 --- /dev/null +++ b/Assistant/CredPairCache.hs @@ -0,0 +1,53 @@ +{- git-annex assistant CredPair cache. + - + - Copyright 2014 Joey Hess + - + - Licensed under the GNU AGPL version 3 or higher. + -} + +{-# LANGUAGE BangPatterns #-} + +module Assistant.CredPairCache ( + cacheCred, + getCachedCred, + expireCachedCred, +) where + +import Assistant.Types.CredPairCache +import Types.Creds +import Assistant.Common +import Utility.ThreadScheduler + +import qualified Data.Map as M +import Control.Concurrent + +{- Caches a CredPair, but only for a limited time, after which it + - will expire. + - + - Note that repeatedly caching the same CredPair + - does not reset its expiry time. + -} +cacheCred :: CredPair -> Seconds -> Assistant () +cacheCred (login, password) expireafter = do + cache <- getAssistant credPairCache + liftIO $ do + changeStrict cache $ M.insert login password + void $ forkIO $ do + threadDelaySeconds expireafter + changeStrict cache $ M.delete login + +getCachedCred :: Login -> Assistant (Maybe Password) +getCachedCred login = do + cache <- getAssistant credPairCache + liftIO $ M.lookup login <$> readMVar cache + +expireCachedCred :: Login -> Assistant () +expireCachedCred login = do + cache <- getAssistant credPairCache + liftIO $ changeStrict cache $ M.delete login + +{- Update map strictly to avoid keeping references to old creds in memory. -} +changeStrict :: CredPairCache -> (M.Map Login Password -> M.Map Login Password) -> IO () +changeStrict cache a = modifyMVar_ cache $ \m -> do + let !m' = a m + return m' diff --git a/Assistant/DaemonStatus.hs b/Assistant/DaemonStatus.hs new file mode 100644 index 0000000000..9be4558761 --- /dev/null +++ b/Assistant/DaemonStatus.hs @@ -0,0 +1,273 @@ +{- git-annex assistant daemon status + - + - Copyright 2012 Joey Hess + - + - Licensed under the GNU AGPL version 3 or higher. + -} + +{-# LANGUAGE BangPatterns #-} + +module Assistant.DaemonStatus where + +import Assistant.Common +import Assistant.Alert.Utility +import Utility.Tmp +import Utility.NotificationBroadcaster +import Types.Availability +import Types.Transfer +import Logs.Transfer +import Logs.Trust +import Utility.TimeStamp +import qualified Remote +import qualified Types.Remote as Remote +import Config.DynamicConfig +import Annex.SpecialRemote.Config + +import Control.Concurrent.STM +import System.Posix.Types +import Data.Time.Clock.POSIX +import qualified Data.Map.Strict as M +import qualified Data.Set as S + +getDaemonStatus :: Assistant DaemonStatus +getDaemonStatus = (atomically . readTVar) <<~ daemonStatusHandle + +modifyDaemonStatus_ :: (DaemonStatus -> DaemonStatus) -> Assistant () +modifyDaemonStatus_ a = modifyDaemonStatus $ \s -> (a s, ()) + +modifyDaemonStatus :: (DaemonStatus -> (DaemonStatus, b)) -> Assistant b +modifyDaemonStatus a = do + dstatus <- getAssistant daemonStatusHandle + liftIO $ do + (s, b) <- atomically $ do + r@(!s, _) <- a <$> readTVar dstatus + writeTVar dstatus s + return r + sendNotification $ changeNotifier s + return b + +{- Returns a function that updates the lists of syncable remotes + - and other associated information. -} +calcSyncRemotes :: Annex (DaemonStatus -> DaemonStatus) +calcSyncRemotes = do + rs <- filterM (liftIO . getDynamicConfig . remoteAnnexSync . Remote.gitconfig) + =<< (concat . Remote.byCost <$> Remote.remoteList) + alive <- trustExclude DeadTrusted (map Remote.uuid rs) + let good r = Remote.uuid r `elem` alive + let syncable = filter good rs + contentremotes <- filterM (not <$$> liftIO . getDynamicConfig . remoteAnnexIgnore . Remote.gitconfig) $ + filter (\r -> Remote.uuid r /= NoUUID) syncable + let (exportremotes, nonexportremotes) = partition (exportTree . Remote.config) contentremotes + let isimport r = importTree (Remote.config r) || Remote.thirdPartyPopulated (Remote.remotetype r) + let dataremotes = filter (not . isimport) nonexportremotes + tocloud <- anyM iscloud contentremotes + + return $ \dstatus -> dstatus + { syncRemotes = syncable + , syncGitRemotes = filter (Remote.gitSyncableRemoteType . Remote.remotetype) syncable + , syncDataRemotes = dataremotes + , exportRemotes = exportremotes + , downloadRemotes = contentremotes + , syncingToCloudRemote = tocloud + } + where + iscloud r + | Remote.readonly r = pure False + | otherwise = tryNonAsync (Remote.availability r) >>= return . \case + Right GloballyAvailable -> True + _ -> False + +{- Updates the syncRemotes list from the list of all remotes in Annex state. -} +updateSyncRemotes :: Assistant () +updateSyncRemotes = do + modifyDaemonStatus_ =<< liftAnnex calcSyncRemotes + status <- getDaemonStatus + liftIO $ sendNotification $ syncRemotesNotifier status + + when (syncingToCloudRemote status) $ + updateAlertMap $ + M.filter $ \alert -> + alertName alert /= Just CloudRepoNeededAlert + +changeCurrentlyConnected :: (S.Set UUID -> S.Set UUID) -> Assistant () +changeCurrentlyConnected sm = do + modifyDaemonStatus_ $ \ds -> ds + { currentlyConnectedRemotes = sm (currentlyConnectedRemotes ds) + } + v <- currentlyConnectedRemotes <$> getDaemonStatus + debug [show v] + liftIO . sendNotification =<< syncRemotesNotifier <$> getDaemonStatus + +updateScheduleLog :: Assistant () +updateScheduleLog = + liftIO . sendNotification =<< scheduleLogNotifier <$> getDaemonStatus + +{- Load any previous daemon status file, and store it in a MVar for this + - process to use as its DaemonStatus. Also gets current transfer status. -} +startDaemonStatus :: Annex DaemonStatusHandle +startDaemonStatus = do + file <- fromRepo gitAnnexDaemonStatusFile + status <- liftIO $ + flip catchDefaultIO (readDaemonStatusFile file) =<< newDaemonStatus + transfers <- M.fromList <$> getTransfers + addsync <- calcSyncRemotes + liftIO $ atomically $ newTVar $ addsync $ status + { scanComplete = False + , sanityCheckRunning = False + , currentTransfers = transfers + } + +{- Don't just dump out the structure, because it will change over time, + - and parts of it are not relevant. -} +writeDaemonStatusFile :: FilePath -> DaemonStatus -> IO () +writeDaemonStatusFile file status = + viaTmp writeFile file =<< serialized <$> getPOSIXTime + where + serialized now = unlines + [ "lastRunning:" ++ show now + , "scanComplete:" ++ show (scanComplete status) + , "sanityCheckRunning:" ++ show (sanityCheckRunning status) + , "lastSanityCheck:" ++ maybe "" show (lastSanityCheck status) + ] + +readDaemonStatusFile :: FilePath -> IO DaemonStatus +readDaemonStatusFile file = parse <$> newDaemonStatus <*> readFile file + where + parse status = foldr parseline status . lines + parseline line status + | key == "lastRunning" = parseval parsePOSIXTime $ \v -> + status { lastRunning = Just v } + | key == "scanComplete" = parseval readish $ \v -> + status { scanComplete = v } + | key == "sanityCheckRunning" = parseval readish $ \v -> + status { sanityCheckRunning = v } + | key == "lastSanityCheck" = parseval parsePOSIXTime $ \v -> + status { lastSanityCheck = Just v } + | otherwise = status -- unparsable line + where + (key, value) = separate (== ':') line + parseval parser a = maybe status a (parser value) + +{- Checks if a time stamp was made after the daemon was lastRunning. + - + - Some slop is built in; this really checks if the time stamp was made + - at least ten minutes after the daemon was lastRunning. This is to + - ensure the daemon shut down cleanly, and deal with minor clock skew. + - + - If the daemon has never ran before, this always returns False. + -} +afterLastDaemonRun :: EpochTime -> DaemonStatus -> Bool +afterLastDaemonRun timestamp status = maybe False (< t) (lastRunning status) + where + t = realToFrac (timestamp + slop) :: POSIXTime + slop = fromIntegral tenMinutes + +tenMinutes :: Int +tenMinutes = 10 * 60 + +{- Mutates the transfer map. Runs in STM so that the transfer map can + - be modified in the same transaction that modifies the transfer queue. + - Note that this does not send a notification of the change; that's left + - to the caller. -} +adjustTransfersSTM :: DaemonStatusHandle -> (TransferMap -> TransferMap) -> STM () +adjustTransfersSTM dstatus a = do + s <- readTVar dstatus + let !v = a (currentTransfers s) + writeTVar dstatus $ s { currentTransfers = v } + +{- Checks if a transfer is currently running. -} +checkRunningTransferSTM :: DaemonStatusHandle -> Transfer -> STM Bool +checkRunningTransferSTM dstatus t = M.member t . currentTransfers + <$> readTVar dstatus + +{- Alters a transfer's info, if the transfer is in the map. -} +alterTransferInfo :: Transfer -> (TransferInfo -> TransferInfo) -> Assistant () +alterTransferInfo t a = updateTransferInfo' $ M.adjust a t + +{- Updates a transfer's info. Adds the transfer to the map if necessary, + - or if already present, updates it while preserving the old transferTid, + - transferPaused, and bytesComplete values, which are not written to disk. -} +updateTransferInfo :: Transfer -> TransferInfo -> Assistant () +updateTransferInfo t info = updateTransferInfo' $ M.insertWith merge t info + where + merge new old = new + { transferTid = maybe (transferTid new) Just (transferTid old) + , transferPaused = transferPaused new || transferPaused old + , bytesComplete = maybe (bytesComplete new) Just (bytesComplete old) + } + +updateTransferInfo' :: (TransferMap -> TransferMap) -> Assistant () +updateTransferInfo' a = notifyTransfer `after` modifyDaemonStatus_ update + where + update s = s { currentTransfers = a (currentTransfers s) } + +{- Removes a transfer from the map, and returns its info. -} +removeTransfer :: Transfer -> Assistant (Maybe TransferInfo) +removeTransfer t = notifyTransfer `after` modifyDaemonStatus remove + where + remove s = + let (info, ts) = M.updateLookupWithKey + (\_k _v -> Nothing) + t (currentTransfers s) + in (s { currentTransfers = ts }, info) + +{- Send a notification when a transfer is changed. -} +notifyTransfer :: Assistant () +notifyTransfer = do + dstatus <- getAssistant daemonStatusHandle + liftIO $ sendNotification + =<< transferNotifier <$> atomically (readTVar dstatus) + +{- Send a notification when alerts are changed. -} +notifyAlert :: Assistant () +notifyAlert = do + dstatus <- getAssistant daemonStatusHandle + liftIO $ sendNotification + =<< alertNotifier <$> atomically (readTVar dstatus) + +{- Returns the alert's identifier, which can be used to remove it. -} +addAlert :: Alert -> Assistant AlertId +addAlert alert = notifyAlert `after` modifyDaemonStatus add + where + add s = (s { lastAlertId = i, alertMap = m }, i) + where + !i = nextAlertId $ lastAlertId s + !m = mergeAlert i alert (alertMap s) + +removeAlert :: AlertId -> Assistant () +removeAlert i = updateAlert i (const Nothing) + +updateAlert :: AlertId -> (Alert -> Maybe Alert) -> Assistant () +updateAlert i a = updateAlertMap $ \m -> M.update a i m + +updateAlertMap :: (AlertMap -> AlertMap) -> Assistant () +updateAlertMap a = notifyAlert `after` modifyDaemonStatus_ update + where + update s = + let !m = a (alertMap s) + in s { alertMap = m } + +{- Displays an alert while performing an activity that returns True on + - success. + - + - The alert is left visible afterwards, as filler. + - Old filler is pruned, to prevent the map growing too large. -} +alertWhile :: Alert -> Assistant Bool -> Assistant Bool +alertWhile alert a = alertWhile' alert $ do + r <- a + return (r, r) + +{- Like alertWhile, but allows the activity to return a value too. -} +alertWhile' :: Alert -> Assistant (Bool, a) -> Assistant a +alertWhile' alert a = do + let alert' = alert { alertClass = Activity } + i <- addAlert alert' + (ok, r) <- a + updateAlertMap $ mergeAlert i $ makeAlertFiller ok alert' + return r + +{- Displays an alert while performing an activity, then removes it. -} +alertDuring :: Alert -> Assistant a -> Assistant a +alertDuring alert a = do + i <- addAlert $ alert { alertClass = Activity } + removeAlert i `after` a diff --git a/Assistant/DeleteRemote.hs b/Assistant/DeleteRemote.hs new file mode 100644 index 0000000000..fa788f086f --- /dev/null +++ b/Assistant/DeleteRemote.hs @@ -0,0 +1,89 @@ +{- git-annex assistant remote deletion utilities + - + - Copyright 2012 Joey Hess + - + - Licensed under the GNU AGPL version 3 or higher. + -} + +{-# LANGUAGE CPP #-} + +module Assistant.DeleteRemote where + +import Assistant.Common +import Assistant.Types.UrlRenderer +import Assistant.TransferQueue +import Types.Transfer +import Logs.Location +import Assistant.DaemonStatus +import qualified Remote +import Remote.List.Util +import qualified Git.Remote.Remove +import Logs.Trust +import qualified Annex + +#ifdef WITH_WEBAPP +import Assistant.WebApp.Types +import Assistant.Alert +import qualified Data.Text as T +#endif + +{- Removes a remote (but leave the repository as-is), and returns the old + - Remote data. -} +disableRemote :: UUID -> Assistant Remote +disableRemote uuid = do + remote <- fromMaybe (giveup "unknown remote") + <$> liftAnnex (Remote.remoteFromUUID uuid) + liftAnnex $ do + inRepo $ Git.Remote.Remove.remove (Remote.name remote) + remotesChanged + updateSyncRemotes + return remote + +{- Removes a remote, marking it dead .-} +removeRemote :: UUID -> Assistant Remote +removeRemote uuid = do + liftAnnex $ trustSet uuid DeadTrusted + disableRemote uuid + +{- Called when a Remote is probably empty, to remove it. + - + - This does one last check for any objects remaining in the Remote, + - and if there are any, queues Downloads of them, and defers removing + - the remote for later. This is to catch any objects not referred to + - in keys in the current branch. + -} +removableRemote :: UrlRenderer -> UUID -> Assistant () +removableRemote urlrenderer uuid = getkeys >>= \case + Just keys + | null keys -> finishRemovingRemote urlrenderer uuid + | otherwise -> do + r <- fromMaybe (giveup "unknown remote") + <$> liftAnnex (Remote.remoteFromUUID uuid) + mapM_ (queueremaining r) keys + Nothing -> noop + where + queueremaining r k = + queueTransferWhenSmall "remaining object in unwanted remote" + (AssociatedFile Nothing) (Transfer Download uuid (fromKey id k)) r + {- Scanning for keys can take a long time; do not tie up + - the Annex monad while doing it, so other threads continue to + - run. -} + getkeys = do + a <- liftAnnex $ Annex.withCurrentState $ loggedKeysFor uuid + liftIO a + +{- With the webapp, this asks the user to click on a button to finish + - removing the remote. + - + - Without the webapp, just do the removal now. + -} +finishRemovingRemote :: UrlRenderer -> UUID -> Assistant () +#ifdef WITH_WEBAPP +finishRemovingRemote urlrenderer uuid = do + desc <- liftAnnex $ Remote.prettyUUID uuid + button <- mkAlertButton True (T.pack "Finish deletion process") urlrenderer $ + FinishDeleteRepositoryR uuid + void $ addAlert $ remoteRemovalAlert desc button +#else +finishRemovingRemote _ uuid = void $ removeRemote uuid +#endif diff --git a/Assistant/Drop.hs b/Assistant/Drop.hs new file mode 100644 index 0000000000..06b09951ac --- /dev/null +++ b/Assistant/Drop.hs @@ -0,0 +1,30 @@ +{- git-annex assistant dropping of unwanted content + - + - Copyright 2012 Joey Hess + - + - Licensed under the GNU AGPL version 3 or higher. + -} + +module Assistant.Drop ( + handleDrops, + handleDropsFrom, +) where + +import Assistant.Common +import Assistant.DaemonStatus +import Annex.Drop (handleDropsFrom, Reason) +import Logs.Location +import CmdLine.Action +import Types.NumCopies +import Types.Command + +{- Drop from local and/or remote when allowed by the preferred content and + - numcopies settings. -} +handleDrops :: Reason -> Bool -> Key -> AssociatedFile -> [VerifiedCopy] -> Assistant () +handleDrops reason fromhere key f preverified = do + syncrs <- syncDataRemotes <$> getDaemonStatus + locs <- liftAnnex $ loggedLocations key + liftAnnex $ handleDropsFrom + locs syncrs reason fromhere key f + (SeekInput []) + preverified callCommandAction diff --git a/Assistant/Fsck.hs b/Assistant/Fsck.hs new file mode 100644 index 0000000000..067c7d1a10 --- /dev/null +++ b/Assistant/Fsck.hs @@ -0,0 +1,50 @@ +{- git-annex assistant fscking + - + - Copyright 2013 Joey Hess + - + - Licensed under the GNU AGPL version 3 or higher. + -} + +module Assistant.Fsck where + +import Assistant.Common +import Types.ScheduledActivity +import qualified Types.Remote as Remote +import Annex.UUID +import Assistant.Alert +import Assistant.Types.UrlRenderer +import Logs.Schedule +import qualified Annex + +import qualified Data.Set as S + +{- Displays a nudge in the webapp if a fsck is not configured for + - the specified remote, or for the local repository. -} +fsckNudge :: UrlRenderer -> Maybe Remote -> Assistant () +fsckNudge urlrenderer mr + | maybe True fsckableRemote mr = + whenM (liftAnnex $ annexFsckNudge <$> Annex.getGitConfig) $ + unlessM (liftAnnex $ checkFscked mr) $ + notFsckedNudge urlrenderer mr + | otherwise = noop + +fsckableRemote :: Remote -> Bool +fsckableRemote = isJust . Remote.remoteFsck + +{- Checks if the remote, or the local repository, has a fsck scheduled. + - Only looks at fscks configured to run via the local repository, not + - other repositories. -} +checkFscked :: Maybe Remote -> Annex Bool +checkFscked mr = any wanted . S.toList <$> (scheduleGet =<< getUUID) + where + wanted = case mr of + Nothing -> isSelfFsck + Just r -> flip isFsckOf (Remote.uuid r) + +isSelfFsck :: ScheduledActivity -> Bool +isSelfFsck (ScheduledSelfFsck _ _) = True +isSelfFsck _ = False + +isFsckOf :: ScheduledActivity -> UUID -> Bool +isFsckOf (ScheduledRemoteFsck u _ _) u' = u == u' +isFsckOf _ _ = False diff --git a/Assistant/Gpg.hs b/Assistant/Gpg.hs new file mode 100644 index 0000000000..01226e0640 --- /dev/null +++ b/Assistant/Gpg.hs @@ -0,0 +1,38 @@ +{- git-annex assistant gpg stuff + - + - Copyright 2013 Joey Hess + - + - Licensed under the GNU AGPL version 3 or higher. + -} + +module Assistant.Gpg where + +import Utility.Gpg +import Utility.UserInfo +import Types.Remote (RemoteConfigField) +import Annex.SpecialRemote.Config +import Types.ProposedAccepted + +import qualified Data.Map as M +import Control.Applicative +import Prelude + +{- Generates a gpg user id that is not used by any existing secret key -} +newUserId :: GpgCmd -> IO UserId +newUserId cmd = do + oldkeys <- secretKeys cmd + username <- either (const "unknown") id <$> myUserName + let basekeyname = username ++ "'s git-annex encryption key" + return $ Prelude.head $ filter (\n -> M.null $ M.filter (== n) oldkeys) + ( basekeyname + : map (\n -> basekeyname ++ show n) ([2..] :: [Int]) + ) + +data EnableEncryption = HybridEncryption | SharedEncryption | NoEncryption + deriving (Eq) + +{- Generates Remote configuration for encryption. -} +configureEncryption :: EnableEncryption -> (RemoteConfigField, ProposedAccepted String) +configureEncryption SharedEncryption = (encryptionField, Proposed "shared") +configureEncryption NoEncryption = (encryptionField, Proposed "none") +configureEncryption HybridEncryption = (encryptionField, Proposed "hybrid") diff --git a/Assistant/Install.hs b/Assistant/Install.hs new file mode 100644 index 0000000000..c11b6d5585 --- /dev/null +++ b/Assistant/Install.hs @@ -0,0 +1,175 @@ +{- Assistant installation + - + - Copyright 2012 Joey Hess + - + - Licensed under the GNU AGPL version 3 or higher. + -} + +{-# LANGUAGE CPP #-} + +module Assistant.Install where + +import Assistant.Common +import Assistant.Install.AutoStart +import Config.Files +import Utility.FileMode +import Utility.Shell +import Utility.Tmp +import Utility.Env +import Utility.SshConfig + +#ifdef darwin_HOST_OS +import Utility.OSX +#else +import Utility.FreeDesktop +import Assistant.Install.Menu +import Utility.UserInfo +import Utility.Android +#endif + +import System.PosixCompat.Files (ownerExecuteMode) + +standaloneAppBase :: IO (Maybe FilePath) +standaloneAppBase = getEnv "GIT_ANNEX_APP_BASE" + +{- The standalone app does not have an installation process. + - So when it's run, it needs to set up autostarting of the assistant + - daemon, as well as writing the programFile, and putting the + - git-annex-shell and git-annex-wrapper wrapper scripts into ~/.ssh + - + - Note that this is done every time it's started, so if the user moves + - it around, the paths this sets up won't break. + - + - File manager hook script installation is done even for + - packaged apps, since it has to go into the user's home directory. + -} +ensureInstalled :: IO () +ensureInstalled = ifM (isJust <$> getEnv "GIT_ANNEX_PACKAGE_INSTALL") + ( go Nothing + , go =<< standaloneAppBase + ) + where + go Nothing = installFileManagerHooks "git-annex" + go (Just base) = do + let program = base "git-annex" + programfile <- programFile + createDirectoryIfMissing True $ + fromRawFilePath (parentDir (toRawFilePath programfile)) + writeFile programfile program + +#ifdef darwin_HOST_OS + autostartfile <- userAutoStart osxAutoStartLabel + installAutoStart program autostartfile +#else + ifM osAndroid + ( do + -- Integration with the Termux:Boot app. + home <- myHomeDir + let bootfile = home ".termux" "boot" "git-annex" + unlessM (doesFileExist bootfile) $ do + createDirectoryIfMissing True (takeDirectory bootfile) + writeFile bootfile "git-annex assistant --autostart" + , do + menufile <- desktopMenuFilePath "git-annex" <$> userDataDir + icondir <- iconDir <$> userDataDir + installMenu program menufile base icondir + autostartfile <- autoStartPath "git-annex" <$> userConfigDir + installAutoStart program autostartfile + ) +#endif + + sshdir <- sshDir + let runshell var = "exec " ++ base "runshell " ++ var + let rungitannexshell var = runshell $ "git-annex-shell -c \"" ++ var ++ "\"" + + installWrapper (sshdir "git-annex-shell") $ unlines + [ shebang + , "set -e" + , "if [ \"x$SSH_ORIGINAL_COMMAND\" != \"x\" ]; then" + , rungitannexshell "$SSH_ORIGINAL_COMMAND" + , "else" + , rungitannexshell "$@" + , "fi" + ] + installWrapper (sshdir "git-annex-wrapper") $ unlines + [ shebang + , "set -e" + , runshell "\"$@\"" + ] + + installFileManagerHooks program + +installWrapper :: FilePath -> String -> IO () +installWrapper file content = do + curr <- catchDefaultIO "" $ readFileStrict file + when (curr /= content) $ do + createDirectoryIfMissing True (fromRawFilePath (parentDir (toRawFilePath file))) + viaTmp writeFile file content + modifyFileMode (toRawFilePath file) $ + addModes [ownerExecuteMode] + +installFileManagerHooks :: FilePath -> IO () +#ifdef linux_HOST_OS +installFileManagerHooks program = unlessM osAndroid $ do + let actions = ["get", "drop", "undo"] + + -- Gnome + nautilusScriptdir <- (\d -> d "nautilus" "scripts") <$> userDataDir + createDirectoryIfMissing True nautilusScriptdir + forM_ actions $ + genNautilusScript nautilusScriptdir + + -- KDE + userdata <- userDataDir + let kdeServiceMenusdir = userdata "kservices5" "ServiceMenus" + createDirectoryIfMissing True kdeServiceMenusdir + writeFile (kdeServiceMenusdir "git-annex.desktop") + (kdeDesktopFile actions) + where + genNautilusScript scriptdir action = + installscript (scriptdir scriptname action) $ unlines + [ shebang + , autoaddedcomment + , "exec " ++ program ++ " " ++ action ++ " --notify-start --notify-finish -- \"$@\"" + ] + scriptname action = "git-annex " ++ action + installscript f c = whenM (safetoinstallscript f) $ do + writeFile f c + modifyFileMode (toRawFilePath f) $ addModes [ownerExecuteMode] + safetoinstallscript f = catchDefaultIO True $ + elem autoaddedcomment . lines <$> readFileStrict f + autoaddedcomment = "# " ++ autoaddedmsg ++ " (To disable, chmod 600 this file.)" + autoaddedmsg = "Automatically added by git-annex, do not edit." + + kdeDesktopFile actions = unlines $ concat $ + kdeDesktopHeader actions : map kdeDesktopAction actions + kdeDesktopHeader actions = + [ "# " ++ autoaddedmsg + , "[Desktop Entry]" + , "Type=Service" + , "ServiceTypes=all/allfiles" + , "MimeType=all/all;" + , "Actions=" ++ intercalate ";" (map kdeDesktopSection actions) + , "X-KDE-Priority=TopLevel" + , "X-KDE-Submenu=Git-Annex" + , "X-KDE-Icon=git-annex" + , "X-KDE-ServiceTypes=KonqPopupMenu/Plugin" + ] + kdeDesktopSection command = "GitAnnex" ++ command + kdeDesktopAction command = + [ "" + , "[Desktop Action " ++ kdeDesktopSection command ++ "]" + , "Name=" ++ command + , "Icon=git-annex" + , unwords + [ "Exec=sh -c 'cd \"$(dirname \"$1\")\" &&" + , program + , command + , "--notify-start --notify-finish -- \"$1\"'" + , "false" -- this becomes $0 in sh, so unused + , "%f" + ] + ] +#else +installFileManagerHooks _ = noop +#endif diff --git a/Assistant/Install/AutoStart.hs b/Assistant/Install/AutoStart.hs new file mode 100644 index 0000000000..59fb7b674d --- /dev/null +++ b/Assistant/Install/AutoStart.hs @@ -0,0 +1,41 @@ +{- Assistant autostart file installation + - + - Copyright 2012 Joey Hess + - + - Licensed under the GNU AGPL version 3 or higher. + -} + +{-# LANGUAGE CPP #-} +{-# OPTIONS_GHC -fno-warn-tabs #-} + +module Assistant.Install.AutoStart where + +import Utility.FreeDesktop +#ifdef darwin_HOST_OS +import Utility.OSX +import Utility.Path +import Utility.SystemDirectory +import Utility.FileSystemEncoding +#endif + +installAutoStart :: FilePath -> FilePath -> IO () +installAutoStart command file = do +#ifdef darwin_HOST_OS + createDirectoryIfMissing True (fromRawFilePath (parentDir (toRawFilePath file))) + writeFile file $ genOSXAutoStartFile osxAutoStartLabel command + ["assistant", "--autostart"] +#else + writeDesktopMenuFile (fdoAutostart command) file +#endif + +osxAutoStartLabel :: String +osxAutoStartLabel = "com.branchable.git-annex.assistant" + +fdoAutostart :: FilePath -> DesktopEntry +fdoAutostart command = genDesktopEntry + "Git Annex Assistant" + "Autostart" + False + (command ++ " assistant --autostart") + Nothing + [] diff --git a/Assistant/Install/Menu.hs b/Assistant/Install/Menu.hs new file mode 100644 index 0000000000..91fcd3baf5 --- /dev/null +++ b/Assistant/Install/Menu.hs @@ -0,0 +1,54 @@ +{- Assistant menu installation. + - + - Copyright 2013 Joey Hess + - + - Licensed under the GNU AGPL version 3 or higher. + -} + +{-# LANGUAGE CPP #-} +{-# OPTIONS_GHC -fno-warn-tabs #-} + +module Assistant.Install.Menu where + +import Utility.FreeDesktop +import Utility.FileSystemEncoding +import Utility.Path + +import System.IO +import Utility.SystemDirectory +#ifndef darwin_HOST_OS +import System.FilePath +#endif + +installMenu :: FilePath -> FilePath -> FilePath -> FilePath -> IO () +#ifdef darwin_HOST_OS +installMenu _command _menufile _iconsrcdir _icondir = return () +#else +installMenu command menufile iconsrcdir icondir = do + writeDesktopMenuFile (fdoDesktopMenu command) menufile + installIcon (iconsrcdir "logo.svg") $ + iconFilePath (iconBaseName ++ ".svg") "scalable" icondir + installIcon (iconsrcdir "logo_16x16.png") $ + iconFilePath (iconBaseName ++ ".png") "16x16" icondir +#endif + +{- The command can be either just "git-annex", or the full path to use + - to run it. -} +fdoDesktopMenu :: FilePath -> DesktopEntry +fdoDesktopMenu command = genDesktopEntry + "Git Annex" + "Track and sync the files in your Git Annex" + False + (command ++ " webapp") + (Just iconBaseName) + ["Network", "FileTransfer"] + +installIcon :: FilePath -> FilePath -> IO () +installIcon src dest = do + createDirectoryIfMissing True (fromRawFilePath (parentDir (toRawFilePath dest))) + withBinaryFile src ReadMode $ \hin -> + withBinaryFile dest WriteMode $ \hout -> + hGetContents hin >>= hPutStr hout + +iconBaseName :: String +iconBaseName = "git-annex" diff --git a/Assistant/MakeRemote.hs b/Assistant/MakeRemote.hs new file mode 100644 index 0000000000..3d3c178f65 --- /dev/null +++ b/Assistant/MakeRemote.hs @@ -0,0 +1,184 @@ +{- git-annex assistant remote creation utilities + - + - Copyright 2012, 2013 Joey Hess + - + - Licensed under the GNU AGPL version 3 or higher. + -} + +{-# LANGUAGE OverloadedStrings #-} + +module Assistant.MakeRemote where + +import Assistant.Common +import Assistant.Ssh +import qualified Types.Remote as R +import qualified Remote +import Remote.List.Util +import qualified Remote.Rsync as Rsync +import qualified Remote.GCrypt as GCrypt +import qualified Git +import qualified Git.Command +import qualified Annex +import qualified Annex.SpecialRemote +import Annex.SpecialRemote.Config +import Logs.UUID +import Logs.Remote +import Git.Remote +import Git.Types (RemoteName) +import Creds +import Assistant.Gpg +import Utility.Gpg (KeyId) +import Types.GitConfig +import Config +import Types.ProposedAccepted + +import qualified Data.Map as M + +{- Sets up a new git or rsync remote, accessed over ssh. -} +makeSshRemote :: SshData -> Annex RemoteName +makeSshRemote sshdata = maker (sshRepoName sshdata) (genSshUrl sshdata) + where + maker + | onlyCapability sshdata RsyncCapable = makeRsyncRemote + | otherwise = makeGitRemote + +{- Runs an action that returns a name of the remote, and finishes adding it. -} +addRemote :: Annex RemoteName -> Annex Remote +addRemote a = do + name <- a + remotesChanged + maybe (giveup "failed to add remote") return + =<< Remote.byName (Just name) + +{- Inits a rsync special remote, and returns its name. -} +makeRsyncRemote :: RemoteName -> String -> Annex String +makeRsyncRemote name location = makeRemote name location $ const $ void $ + go =<< Annex.SpecialRemote.findExisting name + where + go [] = setupSpecialRemote name Rsync.remote config Nothing + (Nothing, R.Init, Annex.SpecialRemote.newConfig name Nothing mempty mempty) Nothing + go ((u, c, mcu):_) = setupSpecialRemote name Rsync.remote config Nothing + (Just u, R.Enable c, c) mcu + config = M.fromList + [ (encryptionField, Proposed "shared") + , (Proposed "rsyncurl", Proposed location) + , (typeField, Proposed "rsync") + ] + +{- Inits a gcrypt special remote, and returns its name. -} +makeGCryptRemote :: RemoteName -> String -> KeyId -> Annex RemoteName +makeGCryptRemote remotename location keyid = + initSpecialRemote remotename GCrypt.remote Nothing $ M.fromList + [ (typeField, Proposed "gcrypt") + , (Proposed "gitrepo", Proposed location) + , configureEncryption HybridEncryption + , (Proposed "keyid", Proposed keyid) + ] + +type SpecialRemoteMaker = RemoteName -> RemoteType -> Maybe CredPair -> R.RemoteConfig -> Annex RemoteName + +{- Inits a new special remote. The name is used as a suggestion, but + - will be changed if there is already a special remote with that name. -} +initSpecialRemote :: SpecialRemoteMaker +initSpecialRemote name remotetype mcreds config = go 0 + where + go :: Int -> Annex RemoteName + go n = do + let fullname = if n == 0 then name else name ++ show n + Annex.SpecialRemote.findExisting fullname >>= \case + [] -> setupSpecialRemote fullname remotetype config mcreds + (Nothing, R.Init, Annex.SpecialRemote.newConfig fullname Nothing mempty mempty) Nothing + _ -> go (n + 1) + +{- Enables an existing special remote. -} +enableSpecialRemote :: SpecialRemoteMaker +enableSpecialRemote name remotetype mcreds config = + Annex.SpecialRemote.findExisting name >>= \case + [] -> giveup $ "Cannot find a special remote named " ++ name + ((u, c, mcu):_) -> setupSpecialRemote' False name remotetype config mcreds (Just u, R.Enable c, c) mcu + +setupSpecialRemote :: RemoteName -> RemoteType -> R.RemoteConfig -> Maybe CredPair -> (Maybe UUID, R.SetupStage, R.RemoteConfig) -> Maybe (Annex.SpecialRemote.ConfigFrom UUID) -> Annex RemoteName +setupSpecialRemote = setupSpecialRemote' True + +setupSpecialRemote' :: Bool -> RemoteName -> RemoteType -> R.RemoteConfig -> Maybe CredPair -> (Maybe UUID, R.SetupStage, R.RemoteConfig) -> Maybe (Annex.SpecialRemote.ConfigFrom UUID) -> Annex RemoteName +setupSpecialRemote' setdesc name remotetype config mcreds (mu, ss, c) mcu = do + {- Currently, only 'weak' ciphers can be generated from the + - assistant, because otherwise GnuPG may block once the entropy + - pool is drained, and as of now there's no way to tell the user + - to perform IO actions to refill the pool. -} + let weakc = M.insert (Proposed "highRandomQuality") (Proposed "false") (M.union config c) + dummycfg <- liftIO dummyRemoteGitConfig + (c', u) <- R.setup remotetype ss mu mcreds weakc dummycfg + case mcu of + Nothing -> + configSet u c' + Just (Annex.SpecialRemote.ConfigFrom cu) -> do + setConfig (remoteAnnexConfig c' "config-uuid") (fromUUID cu) + configSet cu c' + when setdesc $ + whenM (isNothing . M.lookup u <$> uuidDescMap) $ + describeUUID u (toUUIDDesc name) + return name + +{- Returns the name of the git remote it created. If there's already a + - remote at the location, returns its name. -} +makeGitRemote :: String -> String -> Annex RemoteName +makeGitRemote basename location = makeRemote basename location $ \name -> + void $ inRepo $ Git.Command.runBool + [Param "remote", Param "add", Param name, Param location] + +{- If there's not already a remote at the location, adds it using the + - action, which is passed the name of the remote to make. + - + - Returns the name of the remote. -} +makeRemote :: String -> String -> (RemoteName -> Annex ()) -> Annex RemoteName +makeRemote basename location a = do + rs <- Annex.getGitRemotes + if not (any samelocation rs) + then do + let name = uniqueRemoteName basename 0 rs + a name + return name + else return basename + where + samelocation x = Git.repoLocation x == location + +{- Given a list of all remotes, generate an unused name for a new + - remote, adding a number if necessary. + - + - Ensures that the returned name is a legal git remote name. -} +uniqueRemoteName :: String -> Int -> [Git.Repo] -> RemoteName +uniqueRemoteName basename n rs + | null namecollision = name + | otherwise = uniqueRemoteName legalbasename (succ n) rs + where + namecollision = filter samename rs + samename x = Git.remoteName x == Just name + name + | n == 0 = legalbasename + | otherwise = legalbasename ++ show n + legalbasename = makeLegalName basename + +{- Finds a CredPair belonging to any Remote that is of a given type + - and matches some other criteria. + - + - This can be used as a default when another repository is being set up + - using the same service. + - + - A function must be provided that returns the CredPairStorage + - to use for a particular Remote's uuid. + -} +previouslyUsedCredPair + :: (UUID -> CredPairStorage) + -> RemoteType + -> (Remote -> Bool) + -> Annex (Maybe CredPair) +previouslyUsedCredPair getstorage remotetype criteria = + getM fromstorage + =<< filter criteria . filter sametype + <$> Remote.remoteList + where + sametype r = R.typename (R.remotetype r) == R.typename remotetype + fromstorage r = do + let storage = getstorage (R.uuid r) + getRemoteCredPair (R.config r) (R.gitconfig r) storage diff --git a/Assistant/MakeRepo.hs b/Assistant/MakeRepo.hs new file mode 100644 index 0000000000..d85eb45775 --- /dev/null +++ b/Assistant/MakeRepo.hs @@ -0,0 +1,98 @@ +{- making local repositories + - + - Copyright 2012-2014 Joey Hess + - + - Licensed under the GNU AGPL version 3 or higher. + -} + +{-# LANGUAGE OverloadedStrings #-} + +module Assistant.MakeRepo where + +import Assistant.WebApp.Common +import Annex.Init +import qualified Git.Construct +import qualified Git.Config +import qualified Git.Command +import qualified Git.Branch +import qualified Annex +import Annex.UUID +import Annex.AdjustedBranch +import Annex.Action +import Types.StandardGroups +import Logs.PreferredContent +import qualified Annex.Branch +import Utility.Process.Transcript +import Config + +{- Makes a new git repository. Or, if a git repository already + - exists, returns False. -} +makeRepo :: FilePath -> Bool -> IO Bool +makeRepo path bare = ifM (probeRepoExists path) + ( return False + , do + (transcript, ok) <- + processTranscript "git" (toCommand params) Nothing + unless ok $ + giveup $ "git init failed!\nOutput:\n" ++ transcript + return True + ) + where + baseparams = [Param "init", Param "--quiet"] + params + | bare = baseparams ++ [Param "--bare", File path] + | otherwise = baseparams ++ [File path] + +{- Runs an action in the git repository in the specified directory. -} +inDir :: FilePath -> Annex a -> IO a +inDir dir a = do + state <- Annex.new + =<< Git.Config.read + =<< Git.Construct.fromPath (toRawFilePath dir) + Annex.eval state $ a `finally` quiesce True + +{- Creates a new repository, and returns its UUID. -} +initRepo :: Bool -> Bool -> FilePath -> Maybe String -> Maybe StandardGroup -> IO UUID +initRepo True primary_assistant_repo dir desc mgroup = inDir dir $ do + initRepo' desc mgroup + {- Initialize the master branch, so things that expect + - to have it will work, before any files are added. -} + unlessM (fromMaybe False . Git.Config.isBare <$> gitRepo) $ do + cmode <- annexCommitMode <$> Annex.getGitConfig + void $ inRepo $ Git.Branch.commitCommand cmode + (Git.Branch.CommitQuiet True) + [ Param "--allow-empty" + , Param "-m" + , Param "created repository" + ] + {- Repositories directly managed by the assistant use + - an adjusted unlocked branch with annex.thin set. + - + - Automatic gc is disabled, as it can be slow. Instead, gc is done + - once a day. + -} + when primary_assistant_repo $ do + void $ enterAdjustedBranch (LinkAdjustment UnlockAdjustment) + setConfig (annexConfig "thin") (Git.Config.boolConfig True) + inRepo $ Git.Command.run + [Param "config", Param "gc.auto", Param "0"] + getUUID +{- Repo already exists, could be a non-git-annex repo though so + - still initialize it. -} +initRepo False _ dir desc mgroup = inDir dir $ do + initRepo' desc mgroup + getUUID + +initRepo' :: Maybe String -> Maybe StandardGroup -> Annex () +initRepo' desc mgroup = unlessM isInitialized $ do + initialize desc Nothing + u <- getUUID + maybe noop (defaultStandardGroup u) mgroup + {- Ensure branch gets committed right away so it is + - available for merging immediately. -} + Annex.Branch.commit =<< Annex.Branch.commitMessage + +{- Checks if a git repo exists at a location. -} +probeRepoExists :: FilePath -> IO Bool +probeRepoExists dir = isJust <$> + catchDefaultIO Nothing (Git.Construct.checkForRepo (encodeBS dir)) diff --git a/Assistant/Monad.hs b/Assistant/Monad.hs new file mode 100644 index 0000000000..dcdbeaf4dd --- /dev/null +++ b/Assistant/Monad.hs @@ -0,0 +1,144 @@ +{- git-annex assistant monad + - + - Copyright 2012 Joey Hess + - + - Licensed under the GNU AGPL version 3 or higher. + -} + +{-# LANGUAGE GeneralizedNewtypeDeriving, MultiParamTypeClasses #-} +{-# LANGUAGE PackageImports #-} + +module Assistant.Monad ( + Assistant, + AssistantData(..), + newAssistantData, + runAssistant, + getAssistant, + LiftAnnex, + liftAnnex, + (<~>), + (<<~), + asIO, + asIO1, + asIO2, + ThreadName, + debug, +) where + +import "mtl" Control.Monad.Reader +import qualified Control.Monad.Fail as Fail + +import Annex.Common hiding (debug) +import Assistant.Types.ThreadedMonad +import Assistant.Types.DaemonStatus +import Assistant.Types.ScanRemotes +import Assistant.Types.TransferQueue +import Assistant.Types.TransferSlots +import Assistant.Types.Pushes +import Assistant.Types.BranchChange +import Assistant.Types.Commits +import Assistant.Types.Changes +import Assistant.Types.RepoProblem +import Assistant.Types.ThreadName +import Assistant.Types.RemoteControl +import Assistant.Types.CredPairCache +import qualified Utility.Debug as Debug + +newtype Assistant a = Assistant { mkAssistant :: ReaderT AssistantData IO a } + deriving ( + Monad, + MonadIO, + MonadReader AssistantData, + MonadCatch, + MonadThrow, + MonadMask, + Fail.MonadFail, + Functor, + Applicative + ) + +data AssistantData = AssistantData + { threadName :: ThreadName + , threadState :: ThreadState + , daemonStatusHandle :: DaemonStatusHandle + , scanRemoteMap :: ScanRemoteMap + , transferQueue :: TransferQueue + , transferSlots :: TransferSlots + , failedPushMap :: FailedPushMap + , failedExportMap :: FailedPushMap + , commitChan :: CommitChan + , exportCommitChan :: CommitChan + , changePool :: ChangePool + , repoProblemChan :: RepoProblemChan + , branchChangeHandle :: BranchChangeHandle + , remoteControl :: RemoteControl + , credPairCache :: CredPairCache + } + +newAssistantData :: ThreadState -> DaemonStatusHandle -> IO AssistantData +newAssistantData st dstatus = AssistantData + <$> pure (ThreadName "main") + <*> pure st + <*> pure dstatus + <*> newScanRemoteMap + <*> newTransferQueue + <*> newTransferSlots + <*> newFailedPushMap + <*> newFailedPushMap + <*> newCommitChan + <*> newCommitChan + <*> newChangePool + <*> newRepoProblemChan + <*> newBranchChangeHandle + <*> newRemoteControl + <*> newCredPairCache + +runAssistant :: AssistantData -> Assistant a -> IO a +runAssistant d a = runReaderT (mkAssistant a) d + +getAssistant :: (AssistantData -> a) -> Assistant a +getAssistant = reader + +{- Using a type class for lifting into the annex monad allows + - easily lifting to it from multiple different monads. -} +class LiftAnnex m where + liftAnnex :: Annex a -> m a + +{- Runs an action in the git-annex monad. Note that the same monad state + - is shared among all assistant threads, so only one of these can run at + - a time. Therefore, long-duration actions should be avoided. -} +instance LiftAnnex Assistant where + liftAnnex a = do + st <- reader threadState + liftIO $ runThreadState st a + +{- Runs an IO action, passing it an IO action that runs an Assistant action. -} +(<~>) :: (IO a -> IO b) -> Assistant a -> Assistant b +io <~> a = do + d <- reader id + liftIO $ io $ runAssistant d a + +{- Creates an IO action that will run an Assistant action when run. -} +asIO :: Assistant a -> Assistant (IO a) +asIO a = do + d <- reader id + return $ runAssistant d a + +asIO1 :: (a -> Assistant b) -> Assistant (a -> IO b) +asIO1 a = do + d <- reader id + return $ \v -> runAssistant d $ a v + +asIO2 :: (a -> b -> Assistant c) -> Assistant (a -> b -> IO c) +asIO2 a = do + d <- reader id + return $ \v1 v2 -> runAssistant d (a v1 v2) + +{- Runs an IO action on a selected field of the AssistantData. -} +(<<~) :: (a -> IO b) -> (AssistantData -> a) -> Assistant b +io <<~ v = reader v >>= liftIO . io + +debug :: [String] -> Assistant () +debug ws = do + ThreadName name <- getAssistant threadName + liftIO $ Debug.debug (Debug.DebugSource (encodeBS name)) (unwords ws) diff --git a/Assistant/NamedThread.hs b/Assistant/NamedThread.hs new file mode 100644 index 0000000000..7abe274d58 --- /dev/null +++ b/Assistant/NamedThread.hs @@ -0,0 +1,99 @@ +{- git-annex assistant named threads. + - + - Copyright 2012 Joey Hess + - + - Licensed under the GNU AGPL version 3 or higher. + -} + +{-# LANGUAGE CPP #-} + +module Assistant.NamedThread where + +import Annex.Common +import Assistant.Types.NamedThread +import Assistant.Types.ThreadName +import Assistant.Types.DaemonStatus +import Assistant.Types.UrlRenderer +import Assistant.DaemonStatus +import Assistant.Monad +import Utility.NotificationBroadcaster + +import Control.Concurrent +import Control.Concurrent.Async +import qualified Data.Map.Strict as M +import qualified Control.Exception as E + +#ifdef WITH_WEBAPP +import Assistant.WebApp.Types +import Assistant.Types.Alert +import Assistant.Alert +import qualified Data.Text as T +#endif + +{- Starts a named thread, if it's not already running. + - + - Named threads are run by a management thread, so if they crash + - an alert is displayed, allowing the thread to be restarted. -} +startNamedThread :: UrlRenderer -> NamedThread -> Assistant () +startNamedThread urlrenderer (NamedThread afterstartupsanitycheck name a) = + M.lookup name . startedThreads <$> getDaemonStatus >>= \case + Nothing -> start + Just (aid, _) -> do + r <- liftIO (E.try (poll aid) :: IO (Either E.SomeException (Maybe (Either E.SomeException ())))) + case r of + Right Nothing -> noop + _ -> start + where + start + | afterstartupsanitycheck = do + status <- getDaemonStatus + h <- liftIO $ newNotificationHandle False $ + startupSanityCheckNotifier status + startwith $ runmanaged $ + liftIO $ waitNotification h + | otherwise = startwith $ runmanaged noop + startwith runner = do + d <- getAssistant id + aid <- liftIO $ runner $ d { threadName = name } + restart <- asIO $ startNamedThread urlrenderer (NamedThread False name a) + modifyDaemonStatus_ $ \s -> s + { startedThreads = M.insert name (aid, restart) (startedThreads s) } + runmanaged first d = do + aid <- async $ runAssistant d $ do + void first + a + void $ forkIO $ manager d aid + return aid + manager d aid = (E.try (wait aid) :: IO (Either E.SomeException ())) >>= \case + Right _ -> noop + Left e -> do + let msg = unwords + [ fromThreadName $ threadName d + , "crashed:", show e + ] + hPutStrLn stderr msg +#ifdef WITH_WEBAPP + button <- runAssistant d $ mkAlertButton True + (T.pack "Restart Thread") + urlrenderer + (RestartThreadR name) + runAssistant d $ void $ addAlert $ + (warningAlert (fromThreadName name) msg) + { alertButtons = [button] } +#endif + +namedThreadId :: NamedThread -> Assistant (Maybe ThreadId) +namedThreadId (NamedThread _ name _) = do + m <- startedThreads <$> getDaemonStatus + return $ asyncThreadId . fst <$> M.lookup name m + +{- Waits for all named threads that have been started to finish. + - + - Note that if a named thread crashes, it will probably + - cause this to crash as well. Also, named threads that are started + - after this is called will not be waited on. -} +waitNamedThreads :: Assistant () +waitNamedThreads = do + m <- startedThreads <$> getDaemonStatus + liftIO $ mapM_ (wait . fst) $ M.elems m + diff --git a/Assistant/Pairing.hs b/Assistant/Pairing.hs new file mode 100644 index 0000000000..aa700f5998 --- /dev/null +++ b/Assistant/Pairing.hs @@ -0,0 +1,97 @@ +{- git-annex assistant repo pairing, core data types + - + - Copyright 2012 Joey Hess + - + - Licensed under the GNU AGPL version 3 or higher. + -} + +module Assistant.Pairing where + +import Annex.Common +import Utility.Verifiable +import Assistant.Ssh + +import Control.Concurrent +import Network.Socket +import Data.Char +import qualified Data.Text as T + +data PairStage + {- "I'll pair with anybody who shares the secret that can be used + - to verify this request." -} + = PairReq + {- "I've verified your request, and you can verify this to see + - that I know the secret. I set up your ssh key already. + - Here's mine for you to set up." -} + | PairAck + {- "I saw your PairAck; you can stop sending them." -} + | PairDone + deriving (Eq, Read, Show, Ord, Enum) + +newtype PairMsg = PairMsg (Verifiable (PairStage, PairData, SomeAddr)) + deriving (Eq, Read, Show) + +verifiedPairMsg :: PairMsg -> PairingInProgress -> Bool +verifiedPairMsg (PairMsg m) pip = verify m $ inProgressSecret pip + +fromPairMsg :: PairMsg -> Verifiable (PairStage, PairData, SomeAddr) +fromPairMsg (PairMsg m) = m + +pairMsgStage :: PairMsg -> PairStage +pairMsgStage (PairMsg (Verifiable (s, _, _) _)) = s + +pairMsgData :: PairMsg -> PairData +pairMsgData (PairMsg (Verifiable (_, d, _) _)) = d + +pairMsgAddr :: PairMsg -> SomeAddr +pairMsgAddr (PairMsg (Verifiable (_, _, a) _)) = a + +data PairData = PairData + -- uname -n output, not a full domain name + { remoteHostName :: Maybe HostName + , remoteUserName :: UserName + , remoteDirectory :: FilePath + , remoteSshPubKey :: SshPubKey + , pairUUID :: UUID + } + deriving (Eq, Read, Show) + +checkSane :: PairData -> Bool +checkSane p = all (not . any isControl) + [ fromMaybe "" (remoteHostName p) + , remoteUserName p + , remoteDirectory p + , remoteSshPubKey p + , fromUUID (pairUUID p) + ] + +type UserName = String + +{- A pairing that is in progress has a secret, a thread that is + - broadcasting pairing messages, and a SshKeyPair that has not yet been + - set up on disk. -} +data PairingInProgress = PairingInProgress + { inProgressSecret :: Secret + , inProgressThreadId :: Maybe ThreadId + , inProgressSshKeyPair :: SshKeyPair + , inProgressPairData :: PairData + , inProgressPairStage :: PairStage + } + deriving (Show) + +data AddrClass = IPv4AddrClass | IPv6AddrClass + +data SomeAddr = IPv4Addr HostAddress + | IPv6Addr HostAddress6 + deriving (Ord, Eq, Read, Show) + +{- This contains the whole secret, just lightly obfuscated to make it not + - too obvious. It's only displayed in the user's web browser. -} +newtype SecretReminder = SecretReminder [Int] + deriving (Show, Eq, Ord, Read) + +toSecretReminder :: T.Text -> SecretReminder +toSecretReminder = SecretReminder . map ord . T.unpack + +fromSecretReminder :: SecretReminder -> T.Text +fromSecretReminder (SecretReminder s) = T.pack $ map chr s diff --git a/Assistant/Pairing/MakeRemote.hs b/Assistant/Pairing/MakeRemote.hs new file mode 100644 index 0000000000..69402e2e3d --- /dev/null +++ b/Assistant/Pairing/MakeRemote.hs @@ -0,0 +1,98 @@ +{- git-annex assistant pairing remote creation + - + - Copyright 2012 Joey Hess + - + - Licensed under the GNU AGPL version 3 or higher. + -} + +module Assistant.Pairing.MakeRemote where + +import Assistant.Common +import Assistant.Ssh +import Assistant.Pairing +import Assistant.Pairing.Network +import Assistant.MakeRemote +import Assistant.Sync +import Config.Cost +import Config +import qualified Types.Remote as Remote + +import Network.Socket +import qualified Data.Text as T + +{- Authorized keys are set up before pairing is complete, so that the other + - side can immediately begin syncing. -} +setupAuthorizedKeys :: PairMsg -> FilePath -> IO () +setupAuthorizedKeys msg repodir = case validateSshPubKey $ remoteSshPubKey $ pairMsgData msg of + Left err -> giveup err + Right pubkey -> do + absdir <- fromRawFilePath <$> absPath (toRawFilePath repodir) + unlessM (liftIO $ addAuthorizedKeys True absdir pubkey) $ + giveup "failed setting up ssh authorized keys" + +{- When local pairing is complete, this is used to set up the remote for + - the host we paired with. -} +finishedLocalPairing :: PairMsg -> SshKeyPair -> Assistant () +finishedLocalPairing msg keypair = do + sshdata <- liftIO $ installSshKeyPair keypair =<< pairMsgToSshData msg + {- Ensure that we know the ssh host key for the host we paired with. + - If we don't, ssh over to get it. -} + liftIO $ unlessM (knownHost $ sshHostName sshdata) $ + void $ sshTranscript + [ sshOpt "StrictHostKeyChecking" "no" + , sshOpt "NumberOfPasswordPrompts" "0" + , "-n" + ] + (genSshHost (sshHostName sshdata) (sshUserName sshdata)) + ("git-annex-shell -c configlist " ++ T.unpack (sshDirectory sshdata)) + Nothing + r <- liftAnnex $ addRemote $ makeSshRemote sshdata + repo <- liftAnnex $ Remote.getRepo r + liftAnnex $ setRemoteCost repo semiExpensiveRemoteCost + syncRemote r + +{- Mostly a straightforward conversion. Except: + - * Determine the best hostname to use to contact the host. + - * Strip leading ~/ from the directory name. + -} +pairMsgToSshData :: PairMsg -> IO SshData +pairMsgToSshData msg = do + let d = pairMsgData msg + hostname <- liftIO $ bestHostName msg + let dir = case remoteDirectory d of + ('~':'/':v) -> v + v -> v + return SshData + { sshHostName = T.pack hostname + , sshUserName = Just (T.pack $ remoteUserName d) + , sshDirectory = T.pack dir + , sshRepoName = genSshRepoName hostname dir + , sshPort = 22 + , needsPubKey = True + , sshCapabilities = [GitAnnexShellCapable, GitCapable, RsyncCapable] + , sshRepoUrl = Nothing + } + +{- Finds the best hostname to use for the host that sent the PairMsg. + - + - If remoteHostName is set, tries to use a .local address based on it. + - That's the most robust, if this system supports .local. + - Otherwise, looks up the hostname in the DNS for the remoteAddress, + - if any. May fall back to remoteAddress if there's no DNS. Ugh. -} +bestHostName :: PairMsg -> IO HostName +bestHostName msg = case remoteHostName $ pairMsgData msg of + Just h -> do + let localname = h ++ ".local" + addrs <- catchDefaultIO [] $ + getAddrInfo Nothing (Just localname) Nothing + maybe fallback (const $ return localname) (headMaybe addrs) + Nothing -> fallback + where + fallback = do + let a = pairMsgAddr msg + let sockaddr = case a of + IPv4Addr addr -> SockAddrInet (fromInteger 0) addr + IPv6Addr addr -> SockAddrInet6 (fromInteger 0) 0 addr 0 + fromMaybe (showAddr a) + <$> catchDefaultIO Nothing + (fst <$> getNameInfo [] True False sockaddr) diff --git a/Assistant/Pairing/Network.hs b/Assistant/Pairing/Network.hs new file mode 100644 index 0000000000..62a4ea02e8 --- /dev/null +++ b/Assistant/Pairing/Network.hs @@ -0,0 +1,132 @@ +{- git-annex assistant pairing network code + - + - All network traffic is sent over multicast UDP. For reliability, + - each message is repeated until acknowledged. This is done using a + - thread, that gets stopped before the next message is sent. + - + - Copyright 2012 Joey Hess + - + - Licensed under the GNU AGPL version 3 or higher. + -} + +module Assistant.Pairing.Network where + +import Assistant.Common +import Assistant.Pairing +import Assistant.DaemonStatus +import Utility.ThreadScheduler +import Utility.Verifiable + +import Network.Multicast +import Network.Info +import Network.Socket +import qualified Network.Socket.ByteString as B +import qualified Data.ByteString.UTF8 as BU8 +import qualified Data.Map as M +import Control.Concurrent + +{- This is an arbitrary port in the dynamic port range, that could + - conceivably be used for some other broadcast messages. + - If so, hope they ignore the garbage from us; we'll certainly + - ignore garbage from them. Wild wild west. -} +pairingPort :: PortNumber +pairingPort = 55556 + +{- Goal: Reach all hosts on the same network segment. + - Method: Use same address that avahi uses. Other broadcast addresses seem + - to not be let through some routers. -} +multicastAddress :: AddrClass -> HostName +multicastAddress IPv4AddrClass = "224.0.0.251" +multicastAddress IPv6AddrClass = "ff02::fb" + +{- Multicasts a message repeatedly on all interfaces, with a 2 second + - delay between each transmission. The message is repeated forever + - unless a number of repeats is specified. + - + - The remoteHostAddress is set to the interface's IP address. + - + - Note that new sockets are opened each time. This is hardly efficient, + - but it allows new network interfaces to be used as they come up. + - On the other hand, the expensive DNS lookups are cached. + -} +multicastPairMsg :: Maybe Int -> Secret -> PairData -> PairStage -> IO () +multicastPairMsg repeats secret pairdata stage = go M.empty repeats + where + go _ (Just 0) = noop + go cache n = do + addrs <- activeNetworkAddresses + let cache' = updatecache cache addrs + mapM_ (sendinterface cache') addrs + threadDelaySeconds (Seconds 2) + go cache' $ pred <$> n + {- The multicast library currently chokes on ipv6 addresses. -} + sendinterface _ (IPv6Addr _) = noop + sendinterface cache i = void $ tryIO $ + withSocketsDo $ bracket setup cleanup use + where + setup = multicastSender (multicastAddress IPv4AddrClass) pairingPort + cleanup (sock, _) = close sock -- FIXME does not work + use (sock, addr) = do + setInterface sock (showAddr i) + maybe noop + (\s -> void $ B.sendTo sock (BU8.fromString s) addr) + (M.lookup i cache) + updatecache cache [] = cache + updatecache cache (i:is) + | M.member i cache = updatecache cache is + | otherwise = updatecache (M.insert i (show $ mkmsg i) cache) is + mkmsg addr = PairMsg $ + mkVerifiable (stage, pairdata, addr) secret + +startSending :: PairingInProgress -> PairStage -> (PairStage -> IO ()) -> Assistant () +startSending pip stage sender = do + a <- asIO start + void $ liftIO $ forkIO a + where + start = do + tid <- liftIO myThreadId + let pip' = pip { inProgressPairStage = stage, inProgressThreadId = Just tid } + oldpip <- modifyDaemonStatus $ + \s -> (s { pairingInProgress = Just pip' }, pairingInProgress s) + maybe noop stopold oldpip + liftIO $ sender stage + stopold = maybe noop (liftIO . killThread) . inProgressThreadId + +stopSending :: PairingInProgress -> Assistant () +stopSending pip = do + maybe noop (liftIO . killThread) $ inProgressThreadId pip + modifyDaemonStatus_ $ \s -> s { pairingInProgress = Nothing } + +class ToSomeAddr a where + toSomeAddr :: a -> SomeAddr + +instance ToSomeAddr IPv4 where + toSomeAddr (IPv4 a) = IPv4Addr a + +instance ToSomeAddr IPv6 where + toSomeAddr (IPv6 o1 o2 o3 o4) = IPv6Addr (o1, o2, o3, o4) + +showAddr :: SomeAddr -> HostName +showAddr (IPv4Addr a) = show $ IPv4 a +showAddr (IPv6Addr (o1, o2, o3, o4)) = show $ IPv6 o1 o2 o3 o4 + +activeNetworkAddresses :: IO [SomeAddr] +activeNetworkAddresses = filter (not . all (`elem` "0.:") . showAddr) + . concatMap (\ni -> [toSomeAddr $ ipv4 ni, toSomeAddr $ ipv6 ni]) + <$> getNetworkInterfaces + +{- A human-visible description of the repository being paired with. + - Note that the repository's description is not shown to the user, because + - it could be something like "my repo", which is confusing when pairing + - with someone else's repo. However, this has the same format as the + - default description of a repo. -} +pairRepo :: PairMsg -> String +pairRepo msg = concat + [ remoteUserName d + , "@" + , fromMaybe (showAddr $ pairMsgAddr msg) (remoteHostName d) + , ":" + , remoteDirectory d + ] + where + d = pairMsgData msg diff --git a/Assistant/Pushes.hs b/Assistant/Pushes.hs new file mode 100644 index 0000000000..f1fccb5d66 --- /dev/null +++ b/Assistant/Pushes.hs @@ -0,0 +1,37 @@ +{- git-annex assistant push tracking + - + - Copyright 2012 Joey Hess + - + - Licensed under the GNU AGPL version 3 or higher. + -} + +module Assistant.Pushes where + +import Assistant.Common +import Assistant.Types.Pushes + +import Control.Concurrent.STM +import Data.Time.Clock +import qualified Data.Map as M + +{- Blocks until there are failed pushes. + - Returns Remotes whose pushes failed a given time duration or more ago. + - (This may be an empty list.) -} +getFailedPushesBefore :: NominalDiffTime -> FailedPushMap -> Assistant [Remote] +getFailedPushesBefore duration v = liftIO $ do + m <- atomically $ readTMVar v + now <- getCurrentTime + return $ M.keys $ M.filter (not . toorecent now) m + where + toorecent now time = now `diffUTCTime` time < duration + +{- Modifies the map. -} +changeFailedPushMap :: FailedPushMap -> (PushMap -> PushMap) -> Assistant () +changeFailedPushMap v f = liftIO $ atomically $ + store . f . fromMaybe M.empty =<< tryTakeTMVar v + where + {- tryTakeTMVar empties the TMVar; refill it only if + - the modified map is not itself empty -} + store m + | m == M.empty = noop + | otherwise = putTMVar v $! m diff --git a/Assistant/RemoteControl.hs b/Assistant/RemoteControl.hs new file mode 100644 index 0000000000..d61b3e16d3 --- /dev/null +++ b/Assistant/RemoteControl.hs @@ -0,0 +1,21 @@ +{- git-annex assistant RemoteDaemon control + - + - Copyright 2014 Joey Hess + - + - Licensed under the GNU AGPL version 3 or higher. + -} + +module Assistant.RemoteControl ( + sendRemoteControl, + RemoteDaemon.Consumed(..) +) where + +import Assistant.Common +import qualified RemoteDaemon.Types as RemoteDaemon + +import Control.Concurrent + +sendRemoteControl :: RemoteDaemon.Consumed -> Assistant () +sendRemoteControl msg = do + clicker <- getAssistant remoteControl + liftIO $ writeChan clicker msg diff --git a/Assistant/Repair.hs b/Assistant/Repair.hs new file mode 100644 index 0000000000..02ebab3cae --- /dev/null +++ b/Assistant/Repair.hs @@ -0,0 +1,162 @@ +{- git-annex assistant repository repair + - + - Copyright 2013 Joey Hess + - + - Licensed under the GNU AGPL version 3 or higher. + -} + +{-# LANGUAGE CPP #-} + +module Assistant.Repair where + +import Assistant.Common +import Command.Repair (repairAnnexBranch, trackingOrSyncBranch) +import Git.Fsck (FsckResults, foundBroken) +import Git.Repair (runRepairOf) +import qualified Git +import qualified Remote +import qualified Types.Remote as Remote +import Logs.FsckResults +import Annex.UUID +import Utility.Batch +import Annex.Path +import Assistant.Sync +import Assistant.Alert +import Assistant.DaemonStatus +import Assistant.Types.UrlRenderer +#ifdef WITH_WEBAPP +import Assistant.WebApp.Types +import qualified Data.Text as T +#endif +import qualified Utility.Lsof as Lsof +import Utility.ThreadScheduler +import qualified Utility.RawFilePath as R + +import Control.Concurrent.Async + +{- When the FsckResults require a repair, tries to do a non-destructive + - repair. If that fails, pops up an alert. -} +repairWhenNecessary :: UrlRenderer -> UUID -> Maybe Remote -> FsckResults -> Assistant Bool +repairWhenNecessary urlrenderer u mrmt fsckresults + | foundBroken fsckresults = do + liftAnnex $ writeFsckResults u fsckresults + repodesc <- liftAnnex $ Remote.prettyUUID u + ok <- alertWhile (repairingAlert repodesc) + (runRepair u mrmt False) +#ifdef WITH_WEBAPP + unless ok $ do + button <- mkAlertButton True (T.pack "Click Here") urlrenderer $ + RepairRepositoryR u + void $ addAlert $ brokenRepositoryAlert [button] +#endif + return ok + | otherwise = return False + +runRepair :: UUID -> Maybe Remote -> Bool -> Assistant Bool +runRepair u mrmt destructiverepair = do + fsckresults <- liftAnnex $ readFsckResults u + myu <- liftAnnex getUUID + ok <- if u == myu + then localrepair fsckresults + else remoterepair fsckresults + liftAnnex $ clearFsckResults u + debug [ "Repaired", show u, show ok ] + + return ok + where + localrepair fsckresults = do + -- Stop the watcher from running while running repairs. + changeSyncable Nothing False + + -- This intentionally runs the repair inside the Annex + -- monad, which is not strictly necessary, but keeps + -- other threads that might be trying to use the Annex + -- from running until it completes. + ok <- liftAnnex $ repair fsckresults Nothing + + -- Run a background fast fsck if a destructive repair had + -- to be done, to ensure that the git-annex branch + -- reflects the current state of the repo. + when destructiverepair $ + backgroundfsck [ Param "--fast" ] + + -- Start the watcher running again. This also triggers it to + -- do a startup scan, which is especially important if the + -- git repo repair removed files from the index file. Those + -- files will be seen as new, and re-added to the repository. + when (ok || destructiverepair) $ + changeSyncable Nothing True + + return ok + + remoterepair fsckresults = case Remote.repairRepo =<< mrmt of + Nothing -> return False + Just mkrepair -> do + thisrepopath <- liftIO . absPath + =<< liftAnnex (fromRepo Git.repoPath) + a <- liftAnnex $ mkrepair $ + repair fsckresults (Just (fromRawFilePath thisrepopath)) + liftIO $ catchBoolIO a + + repair fsckresults referencerepo = do + (ok, modifiedbranches) <- inRepo $ + runRepairOf fsckresults trackingOrSyncBranch destructiverepair referencerepo + when destructiverepair $ + repairAnnexBranch modifiedbranches + return ok + + backgroundfsck params = liftIO $ void $ async $ do + program <- programPath + batchCommand program (Param "fsck" : params) + +{- Detect when a git lock file exists and has no git process currently + - writing to it. This strongly suggests it is a stale lock file. + - + - However, this could be on a network filesystem. Which is not very safe + - anyway (the assistant relies on being able to check when files have + - no writers to know when to commit them). Also, a few lock-file-ish + - things used by git are not kept open, particularly MERGE_HEAD. + - + - So, just in case, when the lock file appears stale, we delay for one + - minute, and check its size. If the size changed, delay for another + - minute, and so on. This will at work to detect when another machine + - is writing out a new index file, since git does so by writing the + - new content to index.lock. + - + - Returns true if locks were cleaned up. + -} +repairStaleGitLocks :: Git.Repo -> Assistant Bool +repairStaleGitLocks r = do + lockfiles <- liftIO $ filter islock + <$> emptyWhenDoesNotExist (findgitfiles r) + repairStaleLocks lockfiles + return $ not $ null lockfiles + where + findgitfiles = dirContentsRecursiveSkipping (== dropTrailingPathSeparator (fromRawFilePath annexDir)) True . fromRawFilePath . Git.localGitDir + islock f + | "gc.pid" `isInfixOf` f = False + | ".lock" `isSuffixOf` f = True + | takeFileName f == "MERGE_HEAD" = True + | otherwise = False + +repairStaleLocks :: [FilePath] -> Assistant () +repairStaleLocks lockfiles = go =<< getsizes + where + getsize lf = catchMaybeIO $ (\s -> (lf, s)) + <$> getFileSize (toRawFilePath lf) + getsizes = liftIO $ catMaybes <$> mapM getsize lockfiles + go [] = return () + go l = ifM (liftIO $ null <$> Lsof.query ("--" : map fst l)) + ( do + waitforit "to check stale git lock file" + l' <- getsizes + if l' == l + then liftIO $ mapM_ (removeWhenExistsWith R.removeLink . toRawFilePath . fst) l + else go l' + , do + waitforit "for git lock file writer" + go =<< getsizes + ) + waitforit why = do + debug ["Waiting for 60 seconds", why] + liftIO $ threadDelaySeconds $ Seconds 60 diff --git a/Assistant/RepoProblem.hs b/Assistant/RepoProblem.hs new file mode 100644 index 0000000000..cf7318b7e6 --- /dev/null +++ b/Assistant/RepoProblem.hs @@ -0,0 +1,34 @@ +{- git-annex assistant remote problem handling + - + - Copyright 2013 Joey Hess + - + - Licensed under the GNU AGPL version 3 or higher. + -} + +module Assistant.RepoProblem where + +import Assistant.Common +import Assistant.Types.RepoProblem +import Utility.TList + +import Control.Concurrent.STM + +{- Gets all repositories that have problems. Blocks until there is at + - least one. -} +getRepoProblems :: Assistant [RepoProblem] +getRepoProblems = nubBy sameRepoProblem + <$> (atomically . getTList) <<~ repoProblemChan + +{- Indicates that there was a problem with a repository, and the problem + - appears to not be a transient (eg network connection) problem. + - + - If the problem is able to be repaired, the passed action will be run. + - (However, if multiple problems are reported with a single repository, + - only a single action will be run.) + -} +repoHasProblem :: UUID -> Assistant () -> Assistant () +repoHasProblem u afterrepair = do + rp <- RepoProblem + <$> pure u + <*> asIO afterrepair + (atomically . flip consTList rp) <<~ repoProblemChan diff --git a/Assistant/Restart.hs b/Assistant/Restart.hs new file mode 100644 index 0000000000..65b6fe64aa --- /dev/null +++ b/Assistant/Restart.hs @@ -0,0 +1,119 @@ +{- git-annex assistant restarting + - + - Copyright 2013 Joey Hess + - + - Licensed under the GNU AGPL version 3 or higher. + -} + +{-# LANGUAGE CPP #-} + +module Assistant.Restart where + +import Assistant.Common +import Assistant.Threads.Watcher +import Assistant.DaemonStatus +import Assistant.NamedThread +import Utility.ThreadScheduler +import Utility.NotificationBroadcaster +import Utility.Url +import Utility.Url.Parse +import Utility.PID +import qualified Utility.RawFilePath as R +import qualified Git.Construct +import qualified Git.Config +import qualified Annex +import qualified Git +import Annex.Path + +import Control.Concurrent +#ifndef mingw32_HOST_OS +import System.Posix (signalProcess, sigTERM) +#else +import System.Win32.Process (terminateProcessById) +#endif +import Network.URI + +{- Before the assistant can be restarted, have to remove our + - gitAnnexUrlFile and our gitAnnexPidFile. Pausing the watcher is also + - a good idea, to avoid fighting when two assistants are running in the + - same repo. + -} +prepRestart :: Assistant () +prepRestart = do + liftIO . maybe noop (`throwTo` PauseWatcher) =<< namedThreadId watchThread + liftIO . removeWhenExistsWith R.removeLink =<< liftAnnex (fromRepo gitAnnexUrlFile) + liftIO . removeWhenExistsWith R.removeLink =<< liftAnnex (fromRepo gitAnnexPidFile) + +{- To finish a restart, send a global redirect to the new url + - to any web browsers that are displaying the webapp. + - + - Wait for browser to update before terminating this process. -} +postRestart :: URLString -> Assistant () +postRestart url = do + modifyDaemonStatus_ $ \status -> status { globalRedirUrl = Just url } + liftIO . sendNotification . globalRedirNotifier =<< getDaemonStatus + void $ liftIO $ forkIO $ do + threadDelaySeconds (Seconds 120) + terminateSelf + +terminateSelf :: IO () +terminateSelf = +#ifndef mingw32_HOST_OS + signalProcess sigTERM =<< getPID +#else + terminateProcessById =<< getPID +#endif + +runRestart :: Assistant URLString +runRestart = liftIO . newAssistantUrl + =<< liftAnnex (Git.repoLocation <$> Annex.gitRepo) + +{- Starts up the assistant in the repository, and waits for it to create + - a gitAnnexUrlFile. Waits for the assistant to be up and listening for + - connections by testing the url. -} +newAssistantUrl :: FilePath -> IO URLString +newAssistantUrl repo = do + startAssistant repo + geturl + where + geturl = do + r <- Git.Config.read =<< Git.Construct.fromPath (toRawFilePath repo) + waiturl $ fromRawFilePath $ gitAnnexUrlFile r + waiturl urlfile = do + v <- tryIO $ readFile urlfile + case v of + Left _ -> delayed $ waiturl urlfile + Right url -> ifM (assistantListening url) + ( return url + , delayed $ waiturl urlfile + ) + delayed a = do + threadDelay 100000 -- 1/10th of a second + a + +{- Checks if the assistant is listening on an url. + - + - Always checks http, because https with self-signed cert is problematic. + - warp-tls listens to http, in order to show an error page, so this works. + -} +assistantListening :: URLString -> IO Bool +assistantListening url = catchBoolIO $ do + uo <- defUrlOptions + (== Right True) <$> exists url' uo + where + url' = case parseURIPortable url of + Nothing -> url + Just uri -> show $ uri + { uriScheme = "http:" + } + +{- Does not wait for assistant to be listening for web connections. + - + - On windows, the assistant does not daemonize, which is why the forkIO is + - done. + -} +startAssistant :: FilePath -> IO () +startAssistant repo = void $ forkIO $ do + program <- programPath + let p = (proc program ["assistant"]) { cwd = Just repo } + withCreateProcess p $ \_ _ _ pid -> void $ checkSuccessProcess pid diff --git a/Assistant/ScanRemotes.hs b/Assistant/ScanRemotes.hs new file mode 100644 index 0000000000..7cecc62cd6 --- /dev/null +++ b/Assistant/ScanRemotes.hs @@ -0,0 +1,41 @@ +{- git-annex assistant remotes needing scanning + - + - Copyright 2012 Joey Hess + - + - Licensed under the GNU AGPL version 3 or higher. + -} + +module Assistant.ScanRemotes where + +import Assistant.Common +import Assistant.Types.ScanRemotes +import qualified Types.Remote as Remote + +import Data.Function +import Control.Concurrent.STM +import qualified Data.Map as M + +{- Blocks until there is a remote or remotes that need to be scanned. + - + - The list has higher priority remotes listed first. -} +getScanRemote :: Assistant [(Remote, ScanInfo)] +getScanRemote = do + v <- getAssistant scanRemoteMap + liftIO $ atomically $ + reverse . sortBy (compare `on` scanPriority . snd) . M.toList + <$> takeTMVar v + +{- Adds new remotes that need scanning. -} +addScanRemotes :: Bool -> [Remote] -> Assistant () +addScanRemotes _ [] = noop +addScanRemotes full rs = do + v <- getAssistant scanRemoteMap + liftIO $ atomically $ do + m <- fromMaybe M.empty <$> tryTakeTMVar v + putTMVar v $ M.unionWith merge (M.fromList $ zip rs (map info rs)) m + where + info r = ScanInfo (-1 * Remote.cost r) full + merge x y = ScanInfo + { scanPriority = max (scanPriority x) (scanPriority y) + , fullScan = fullScan x || fullScan y + } diff --git a/Assistant/Ssh.hs b/Assistant/Ssh.hs new file mode 100644 index 0000000000..3f472a5332 --- /dev/null +++ b/Assistant/Ssh.hs @@ -0,0 +1,412 @@ +{- git-annex assistant ssh utilities + - + - Copyright 2012-2013 Joey Hess + - + - Licensed under the GNU AGPL version 3 or higher. + -} + +module Assistant.Ssh where + +import Annex.Common +import Utility.Tmp +import Utility.Tmp.Dir +import Utility.Shell +import Utility.Rsync +import Utility.FileMode +import Utility.SshConfig +import Git.Remote +import Utility.SshHost +import Utility.Process.Transcript + +import Data.Text (Text) +import qualified Data.Text as T +import Data.Char +import Network.URI + +data SshData = SshData + { sshHostName :: Text + , sshUserName :: Maybe Text + , sshDirectory :: Text + , sshRepoName :: String + , sshPort :: Int + , needsPubKey :: Bool + , sshCapabilities :: [SshServerCapability] + , sshRepoUrl :: Maybe String + } + deriving (Read, Show, Eq) + +data SshServerCapability + = GitAnnexShellCapable -- server has git-annex-shell installed + | GitCapable -- server has git installed + | RsyncCapable -- server supports raw rsync access (not only via git-annex-shell) + | PushCapable -- repo on server is set up already, and ready to accept pushes + deriving (Read, Show, Eq) + +hasCapability :: SshData -> SshServerCapability -> Bool +hasCapability d c = c `elem` sshCapabilities d + +addCapability :: SshData -> SshServerCapability -> SshData +addCapability d c = d { sshCapabilities = c : sshCapabilities d } + +onlyCapability :: SshData -> SshServerCapability -> Bool +onlyCapability d c = all (== c) (sshCapabilities d) + +type SshPubKey = String +type SshPrivKey = String + +data SshKeyPair = SshKeyPair + { sshPubKey :: SshPubKey + , sshPrivKey :: SshPrivKey + } + +instance Show SshKeyPair where + show = sshPubKey + +{- ssh -ofoo=bar command-line option -} +sshOpt :: String -> String -> String +sshOpt k v = concat ["-o", k, "=", v] + +{- user@host or host -} +genSshHost :: Text -> Maybe Text -> SshHost +genSshHost host user = either giveup id $ mkSshHost $ + maybe "" (\v -> T.unpack v ++ "@") user ++ T.unpack host + +{- Generates a ssh or rsync url from a SshData. -} +genSshUrl :: SshData -> String +genSshUrl sshdata = case sshRepoUrl sshdata of + Just repourl -> repourl + Nothing -> addtrailingslash $ T.unpack $ T.concat $ + if (onlyCapability sshdata RsyncCapable) + then [u, h, T.pack ":", sshDirectory sshdata] + else [T.pack "ssh://", u, h, d] + where + u = maybe (T.pack "") (\v -> T.concat [v, T.pack "@"]) $ sshUserName sshdata + h = sshHostName sshdata + d + | T.pack "/" `T.isPrefixOf` sshDirectory sshdata = sshDirectory sshdata + | T.pack "~/" `T.isPrefixOf` sshDirectory sshdata = T.concat [T.pack "/", sshDirectory sshdata] + | otherwise = T.concat [T.pack "/~/", sshDirectory sshdata] + addtrailingslash s + | "/" `isSuffixOf` s = s + | otherwise = s ++ "/" + +{- Reverses genSshUrl -} +parseSshUrl :: String -> Maybe SshData +parseSshUrl u + | "ssh://" `isPrefixOf` u = fromssh (drop (length "ssh://") u) + | otherwise = fromrsync u + where + mkdata (userhost, dir) = Just $ SshData + { sshHostName = T.pack host + , sshUserName = if null user then Nothing else Just $ T.pack user + , sshDirectory = T.pack dir + , sshRepoName = genSshRepoName host dir + -- dummy values, cannot determine from url + , sshPort = 22 + , needsPubKey = True + , sshCapabilities = [] + , sshRepoUrl = Nothing + } + where + (user, host) = if '@' `elem` userhost + then separate (== '@') userhost + else ("", userhost) + fromrsync s + | not (rsyncUrlIsShell u) = Nothing + | otherwise = mkdata $ separate (== ':') s + fromssh = mkdata . break (== '/') + +{- Generates a git remote name, like host_dir or host -} +genSshRepoName :: String -> FilePath -> String +genSshRepoName host dir + | null dir = makeLegalName host + | otherwise = makeLegalName $ host ++ "_" ++ dir + +{- The output of ssh, including both stdout and stderr. -} +sshTranscript :: [String] -> SshHost -> String -> (Maybe String) -> IO (String, Bool) +sshTranscript opts sshhost cmd input = processTranscript "ssh" + (opts ++ [fromSshHost sshhost, cmd]) input + +{- Ensure that the ssh public key doesn't include any ssh options, like + - command=foo, or other weirdness. + - + - The returned version of the key has its comment removed. + -} +validateSshPubKey :: SshPubKey -> Either String SshPubKey +validateSshPubKey pubkey + | length (lines pubkey) == 1 = check $ words pubkey + | otherwise = Left "too many lines in ssh public key" + where + check (prefix:key:_) = checkprefix prefix (unwords [prefix, key]) + check _ = err "wrong number of words in ssh public key" + + err msg = Left $ unwords [msg, pubkey] + + checkprefix prefix validpubkey + | ssh == "ssh" && all isAlphaNum keytype = Right validpubkey + | otherwise = err "bad ssh public key prefix" + where + (ssh, keytype) = separate (== '-') prefix + +addAuthorizedKeys :: Bool -> FilePath -> SshPubKey -> IO Bool +addAuthorizedKeys gitannexshellonly dir pubkey = boolSystem "sh" + [ Param "-c" , Param $ addAuthorizedKeysCommand gitannexshellonly dir pubkey ] + +{- Should only be used within the same process that added the line; + - the layout of the line is not kepy stable across versions. -} +removeAuthorizedKeys :: Bool -> FilePath -> SshPubKey -> IO () +removeAuthorizedKeys gitannexshellonly dir pubkey = do + let keyline = authorizedKeysLine gitannexshellonly dir pubkey + sshdir <- sshDir + let keyfile = sshdir "authorized_keys" + tryWhenExists (lines <$> readFileStrict keyfile) >>= \case + Just ls -> viaTmp writeSshConfig keyfile $ + unlines $ filter (/= keyline) ls + Nothing -> noop + +{- Implemented as a shell command, so it can be run on remote servers over + - ssh. + - + - The ~/.ssh/git-annex-shell wrapper script is created if not already + - present. + -} +addAuthorizedKeysCommand :: Bool -> FilePath -> SshPubKey -> String +addAuthorizedKeysCommand gitannexshellonly dir pubkey = intercalate "&&" + [ "mkdir -p ~/.ssh" + , intercalate "; " + [ "if [ ! -e " ++ wrapper ++ " ]" + , "then (" ++ intercalate ";" (map echoval script) ++ ") > " ++ wrapper + , "fi" + ] + , "chmod 700 " ++ wrapper + , "touch ~/.ssh/authorized_keys" + , "chmod 600 ~/.ssh/authorized_keys" + , unwords + [ "echo" + , shellEscape $ authorizedKeysLine gitannexshellonly dir pubkey + , ">>~/.ssh/authorized_keys" + ] + ] + where + echoval v = "echo " ++ shellEscape v + wrapper = "~/.ssh/git-annex-shell" + script = + [ shebang + , "set -e" + , "if [ \"x$SSH_ORIGINAL_COMMAND\" != \"x\" ]; then" + , runshell "$SSH_ORIGINAL_COMMAND" + , "else" + , runshell "$@" + , "fi" + ] + runshell var = "exec git-annex-shell -c \"" ++ var ++ "\"" + +authorizedKeysLine :: Bool -> FilePath -> SshPubKey -> String +authorizedKeysLine gitannexshellonly dir pubkey + | gitannexshellonly = limitcommand ++ pubkey + {- TODO: Locking down rsync is difficult, requiring a rather + - long perl script. -} + | otherwise = pubkey + where + limitcommand = "command=\"env GIT_ANNEX_SHELL_DIRECTORY="++shellEscape dir++" ~/.ssh/git-annex-shell\",no-agent-forwarding,no-port-forwarding,no-X11-forwarding,no-pty " + +{- Generates a ssh key pair. -} +genSshKeyPair :: IO SshKeyPair +genSshKeyPair = withTmpDir "git-annex-keygen" $ \dir -> do + ok <- boolSystem "ssh-keygen" + [ Param "-P", Param "" -- no password + , Param "-f", File $ dir "key" + ] + unless ok $ + giveup "ssh-keygen failed" + SshKeyPair + <$> readFile (dir "key.pub") + <*> readFile (dir "key") + +{- Installs a ssh key pair, and sets up ssh config with a mangled hostname + - that will enable use of the key. This way we avoid changing the user's + - regular ssh experience at all. Returns a modified SshData containing the + - mangled hostname. + - + - Note that the key files are put in ~/.ssh/git-annex/, rather than directly + - in ssh because of an **INSANE** behavior of gnome-keyring: It loads + - ~/.ssh/ANYTHING.pub, and uses them indiscriminately. But using this key + - for a normal login to the server will force git-annex-shell to run, + - and locks the user out. Luckily, it does not recurse into subdirectories. + - + - Similarly, IdentitiesOnly is set in the ssh config to prevent the + - ssh-agent from forcing use of a different key. + - + - Force strict host key checking to avoid repeated prompts + - when git-annex and git try to access the remote, if its + - host key has changed. + -} +installSshKeyPair :: SshKeyPair -> SshData -> IO SshData +installSshKeyPair sshkeypair sshdata = do + sshdir <- sshDir + createDirectoryIfMissing True $ fromRawFilePath $ + parentDir $ toRawFilePath $ sshdir sshPrivKeyFile sshdata + + unlessM (doesFileExist $ sshdir sshPrivKeyFile sshdata) $ + writeFileProtected (toRawFilePath (sshdir sshPrivKeyFile sshdata)) (sshPrivKey sshkeypair) + unlessM (doesFileExist $ sshdir sshPubKeyFile sshdata) $ + writeFile (sshdir sshPubKeyFile sshdata) (sshPubKey sshkeypair) + + setSshConfig sshdata + [ ("IdentityFile", "~/.ssh/" ++ sshPrivKeyFile sshdata) + , ("IdentitiesOnly", "yes") + , ("StrictHostKeyChecking", "yes") + ] + +sshPrivKeyFile :: SshData -> FilePath +sshPrivKeyFile sshdata = "git-annex" "key." ++ mangleSshHostName sshdata + +sshPubKeyFile :: SshData -> FilePath +sshPubKeyFile sshdata = sshPrivKeyFile sshdata ++ ".pub" + +{- Generates an installs a new ssh key pair if one is not already + - installed. Returns the modified SshData that will use the key pair, + - and the key pair. -} +setupSshKeyPair :: SshData -> IO (SshData, SshKeyPair) +setupSshKeyPair sshdata = do + sshdir <- sshDir + mprivkey <- catchMaybeIO $ readFile (sshdir sshPrivKeyFile sshdata) + mpubkey <- catchMaybeIO $ readFile (sshdir sshPubKeyFile sshdata) + keypair <- case (mprivkey, mpubkey) of + (Just privkey, Just pubkey) -> return $ SshKeyPair + { sshPubKey = pubkey + , sshPrivKey = privkey + } + _ -> genSshKeyPair + sshdata' <- installSshKeyPair keypair sshdata + return (sshdata', keypair) + +{- Fixes git-annex ssh key pairs configured in .ssh/config + - by old versions to set IdentitiesOnly. + - + - Strategy: Search for IdentityFile lines with key.git-annex + - in their names. These are for git-annex ssh key pairs. + - Add the IdentitiesOnly line immediately after them, if not already + - present. + -} +fixSshKeyPairIdentitiesOnly :: IO () +fixSshKeyPairIdentitiesOnly = changeUserSshConfig $ unlines . go [] . lines + where + go c [] = reverse c + go c (l:[]) + | all (`isInfixOf` l) indicators = go (fixedline l:l:c) [] + | otherwise = go (l:c) [] + go c (l:next:rest) + | all (`isInfixOf` l) indicators && not ("IdentitiesOnly" `isInfixOf` next) = + go (fixedline l:l:c) (next:rest) + | otherwise = go (l:c) (next:rest) + indicators = ["IdentityFile", "key.git-annex"] + fixedline tmpl = takeWhile isSpace tmpl ++ "IdentitiesOnly yes" + +{- Add StrictHostKeyChecking to any ssh config stanzas that were written + - by git-annex. -} +fixUpSshRemotes :: IO () +fixUpSshRemotes = modifyUserSshConfig (map go) + where + go c@(HostConfig h _) + | "git-annex-" `isPrefixOf` h = fixupconfig c + | otherwise = c + go other = other + + fixupconfig c = case findHostConfigKey c "StrictHostKeyChecking" of + Nothing -> addToHostConfig c "StrictHostKeyChecking" "yes" + Just _ -> c + +{- Setups up a ssh config with a mangled hostname. + - Returns a modified SshData containing the mangled hostname. -} +setSshConfig :: SshData -> [(String, String)] -> IO SshData +setSshConfig sshdata config = do + sshdir <- sshDir + createDirectoryIfMissing True sshdir + let configfile = sshdir "config" + unlessM (catchBoolIO $ isInfixOf mangledhost <$> readFile configfile) $ do + appendFile configfile $ unlines $ + [ "" + , "# Added automatically by git-annex" + , "Host " ++ mangledhost + ] ++ map (\(k, v) -> "\t" ++ k ++ " " ++ v) + (settings ++ config) + setSshConfigMode (toRawFilePath configfile) + + return $ sshdata + { sshHostName = T.pack mangledhost + , sshRepoUrl = replace orighost mangledhost + <$> sshRepoUrl sshdata + } + where + orighost = T.unpack $ sshHostName sshdata + mangledhost = mangleSshHostName sshdata + settings = + [ ("Hostname", orighost) + , ("Port", show $ sshPort sshdata) + ] + +{- This hostname is specific to a given repository on the ssh host, + - so it is based on the real hostname, the username, and the directory. + - + - The mangled hostname has the form: + - "git-annex-realhostname-username_port_dir" + - Note that "-" is only used in the realhostname and as a separator; + - this is necessary to allow unMangleSshHostName to work. + - + - Unusual characters are url encoded, but using "." rather than "%" + - (the latter has special meaning to ssh). + - + - In the username and directory, unusual characters are any + - non-alphanumerics, other than "_" + - + - The real hostname is not normally encoded at all. This is done for + - backwards compatibility and to avoid unnecessary ugliness in the + - filename. However, when it contains special characters + - (notably ":" which cannot be used on some filesystems), it is url + - encoded. To indicate it was encoded, the mangled hostname + - has the form + - "git-annex-.encodedhostname-username_port_dir" + -} +mangleSshHostName :: SshData -> String +mangleSshHostName sshdata = intercalate "-" + [ "git-annex" + , escapehostname (T.unpack (sshHostName sshdata)) + , escape extra + ] + where + extra = intercalate "_" $ map T.unpack $ catMaybes + [ sshUserName sshdata + , Just $ T.pack $ show $ sshPort sshdata + , Just $ sshDirectory sshdata + ] + safe c + | isAlphaNum c = True + | c == '_' = True + | otherwise = False + escape s = replace "%" "." $ escapeURIString safe s + escapehostname s + | all (\c -> c == '.' || safe c) s = s + | otherwise = '.' : escape s + +{- Extracts the real hostname from a mangled ssh hostname. -} +unMangleSshHostName :: String -> String +unMangleSshHostName h = case splitc '-' h of + ("git":"annex":rest) -> unescape (intercalate "-" (beginning rest)) + _ -> h + where + unescape ('.':s) = unEscapeString (replace "." "%" s) + unescape s = s + +{- Does ssh have known_hosts data for a hostname? -} +knownHost :: Text -> IO Bool +knownHost hostname = do + sshdir <- sshDir + ifM (doesFileExist $ sshdir "known_hosts") + ( not . null <$> checkhost + , return False + ) + where + {- ssh-keygen -F can crash on some old known_hosts file -} + checkhost = catchDefaultIO "" $ + readProcess "ssh-keygen" ["-F", T.unpack hostname] diff --git a/Assistant/Sync.hs b/Assistant/Sync.hs new file mode 100644 index 0000000000..48f805655d --- /dev/null +++ b/Assistant/Sync.hs @@ -0,0 +1,287 @@ +{- git-annex assistant repo syncing + - + - Copyright 2012 Joey Hess + - + - Licensed under the GNU AGPL version 3 or higher. + -} + +{-# LANGUAGE OverloadedStrings #-} + +module Assistant.Sync where + +import Assistant.Common +import Assistant.Pushes +import Assistant.Alert +import Assistant.Alert.Utility +import Assistant.DaemonStatus +import Assistant.ScanRemotes +import Assistant.RemoteControl +import qualified Command.Sync +import qualified Git +import qualified Git.Command +import qualified Remote +import qualified Types.Remote as Remote +import qualified Annex +import qualified Annex.Branch +import Remote.List.Util +import Annex.UUID +import Annex.TaggedPush +import Annex.Ssh +import Annex.CurrentBranch +import qualified Config +import Git.Config +import Config.DynamicConfig +import Assistant.NamedThread +import Assistant.Threads.Watcher (watchThread, WatcherControl(..)) +import Assistant.TransferSlots +import Assistant.TransferQueue +import Assistant.RepoProblem +import Assistant.Commits +import Types.Transfer +import Database.Export + +import Data.Time.Clock +import qualified Data.Map as M +import Control.Concurrent +import Control.Concurrent.Async + +{- Syncs with remotes that may have been disconnected for a while. + - + - First gets git in sync, and then prepares any necessary file transfers. + - + - An expensive full scan is queued when the git-annex branches of some of + - the remotes have diverged from the local git-annex branch. Otherwise, + - it's sufficient to requeue failed transfers. + - + - Also handles signaling any connectRemoteNotifiers, after the syncing is + - done, and records an export commit to make any exports be updated. + -} +reconnectRemotes :: [Remote] -> Assistant () +reconnectRemotes [] = recordExportCommit +reconnectRemotes rs = void $ do + rs' <- liftAnnex $ filterM (Remote.checkAvailable True) rs + unless (null rs') $ do + failedrs <- syncAction rs' (const go) + forM_ failedrs $ \r -> + whenM (liftAnnex $ Remote.checkAvailable False r) $ + repoHasProblem (Remote.uuid r) (syncRemote r) + mapM_ signal $ filter (`notElem` failedrs) rs' + recordExportCommit + where + gitremotes = liftAnnex $ + filterM (notspecialremote <$$> Remote.getRepo) rs + notspecialremote r + | Git.repoIsUrl r = True + | Git.repoIsLocal r = True + | Git.repoIsLocalUnknown r = True + | otherwise = False + syncbranch currentbranch@(Just _, _) = do + (failedpull, diverged) <- manualPull currentbranch =<< gitremotes + now <- liftIO getCurrentTime + failedpush <- pushToRemotes' now =<< gitremotes + return (nub $ failedpull ++ failedpush, diverged) + {- No local branch exists yet, but we can try pulling. -} + syncbranch (Nothing, _) = manualPull (Nothing, Nothing) =<< gitremotes + go = do + (failed, diverged) <- syncbranch =<< liftAnnex getCurrentBranch + addScanRemotes diverged =<< + filterM (not <$$> liftIO . getDynamicConfig . remoteAnnexIgnore . Remote.gitconfig) rs + return failed + signal r = liftIO . mapM_ (flip tryPutMVar ()) + =<< fromMaybe [] . M.lookup (Remote.uuid r) . connectRemoteNotifiers + <$> getDaemonStatus + +{- Pushes the local sync branch to all remotes, in + - parallel, along with the git-annex branch. This is the same + - as "git annex sync", except in parallel, and will co-exist with use of + - "git annex sync". + - + - Avoids running possibly long-duration commands in the Annex monad, so + - as not to block other threads. + - + - This can fail, when the remote's sync branch (or git-annex branch) has + - been updated by some other remote pushing into it, or by the remote + - itself. To handle failure, a manual pull and merge is done, and the push + - is retried. + - + - When there's a lot of activity, we may fail more than once. + - On the other hand, we may fail because the remote is not available. + - Rather than retrying indefinitely, after the first retry we enter a + - fallback mode, where our push is guaranteed to succeed if the remote is + - reachable. If the fallback fails, the push is queued to be retried + - later. + - + - Returns any remotes that it failed to push to. + -} +pushToRemotes :: [Remote] -> Assistant [Remote] +pushToRemotes remotes = do + now <- liftIO getCurrentTime + let remotes' = filter (wantpush . Remote.gitconfig) remotes + syncAction remotes' (pushToRemotes' now) + where + wantpush gc + | remoteAnnexReadOnly gc = False + | not (remoteAnnexPush gc) = False + | otherwise = True + +pushToRemotes' :: UTCTime -> [Remote] -> Assistant [Remote] +pushToRemotes' now remotes = do + (g, branch, u, ms) <- liftAnnex $ do + Annex.Branch.commit =<< Annex.Branch.commitMessage + (,,,) + <$> gitRepo + <*> getCurrentBranch + <*> getUUID + <*> Annex.getState Annex.output + ret <- go ms True branch g u remotes + return ret + where + go _ _ (Nothing, _) _ _ _ = return [] -- no branch, so nothing to do + go _ _ _ _ _ [] = return [] -- no remotes, so nothing to do + go ms shouldretry currbranch@(Just branch, _) g u rs = do + debug ["pushing to", show rs] + (succeeded, failed) <- parallelPush g rs (push ms branch) + updatemap succeeded [] + if null failed + then return [] + else if shouldretry + then retry ms currbranch g u failed + else fallback branch g u failed + + updatemap succeeded failed = do + v <- getAssistant failedPushMap + changeFailedPushMap v $ \m -> + M.union (makemap failed) $ + M.difference m (makemap succeeded) + makemap l = M.fromList $ zip l (repeat now) + + retry ms currbranch g u rs = do + debug ["trying manual pull to resolve failed pushes"] + void $ manualPull currbranch rs + go ms False currbranch g u rs + + fallback branch g u rs = do + debug ["fallback pushing to", show rs] + (succeeded, failed) <- parallelPush g rs (taggedPush u Nothing branch) + updatemap succeeded failed + return failed + + push ms branch remote = Command.Sync.pushBranch remote (Just branch) ms + +parallelPush :: Git.Repo -> [Remote] -> (Remote -> Git.Repo -> IO Bool)-> Assistant ([Remote], [Remote]) +parallelPush g rs a = do + rgs <- liftAnnex $ mapM topush rs + (succeededrgs, failedrgs) <- liftIO $ inParallel (uncurry a) rgs + return (map fst succeededrgs, map fst failedrgs) + where + topush r = (,) + <$> pure r + <*> (Remote.getRepo r >>= \repo -> + sshOptionsTo repo (Remote.gitconfig r) g) + +inParallel :: (v -> IO Bool) -> [v] -> IO ([v], [v]) +inParallel a l = (\(t,f) -> (map fst t, map fst f)) + . partition snd + . zip l <$> mapConcurrently a l + +{- Displays an alert while running an action that syncs with some remotes, + - and returns any remotes that it failed to sync with. + - + - Readonly remotes are also hidden (to hide the web special remote). + -} +syncAction :: [Remote] -> ([Remote] -> Assistant [Remote]) -> Assistant [Remote] +syncAction rs a + | null visibleremotes = a rs + | otherwise = do + i <- addAlert $ syncAlert visibleremotes + failed <- a rs + failed' <- filterM (not . Git.repoIsLocalUnknown <$$> liftAnnex . Remote.getRepo) failed + let succeeded = filter (`notElem` failed) visibleremotes + if null succeeded && null failed' + then removeAlert i + else updateAlertMap $ mergeAlert i $ + syncResultAlert succeeded failed' + return failed + where + visibleremotes = filter (not . Remote.readonly) rs + +{- Manually pull from remotes and merge their branches. Returns any + - remotes that it failed to pull from, and a Bool indicating + - whether the git-annex branches of the remotes and local had + - diverged before the pull. + -} +manualPull :: Command.Sync.CurrBranch -> [Remote] -> Assistant ([Remote], Bool) +manualPull currentbranch remotes = do + g <- liftAnnex gitRepo + -- Allow merging unrelated histories. + mc <- liftAnnex $ Command.Sync.mergeConfig True + failed <- forM remotes $ \r -> if wantpull $ Remote.gitconfig r + then do + g' <- liftAnnex $ do + repo <- Remote.getRepo r + sshOptionsTo repo (Remote.gitconfig r) g + ifM (liftIO $ Git.Command.runBool [Param "fetch", Param $ Remote.name r] g') + ( return Nothing + , return $ Just r + ) + else return Nothing + haddiverged <- liftAnnex Annex.Branch.forceUpdate >>= return . \case + u@(Annex.Branch.UpdateMade {}) -> Annex.Branch.refsWereMerged u + (Annex.Branch.UpdateFailedPermissions {}) -> True + forM_ remotes $ \r -> + liftAnnex $ Command.Sync.mergeRemote r + currentbranch mc def + when haddiverged $ + updateExportTreeFromLogAll + return (catMaybes failed, haddiverged) + where + wantpull gc = remoteAnnexPull gc + +{- Start syncing a remote, using a background thread. -} +syncRemote :: Remote -> Assistant () +syncRemote remote = do + updateSyncRemotes + thread <- asIO $ do + reconnectRemotes [remote] + addScanRemotes True [remote] + void $ liftIO $ forkIO $ thread + +{- Use Nothing to change autocommit setting; or a remote to change + - its sync setting. -} +changeSyncable :: Maybe Remote -> Bool -> Assistant () +changeSyncable Nothing enable = do + liftAnnex $ Config.setConfig key (boolConfig enable) + liftIO . maybe noop (`throwTo` signal) + =<< namedThreadId watchThread + where + key = Config.annexConfig "autocommit" + signal + | enable = ResumeWatcher + | otherwise = PauseWatcher +changeSyncable (Just r) True = do + liftAnnex $ changeSyncFlag r True + syncRemote r + sendRemoteControl RELOAD +changeSyncable (Just r) False = do + liftAnnex $ changeSyncFlag r False + updateSyncRemotes + {- Stop all transfers to or from this remote. + - XXX Can't stop any ongoing scan, or git syncs. -} + void $ dequeueTransfers tofrom + mapM_ (cancelTransfer False) =<< + filter tofrom . M.keys . currentTransfers <$> getDaemonStatus + where + tofrom t = transferUUID t == Remote.uuid r + +changeSyncFlag :: Remote -> Bool -> Annex () +changeSyncFlag r enabled = do + repo <- Remote.getRepo r + let key = Config.remoteAnnexConfig repo "sync" + Config.setConfig key (boolConfig enabled) + remotesChanged + +updateExportTreeFromLogAll :: Assistant () +updateExportTreeFromLogAll = do + rs <- exportRemotes <$> getDaemonStatus + forM_ rs $ \r -> liftAnnex $ + openDb (Remote.uuid r) >>= updateExportTreeFromLog diff --git a/Assistant/Threads/Committer.hs b/Assistant/Threads/Committer.hs new file mode 100644 index 0000000000..07013c0486 --- /dev/null +++ b/Assistant/Threads/Committer.hs @@ -0,0 +1,505 @@ +{- git-annex assistant commit thread + - + - Copyright 2012-2024 Joey Hess + - + - Licensed under the GNU AGPL version 3 or higher. + -} + +{-# LANGUAGE CPP, OverloadedStrings #-} + +module Assistant.Threads.Committer where + +import Assistant.Common +import Assistant.Changes +import Assistant.Types.Changes +import Assistant.Commits +import Assistant.Alert +import Assistant.DaemonStatus +import Assistant.TransferQueue +import Assistant.Drop +import Types.Transfer +import Logs.Location +import Utility.ThreadScheduler +import qualified Utility.Lsof as Lsof +import qualified Utility.DirWatcher as DirWatcher +import Types.KeySource +import Types.Command +import Config +import Annex.Content +import Annex.Ingest +import Annex.Link +import Annex.Perms +import Annex.CatFile +import Annex.InodeSentinal +import Annex.CurrentBranch +import Annex.FileMatcher +import qualified Annex +import qualified Annex.Queue +import qualified Annex.Branch +import Utility.InodeCache +import qualified Database.Keys +import qualified Command.Sync +import qualified Command.Add +import Config.GitConfig +import qualified Git.Branch +import Utility.Tuple +import Utility.Metered +import qualified Utility.RawFilePath as R + +import Data.Time.Clock +import qualified Data.Set as S +import qualified Data.Map as M +import Data.Either +import Control.Concurrent +import System.PosixCompat.Files (fileID, deviceID, fileMode) + +{- This thread makes git commits at appropriate times. -} +commitThread :: NamedThread +commitThread = namedThread "Committer" $ do + havelsof <- liftIO $ inSearchPath "lsof" + delayadd <- liftAnnex $ + fmap Seconds . annexDelayAdd <$> Annex.getGitConfig + largefilematcher <- liftAnnex largeFilesMatcher + annexdotfiles <- liftAnnex $ getGitConfigVal annexDotFiles + msg <- liftAnnex Command.Sync.commitMsg + lockdowndir <- liftAnnex $ fromRepo gitAnnexTmpWatcherDir + liftAnnex $ do + -- Clean up anything left behind by a previous process + -- on unclean shutdown. + void $ liftIO $ tryIO $ removeDirectoryRecursive + (fromRawFilePath lockdowndir) + void $ createAnnexDirectory lockdowndir + waitChangeTime $ \(changes, time) -> do + readychanges <- handleAdds (fromRawFilePath lockdowndir) havelsof largefilematcher annexdotfiles delayadd $ + simplifyChanges changes + if shouldCommit False time (length readychanges) readychanges + then do + debug + [ "committing" + , show (length readychanges) + , "changes" + ] + void $ alertWhile commitAlert $ + liftAnnex $ commitStaged msg + recordCommit + recordExportCommit + let numchanges = length readychanges + mapM_ checkChangeContent readychanges + return numchanges + else do + refill readychanges + return 0 + +refill :: [Change] -> Assistant () +refill [] = noop +refill cs = do + debug ["delaying commit of", show (length cs), "changes"] + refillChanges cs + +{- Wait for one or more changes to arrive to be committed, and then + - runs an action to commit them. If more changes arrive while this is + - going on, they're handled intelligently, batching up changes into + - large commits where possible, doing rename detection, and + - committing immediately otherwise. -} +waitChangeTime :: (([Change], UTCTime) -> Assistant Int) -> Assistant () +waitChangeTime a = waitchanges 0 + where + waitchanges lastcommitsize = do + -- Wait one one second as a simple rate limiter. + liftIO $ threadDelaySeconds (Seconds 1) + -- Now, wait until at least one change is available for + -- processing. + cs <- getChanges + handlechanges cs lastcommitsize + handlechanges changes lastcommitsize = do + let len = length changes + -- See if now's a good time to commit. + now <- liftIO getCurrentTime + scanning <- not . scanComplete <$> getDaemonStatus + case (lastcommitsize >= maxCommitSize, shouldCommit scanning now len changes, possiblyrename changes) of + (True, True, _) + | len > maxCommitSize -> + a (changes, now) >>= waitchanges + | otherwise -> aftermaxcommit changes + (_, True, False) -> + a (changes, now) >>= waitchanges + (_, True, True) -> do + morechanges <- getrelatedchanges changes + a (changes ++ morechanges, now) >>= waitchanges + _ -> do + refill changes + waitchanges lastcommitsize + + {- Did we perhaps only get one of the AddChange and RmChange pair + - that make up a file rename? Or some of the pairs that make up + - a directory rename? + -} + possiblyrename = all renamepart + + renamepart (PendingAddChange _ _) = True + renamepart c = isRmChange c + + {- Gets changes related to the passed changes, without blocking + - very long. + - + - If there are multiple RmChanges, this is probably a directory + - rename, in which case it may be necessary to wait longer to get + - all the Changes involved. + -} + getrelatedchanges oldchanges + | length (filter isRmChange oldchanges) > 1 = + concat <$> getbatchchanges [] + | otherwise = do + liftIO humanImperceptibleDelay + getAnyChanges + getbatchchanges cs = do + liftIO $ threadDelay $ fromIntegral $ oneSecond `div` 10 + cs' <- getAnyChanges + if null cs' + then return cs + else getbatchchanges (cs':cs) + + {- The last commit was maximum size, so it's very likely there + - are more changes and we'd like to ensure we make another commit + - of maximum size if possible. + - + - But, it can take a while for the Watcher to wake back up + - after a commit. It can get blocked by another thread + - that is using the Annex state, such as a git-annex branch + - commit. Especially after such a large commit, this can + - take several seconds. When this happens, it defeats the + - normal commit batching, which sees some old changes the + - Watcher found while the commit was being prepared, and sees + - no recent ones, and wants to commit immediately. + - + - All that we need to do, then, is wait for the Watcher to + - wake up, and queue up one more change. + - + - However, it's also possible that we're at the end of changes for + - now. So to avoid waiting a really long time before committing + - those changes we have, poll for up to 30 seconds, and then + - commit them. + - + - Also, try to run something in Annex, to ensure we block + - longer if the Annex state is indeed blocked. + -} + aftermaxcommit oldchanges = loop (30 :: Int) + where + loop 0 = continue oldchanges + loop n = do + liftAnnex noop -- ensure Annex state is free + liftIO $ threadDelaySeconds (Seconds 1) + changes <- getAnyChanges + if null changes + then loop (n - 1) + else continue (oldchanges ++ changes) + continue cs + | null cs = waitchanges 0 + | otherwise = handlechanges cs 0 + +isRmChange :: Change -> Bool +isRmChange (Change { changeInfo = i }) | i == RmChange = True +isRmChange _ = False + +{- An amount of time that is hopefully imperceptably short for humans, + - while long enough for a computer to get some work done. + - Note that 0.001 is a little too short for rename change batching to + - work. -} +humanImperceptibleInterval :: NominalDiffTime +humanImperceptibleInterval = 0.01 + +humanImperceptibleDelay :: IO () +humanImperceptibleDelay = threadDelay $ + truncate $ humanImperceptibleInterval * fromIntegral oneSecond + +maxCommitSize :: Int +maxCommitSize = 5000 + +{- Decide if now is a good time to make a commit. + - Note that the list of changes has a random order. + - + - Current strategy: If there have been 10 changes within the past second, + - a batch activity is taking place, so wait for later. + -} +shouldCommit :: Bool -> UTCTime -> Int -> [Change] -> Bool +shouldCommit scanning now len changes + | scanning = len >= maxCommitSize + | len == 0 = False + | len >= maxCommitSize = True + | length recentchanges < 10 = True + | otherwise = False -- batch activity + where + thissecond c = timeDelta c <= 1 + recentchanges = filter thissecond changes + timeDelta c = now `diffUTCTime` changeTime c + +commitStaged :: String -> Annex Bool +commitStaged msg = do + {- This could fail if there's another commit being made by + - something else. -} + v <- tryNonAsync Annex.Queue.flush + case v of + Left _ -> return False + Right _ -> do + cmode <- annexCommitMode <$> Annex.getGitConfig + ok <- inRepo $ Git.Branch.commitCommand cmode + (Git.Branch.CommitQuiet True) + [ Param "-m" + , Param msg + ] + when ok $ + Command.Sync.updateBranches =<< getCurrentBranch + {- Commit the git-annex branch. This comes after + - the commit of the staged changes, so that + - annex.commitmessage-command can examine that + - commit. -} + Annex.Branch.commit =<< Annex.Branch.commitMessage + return ok + +{- If there are PendingAddChanges, or InProcessAddChanges, the files + - have not yet actually been added, and that has to be done + - now, before committing. + - + - Deferring the adds to this point causes batches to be bundled together, + - which allows faster checking with lsof that the files are not still open + - for write by some other process, and faster checking with git-ls-files + - that the files are not already checked into git. + - + - When a file is added in locked mode, Inotify will notice the new symlink. + - So this waits for additional Changes to arrive, so that the symlink has + - hopefully been staged before returning, and will be committed immediately. + - (OTOH, for kqueue, eventsCoalesce, so instead the symlink is directly + - created and staged.) + - + - Returns a list of all changes that are ready to be committed. + - Any pending adds that are not ready yet are put back into the ChangeChan, + - where they will be retried later. + -} +handleAdds :: FilePath -> Bool -> GetFileMatcher -> Bool -> Maybe Seconds -> [Change] -> Assistant [Change] +handleAdds lockdowndir havelsof largefilematcher annexdotfiles delayadd cs = returnWhen (null incomplete) $ do + let (pending, inprocess) = partition isPendingAddChange incomplete + let lockdownconfig = LockDownConfig + { lockingFile = False + , hardlinkFileTmpDir = Just (toRawFilePath lockdowndir) + , checkWritePerms = True + } + (postponed, toadd) <- partitionEithers + <$> safeToAdd lockdowndir lockdownconfig havelsof delayadd pending inprocess + + unless (null postponed) $ + refillChanges postponed + + returnWhen (null toadd) $ do + (toaddannexed, toaddsmall) <- partitionEithers + <$> mapM checksmall toadd + addsmall toaddsmall + addedannexed <- addaction toadd $ + catMaybes <$> addannexed toaddannexed + return $ addedannexed ++ toaddsmall ++ otherchanges + where + (incomplete, otherchanges) = partition (\c -> isPendingAddChange c || isInProcessAddChange c) cs + + returnWhen c a + | c = return otherchanges + | otherwise = a + + checksmall change + | not annexdotfiles && dotfile f = + return (Right change) + | otherwise = + ifM (liftAnnex $ checkFileMatcher largefilematcher f) + ( return (Left change) + , return (Right change) + ) + where + f = toRawFilePath (changeFile change) + + addsmall [] = noop + addsmall toadd = liftAnnex $ void $ tryIO $ + forM (map (toRawFilePath . changeFile) toadd) $ \f -> + Command.Add.addFile Command.Add.Small f + =<< liftIO (R.getSymbolicLinkStatus f) + + {- Avoid overhead of re-injesting a renamed unlocked file, by + - examining the other Changes to see if a removed file has the + - same InodeCache as the new file. If so, we can just update + - bookkeeping, and stage the file in git. + -} + addannexed :: [Change] -> Assistant [Maybe Change] + addannexed [] = return [] + addannexed toadd = do + ct <- liftAnnex compareInodeCachesWith + m <- liftAnnex $ removedKeysMap ct cs + delta <- liftAnnex getTSDelta + let cfg = LockDownConfig + { lockingFile = False + , hardlinkFileTmpDir = Just (toRawFilePath lockdowndir) + , checkWritePerms = True + } + if M.null m + then forM toadd (addannexed' cfg) + else forM toadd $ \c -> do + mcache <- liftIO $ genInodeCache (toRawFilePath (changeFile c)) delta + case mcache of + Nothing -> addannexed' cfg c + Just cache -> + case M.lookup (inodeCacheToKey ct cache) m of + Nothing -> addannexed' cfg c + Just k -> fastadd c k + + addannexed' :: LockDownConfig -> Change -> Assistant (Maybe Change) + addannexed' lockdownconfig change@(InProcessAddChange { lockedDown = ld }) = + catchDefaultIO Nothing <~> doadd + where + ks = keySource ld + doadd = sanitycheck ks $ do + (mkey, _mcache) <- liftAnnex $ do + showStartMessage (StartMessage "add" (ActionItemOther (Just (QuotedPath (keyFilename ks)))) (SeekInput [])) + ingest nullMeterUpdate (Just $ LockedDown lockdownconfig ks) Nothing + maybe (failedingest change) (done change $ fromRawFilePath $ keyFilename ks) mkey + addannexed' _ _ = return Nothing + + fastadd :: Change -> Key -> Assistant (Maybe Change) + fastadd change key = do + let source = keySource $ lockedDown change + liftAnnex $ finishIngestUnlocked key source + done change (fromRawFilePath $ keyFilename source) key + + removedKeysMap :: InodeComparisonType -> [Change] -> Annex (M.Map InodeCacheKey Key) + removedKeysMap ct l = do + mks <- forM (filter isRmChange l) $ \c -> + catKeyFile $ toRawFilePath $ changeFile c + M.fromList . concat <$> mapM mkpairs (catMaybes mks) + where + mkpairs k = map (\c -> (inodeCacheToKey ct c, k)) <$> + Database.Keys.getInodeCaches k + + failedingest change = do + refill [retryChange change] + liftAnnex showEndFail + return Nothing + + done change file key = liftAnnex $ do + logStatus key InfoPresent + mode <- liftIO $ catchMaybeIO $ fileMode <$> R.getFileStatus (toRawFilePath file) + stagePointerFile (toRawFilePath file) mode =<< hashPointerFile key + showEndOk + return $ Just $ finishedChange change key + + {- Check that the keysource's keyFilename still exists, + - and is still a hard link to its contentLocation, + - before ingesting it. -} + sanitycheck keysource a = do + fs <- liftIO $ R.getSymbolicLinkStatus $ keyFilename keysource + ks <- liftIO $ R.getSymbolicLinkStatus $ contentLocation keysource + if deviceID ks == deviceID fs && fileID ks == fileID fs + then a + else do + -- remove the hard link + when (contentLocation keysource /= keyFilename keysource) $ + void $ liftIO $ tryIO $ removeFile $ fromRawFilePath $ contentLocation keysource + return Nothing + + {- Shown an alert while performing an action to add a file or + - files. When only a few files are added, their names are shown + - in the alert. When it's a batch add, the number of files added + - is shown. + - + - Add errors tend to be transient and will be + - automatically dealt with, so the alert is always told + - the add succeeded. + -} + addaction [] a = a + addaction toadd a = alertWhile' (addFileAlert $ map changeFile toadd) $ + (,) + <$> pure True + <*> a + +{- Files can Either be Right to be added now, + - or are unsafe, and must be Left for later. + - + - Check by running lsof on the repository. + -} +safeToAdd :: FilePath -> LockDownConfig -> Bool -> Maybe Seconds -> [Change] -> [Change] -> Assistant [Either Change Change] +safeToAdd _ _ _ _ [] [] = return [] +safeToAdd lockdowndir lockdownconfig havelsof delayadd pending inprocess = do + maybe noop (liftIO . threadDelaySeconds) delayadd + liftAnnex $ do + lockeddown <- forM pending $ lockDown lockdownconfig . changeFile + let inprocess' = inprocess ++ mapMaybe mkinprocess (zip pending lockeddown) + openfiles <- if havelsof + then S.fromList . map fst3 . filter openwrite <$> + findopenfiles (map (keySource . lockedDown) inprocess') + else pure S.empty + let checked = map (check openfiles) inprocess' + + {- If new events are received when files are closed, + - there's no need to retry any changes that cannot + - be done now. -} + if DirWatcher.closingTracked + then do + mapM_ canceladd $ lefts checked + allRight $ rights checked + else return checked + where + check openfiles change@(InProcessAddChange { lockedDown = ld }) + | S.member (fromRawFilePath (contentLocation (keySource ld))) openfiles = Left change + check _ change = Right change + + mkinprocess (c, Just ld) = Just InProcessAddChange + { changeTime = changeTime c + , lockedDown = ld + } + mkinprocess (_, Nothing) = Nothing + + canceladd (InProcessAddChange { lockedDown = ld }) = do + let ks = keySource ld + warning $ QuotedPath (keyFilename ks) + <> " still has writers, not adding" + -- remove the hard link + when (contentLocation ks /= keyFilename ks) $ + void $ liftIO $ tryIO $ removeFile $ fromRawFilePath $ contentLocation ks + canceladd _ = noop + + openwrite (_file, mode, _pid) + | mode == Lsof.OpenWriteOnly = True + | mode == Lsof.OpenReadWrite = True + | mode == Lsof.OpenUnknown = True + | otherwise = False + + allRight = return . map Right + + {- Normally the KeySources are locked down inside the lockdowndir, + - so can just lsof that, which is quite efficient. + - + - In crippled filesystem mode, there is no lock down, so must run lsof + - on each individual file. + -} + findopenfiles keysources = ifM crippledFileSystem + ( liftIO $ do + let segments = segmentXargsUnordered $ + map (fromRawFilePath . keyFilename) keysources + concat <$> forM segments (\fs -> Lsof.query $ "--" : fs) + , liftIO $ Lsof.queryDir lockdowndir + ) + +{- After a Change is committed, queue any necessary transfers or drops + - of the content of the key. + - + - This is not done during the startup scan, because the expensive + - transfer scan does the same thing then. + -} +checkChangeContent :: Change -> Assistant () +checkChangeContent change@(Change { changeInfo = i }) = + case changeInfoKey i of + Nothing -> noop + Just k -> whenM (scanComplete <$> getDaemonStatus) $ do + present <- liftAnnex $ inAnnex k + void $ if present + then queueTransfers "new file created" Next k af Upload + else queueTransfers "new or renamed file wanted" Next k af Download + handleDrops "file renamed" present k af [] + where + f = changeFile change + af = AssociatedFile (Just (toRawFilePath f)) +checkChangeContent _ = noop diff --git a/Assistant/Threads/ConfigMonitor.hs b/Assistant/Threads/ConfigMonitor.hs new file mode 100644 index 0000000000..9f1e03f8d1 --- /dev/null +++ b/Assistant/Threads/ConfigMonitor.hs @@ -0,0 +1,95 @@ +{- git-annex assistant config monitor thread + - + - Copyright 2012 Joey Hess + - + - Licensed under the GNU AGPL version 3 or higher. + -} + +module Assistant.Threads.ConfigMonitor where + +import Assistant.Common +import Assistant.BranchChange +import Assistant.DaemonStatus +import Assistant.Commits +import Utility.ThreadScheduler +import Logs +import Logs.UUID +import Logs.Trust +import Logs.PreferredContent +import Logs.Group +import Logs.NumCopies +import Remote.List.Util +import qualified Git.LsTree as LsTree +import Git.Types +import Git.FilePath +import qualified Annex.Branch +import Annex.FileMatcher + +import qualified Data.Set as S + +{- This thread detects when configuration changes have been made to the + - git-annex branch and reloads cached configuration. + - + - If the branch is frequently changing, it's checked for configuration + - changes no more often than once every 60 seconds. On the other hand, + - if the branch has not changed in a while, configuration changes will + - be detected immediately. + -} +configMonitorThread :: NamedThread +configMonitorThread = namedThread "ConfigMonitor" $ loop =<< getConfigs + where + loop old = do + waitBranchChange + new <- getConfigs + when (old /= new) $ do + let changedconfigs = new `S.difference` old + debug $ "reloading config" : + map (fromRawFilePath . fst) + (S.toList changedconfigs) + reloadConfigs new + {- Record a commit to get this config + - change pushed out to remotes. -} + recordCommit + liftIO $ threadDelaySeconds (Seconds 60) + loop new + +{- Config files, and their checksums. -} +type Configs = S.Set (RawFilePath, Sha) + +{- All git-annex's config files, and actions to run when they change. -} +configFilesActions :: [(RawFilePath, Assistant ())] +configFilesActions = + [ (uuidLog, void $ liftAnnex uuidDescMapLoad) + , (remoteLog, void $ liftAnnex remotesChanged) + , (trustLog, void $ liftAnnex trustMapLoad) + , (groupLog, void $ liftAnnex groupMapLoad) + , (numcopiesLog, void $ liftAnnex globalNumCopiesLoad) + , (mincopiesLog, void $ liftAnnex globalMinCopiesLoad) + , (scheduleLog, void updateScheduleLog) + -- Preferred and required content settings depend on most of the + -- other configs, so will be reloaded whenever any configs change. + , (preferredContentLog, noop) + , (requiredContentLog, noop) + , (groupPreferredContentLog, noop) + ] + +reloadConfigs :: Configs -> Assistant () +reloadConfigs changedconfigs = do + sequence_ as + void $ liftAnnex $ preferredRequiredMapsLoad preferredContentTokens + {- Changes to the remote log, or the trust log, can affect the + - syncRemotes list. Changes to the uuid log may affect its + - display so are also included. -} + when (any (`elem` fs) [remoteLog, trustLog, uuidLog]) + updateSyncRemotes + where + (fs, as) = unzip $ filter (flip S.member changedfiles . fst) + configFilesActions + changedfiles = S.map fst changedconfigs + +getConfigs :: Assistant Configs +getConfigs = S.fromList . map extract + <$> liftAnnex (inRepo $ LsTree.lsTreeFiles (LsTree.LsTreeLong False) Annex.Branch.fullname files) + where + files = map (fromRawFilePath . fst) configFilesActions + extract treeitem = (getTopFilePath $ LsTree.file treeitem, LsTree.sha treeitem) diff --git a/Assistant/Threads/Cronner.hs b/Assistant/Threads/Cronner.hs new file mode 100644 index 0000000000..9bd173869d --- /dev/null +++ b/Assistant/Threads/Cronner.hs @@ -0,0 +1,225 @@ +{- git-annex assistant sceduled jobs runner + - + - Copyright 2013 Joey Hess + - + - Licensed under the GNU AGPL version 3 or higher. + -} + +{-# LANGUAGE DeriveDataTypeable #-} + +module Assistant.Threads.Cronner ( + cronnerThread +) where + +import Assistant.Common +import Assistant.DaemonStatus +import Utility.NotificationBroadcaster +import Annex.UUID +import Annex.Path +import Logs.Schedule +import Utility.Scheduled +import Types.ScheduledActivity +import Utility.ThreadScheduler +import Utility.HumanTime +import Utility.Batch +import Assistant.TransferQueue +import Annex.Content +import Types.Transfer +import Assistant.Types.UrlRenderer +import Assistant.Alert +import Remote +import qualified Types.Remote as Remote +import qualified Git +import qualified Git.Fsck +import Assistant.Fsck +import Assistant.Repair + +import Control.Concurrent.Async +import Control.Concurrent.MVar +import Data.Time.LocalTime +import Data.Time.Clock +import qualified Data.Map as M +import qualified Data.Set as S + +{- Loads schedules for this repository, and fires off one thread for each + - scheduled event that runs on this repository. Each thread sleeps until + - its event is scheduled to run. + - + - To handle events that run on remotes, which need to only run when + - their remote gets connected, threads are also started, and are passed + - a MVar to wait on, which is stored in the DaemonStatus's + - connectRemoteNotifiers. + - + - In the meantime the main thread waits for any changes to the + - schedules. When there's a change, compare the old and new list of + - schedules to find deleted and added ones. Start new threads for added + - ones, and kill the threads for deleted ones. -} +cronnerThread :: UrlRenderer -> NamedThread +cronnerThread urlrenderer = namedThreadUnchecked "Cronner" $ do + fsckNudge urlrenderer Nothing + dstatus <- getDaemonStatus + h <- liftIO $ newNotificationHandle False (scheduleLogNotifier dstatus) + go h M.empty M.empty + where + go h amap nmap = do + activities <- liftAnnex $ scheduleGet =<< getUUID + + let addedactivities = activities `S.difference` M.keysSet amap + let removedactivities = M.keysSet amap `S.difference` activities + + forM_ (S.toList removedactivities) $ \activity -> + case M.lookup activity amap of + Just a -> do + debug ["stopping removed job for", fromScheduledActivity activity, show (asyncThreadId a)] + liftIO $ cancel a + Nothing -> noop + + lastruntimes <- liftAnnex getLastRunTimes + started <- startactivities (S.toList addedactivities) lastruntimes + let addedamap = M.fromList $ map fst started + let addednmap = M.fromList $ catMaybes $ map snd started + + let removefiltered = M.filterWithKey (\k _ -> S.member k removedactivities) + let amap' = M.difference (M.union addedamap amap) (removefiltered amap) + let nmap' = M.difference (M.union addednmap nmap) (removefiltered nmap) + modifyDaemonStatus_ $ \s -> s { connectRemoteNotifiers = M.fromListWith (++) (M.elems nmap') } + + liftIO $ waitNotification h + debug ["reloading changed activities"] + go h amap' nmap' + startactivities as lastruntimes = forM as $ \activity -> + case connectActivityUUID activity of + Nothing -> do + runner <- asIO2 (sleepingActivityThread urlrenderer) + a <- liftIO $ async $ + runner activity (M.lookup activity lastruntimes) + return ((activity, a), Nothing) + Just u -> do + mvar <- liftIO newEmptyMVar + runner <- asIO2 (remoteActivityThread urlrenderer mvar) + a <- liftIO $ async $ + runner activity (M.lookup activity lastruntimes) + return ((activity, a), Just (activity, (u, [mvar]))) + +{- Calculate the next time the activity is scheduled to run, then + - sleep until that time, and run it. Then call setLastRunTime, and + - loop. + -} +sleepingActivityThread :: UrlRenderer -> ScheduledActivity -> Maybe LocalTime -> Assistant () +sleepingActivityThread urlrenderer activity lasttime = go lasttime =<< getnexttime lasttime + where + getnexttime = liftIO . nextTime schedule + go _ Nothing = debug ["no scheduled events left for", desc] + go l (Just (NextTimeExactly t)) = waitrun l t Nothing + go l (Just (NextTimeWindow windowstart windowend)) = + waitrun l windowstart (Just windowend) + desc = fromScheduledActivity activity + schedule = getSchedule activity + waitrun l t mmaxt = do + seconds <- liftIO $ secondsUntilLocalTime t + when (seconds > Seconds 0) $ do + debug ["waiting", show seconds, "for next scheduled", desc] + liftIO $ threadDelaySeconds seconds + now <- liftIO getCurrentTime + tz <- liftIO $ getTimeZone now + let nowt = utcToLocalTime tz now + if tolate nowt tz + then do + debug ["too late to run scheduled", desc] + go l =<< getnexttime l + else run nowt + where + tolate nowt tz = case mmaxt of + Just maxt -> nowt > maxt + -- allow the job to start 10 minutes late + Nothing -> diffUTCTime + (localTimeToUTC tz nowt) + (localTimeToUTC tz t) > 600 + run nowt = do + runActivity urlrenderer activity nowt + go (Just nowt) =<< getnexttime (Just nowt) + +{- Wait for the remote to become available by waiting on the MVar. + - Then check if the time is within a time window when activity + - is scheduled to run, and if so run it. + - Otherwise, just wait again on the MVar. + -} +remoteActivityThread :: UrlRenderer -> MVar () -> ScheduledActivity -> Maybe LocalTime -> Assistant () +remoteActivityThread urlrenderer mvar activity lasttime = do + liftIO $ takeMVar mvar + go =<< liftIO (nextTime (getSchedule activity) lasttime) + where + go (Just (NextTimeWindow windowstart windowend)) = do + now <- liftIO getCurrentTime + tz <- liftIO $ getTimeZone now + if now >= localTimeToUTC tz windowstart && now <= localTimeToUTC tz windowend + then do + let nowt = utcToLocalTime tz now + runActivity urlrenderer activity nowt + loop (Just nowt) + else loop lasttime + go _ = noop -- running at exact time not handled here + loop = remoteActivityThread urlrenderer mvar activity + +secondsUntilLocalTime :: LocalTime -> IO Seconds +secondsUntilLocalTime t = do + now <- getCurrentTime + tz <- getTimeZone now + let secs = truncate $ diffUTCTime (localTimeToUTC tz t) now + return $ if secs > 0 + then Seconds secs + else Seconds 0 + +runActivity :: UrlRenderer -> ScheduledActivity -> LocalTime -> Assistant () +runActivity urlrenderer activity nowt = do + debug ["starting", desc] + runActivity' urlrenderer activity + debug ["finished", desc] + liftAnnex $ setLastRunTime activity nowt + where + desc = fromScheduledActivity activity + +runActivity' :: UrlRenderer -> ScheduledActivity -> Assistant () +runActivity' urlrenderer (ScheduledSelfFsck _ d) = do + program <- liftIO programPath + g <- liftAnnex gitRepo + fsckresults <- showFscking urlrenderer Nothing $ tryNonAsync $ do + void $ batchCommand program (Param "fsck" : annexFsckParams d) + Git.Fsck.findBroken True False g + u <- liftAnnex getUUID + void $ repairWhenNecessary urlrenderer u Nothing fsckresults + mapM_ reget =<< liftAnnex (dirKeys gitAnnexBadDir) + where + reget k = queueTransfers "fsck found bad file; redownloading" Next k (AssociatedFile Nothing) Download +runActivity' urlrenderer (ScheduledRemoteFsck u s d) = dispatch =<< liftAnnex (remoteFromUUID u) + where + dispatch Nothing = debug ["skipping remote fsck of uuid without a configured remote", fromUUID u, fromSchedule s] + dispatch (Just rmt) = void $ case Remote.remoteFsck rmt of + Nothing -> go rmt $ do + program <- programPath + void $ batchCommand program $ + [ Param "fsck" + -- avoid downloading files + , Param "--fast" + , Param "--from" + , Param $ Remote.name rmt + ] ++ annexFsckParams d + Just mkfscker -> do + {- Note that having mkfsker return an IO action + - avoids running a long duration fsck in the + - Annex monad. -} + go rmt =<< liftAnnex (mkfscker (annexFsckParams d)) + go rmt annexfscker = do + repo <- liftAnnex $ Remote.getRepo rmt + fsckresults <- showFscking urlrenderer (Just rmt) $ tryNonAsync $ do + void annexfscker + if Git.repoIsLocal repo && not (Git.repoIsLocalUnknown repo) + then Just <$> Git.Fsck.findBroken True True repo + else pure Nothing + maybe noop (void . repairWhenNecessary urlrenderer u (Just rmt)) fsckresults + +annexFsckParams :: Duration -> [CommandParam] +annexFsckParams d = + [ Param "--incremental-schedule=1d" + , Param $ "--time-limit=" ++ fromDuration d + ] diff --git a/Assistant/Threads/DaemonStatus.hs b/Assistant/Threads/DaemonStatus.hs new file mode 100644 index 0000000000..0b14ca737f --- /dev/null +++ b/Assistant/Threads/DaemonStatus.hs @@ -0,0 +1,29 @@ +{- git-annex assistant daemon status thread + - + - Copyright 2012 Joey Hess + - + - Licensed under the GNU AGPL version 3 or higher. + -} + +module Assistant.Threads.DaemonStatus where + +import Assistant.Common +import Assistant.DaemonStatus +import Utility.ThreadScheduler +import Utility.NotificationBroadcaster + +{- This writes the daemon status to disk, when it changes, but no more + - frequently than once every ten minutes. + -} +daemonStatusThread :: NamedThread +daemonStatusThread = namedThread "DaemonStatus" $ do + notifier <- liftIO . newNotificationHandle False + =<< changeNotifier <$> getDaemonStatus + checkpoint + runEvery (Seconds tenMinutes) <~> do + liftIO $ waitNotification notifier + checkpoint + where + checkpoint = do + file <- liftAnnex $ fromRepo gitAnnexDaemonStatusFile + liftIO . writeDaemonStatusFile file =<< getDaemonStatus diff --git a/Assistant/Threads/Exporter.hs b/Assistant/Threads/Exporter.hs new file mode 100644 index 0000000000..20a252baff --- /dev/null +++ b/Assistant/Threads/Exporter.hs @@ -0,0 +1,80 @@ +{- git-annex assistant export updating thread + - + - Copyright 2017 Joey Hess + - + - Licensed under the GNU AGPL version 3 or higher. + -} + +module Assistant.Threads.Exporter where + +import Assistant.Common +import Assistant.Commits +import Assistant.Pushes +import Assistant.DaemonStatus +import Annex.Concurrent +import Annex.CurrentBranch +import Utility.ThreadScheduler +import qualified Annex +import qualified Remote +import qualified Types.Remote as Remote +import qualified Command.Sync + +import Control.Concurrent.Async +import Data.Time.Clock +import qualified Data.Map as M + +{- This thread retries exports that failed before. -} +exportRetryThread :: NamedThread +exportRetryThread = namedThread "ExportRetrier" $ runEvery (Seconds halfhour) <~> do + -- We already waited half an hour, now wait until there are failed + -- exports to retry. + toexport <- getFailedPushesBefore (fromIntegral halfhour) + =<< getAssistant failedExportMap + unless (null toexport) $ do + debug ["retrying", show (length toexport), "failed exports"] + void $ exportToRemotes toexport + where + halfhour = 1800 + +{- This thread updates exports soon after git commits are made. -} +exportThread :: NamedThread +exportThread = namedThread "Exporter" $ runEvery (Seconds 30) <~> do + -- We already waited two seconds as a simple rate limiter. + -- Next, wait until at least one commit has been made + void getExportCommits + -- Now see if now's a good time to push. + void $ exportToRemotes =<< exportTargets + +{- We want to avoid exporting to remotes that are marked readonly. + - + - Also, avoid exporting to local remotes we can easily tell are not available, + - to avoid ugly messages when a removable drive is not attached. + -} +exportTargets :: Assistant [Remote] +exportTargets = liftAnnex . filterM (Remote.checkAvailable True) + =<< candidates <$> getDaemonStatus + where + candidates = filter (not . Remote.readonly) . exportRemotes + +exportToRemotes :: [Remote] -> Assistant () +exportToRemotes rs = do + -- This is a long-duration action which runs in the Annex monad, + -- so don't just liftAnnex to run it; fork the Annex state. + runner <- liftAnnex $ forkState $ + forM rs $ \r -> do + Annex.changeState $ \st -> st { Annex.errcounter = 0 } + start <- liftIO getCurrentTime + void $ Command.Sync.seekExportContent Nothing rs + =<< getCurrentBranch + -- Look at command error counter to see if the export + -- didn't work. + failed <- (> 0) <$> Annex.getState Annex.errcounter + Annex.changeState $ \st -> st { Annex.errcounter = 0 } + return $ if failed + then Just (r, start) + else Nothing + failed <- catMaybes + <$> (liftAnnex =<< liftIO . wait =<< liftIO (async runner)) + unless (null failed) $ do + v <- getAssistant failedExportMap + changeFailedPushMap v $ M.union $ M.fromList failed diff --git a/Assistant/Threads/Glacier.hs b/Assistant/Threads/Glacier.hs new file mode 100644 index 0000000000..d5a20e908f --- /dev/null +++ b/Assistant/Threads/Glacier.hs @@ -0,0 +1,44 @@ +{- git-annex assistant Amazon Glacier retrieval + - + - Copyright 2012 Joey Hess + - + - Licensed under the GNU AGPL version 3 or higher. + -} + +{-# LANGUAGE CPP #-} +{-# LANGUAGE OverloadedStrings #-} + +module Assistant.Threads.Glacier where + +import Assistant.Common +import Utility.ThreadScheduler +import qualified Types.Remote as Remote +import qualified Remote.Glacier as Glacier +import Types.Transfer +import Logs.Transfer +import Assistant.DaemonStatus +import Assistant.TransferQueue + +import qualified Data.Set as S + +{- Wakes up every half hour and checks if any glacier remotes have failed + - downloads. If so, runs glacier-cli to check if the files are now + - available, and queues the downloads. -} +glacierThread :: NamedThread +glacierThread = namedThread "Glacier" $ runEvery (Seconds 3600) <~> go + where + isglacier r = Remote.remotetype r == Glacier.remote + go = do + rs <- filter isglacier . downloadRemotes <$> getDaemonStatus + forM_ rs $ \r -> + check r =<< liftAnnex (getFailedTransfers $ Remote.uuid r) + check _ [] = noop + check r l = do + let keys = map getkey l + (availkeys, failedkeys) <- liftAnnex $ Glacier.jobList r keys + let s = S.fromList (failedkeys ++ availkeys) + let l' = filter (\p -> S.member (getkey p) s) l + forM_ l' $ \(t, info) -> do + liftAnnex $ removeFailedTransfer t + queueTransferWhenSmall "object available from glacier" (associatedFile info) t r + getkey = transferKey . fst diff --git a/Assistant/Threads/Merger.hs b/Assistant/Threads/Merger.hs new file mode 100644 index 0000000000..7b9db70abf --- /dev/null +++ b/Assistant/Threads/Merger.hs @@ -0,0 +1,131 @@ +{- git-annex assistant git merge thread + - + - Copyright 2012-2021 Joey Hess + - + - Licensed under the GNU AGPL version 3 or higher. + -} + +{-# LANGUAGE OverloadedStrings #-} + +module Assistant.Threads.Merger where + +import Assistant.Common +import Assistant.TransferQueue +import Assistant.BranchChange +import Assistant.Sync +import Utility.DirWatcher +import Utility.DirWatcher.Types +import Utility.Directory.Create +import Annex.CurrentBranch +import Assistant.Commits +import qualified Annex +import qualified Annex.Branch +import qualified Git +import qualified Git.Branch +import qualified Git.Ref +import qualified Command.Sync + +import qualified System.FilePath.ByteString as P + +{- This thread watches for changes to .git/refs/, and handles incoming + - pushes. -} +mergeThread :: NamedThread +mergeThread = namedThread "Merger" $ do + g <- liftAnnex gitRepo + let gitd = Git.localGitDir g + let dir = gitd P. "refs" + liftIO $ createDirectoryUnder [gitd] dir + let hook a = Just <$> asIO2 (runHandler a) + changehook <- hook onChange + errhook <- hook onErr + let hooks = mkWatchHooks + { addHook = changehook + , modifyHook = changehook + , errHook = errhook + } + void $ liftIO $ watchDir (fromRawFilePath dir) (const False) True hooks id + debug ["watching", fromRawFilePath dir] + +type Handler = FilePath -> Assistant () + +{- Runs an action handler. + - + - Exceptions are ignored, otherwise a whole thread could be crashed. + -} +runHandler :: Handler -> FilePath -> Maybe FileStatus -> Assistant () +runHandler handler file _filestatus = + either (liftIO . print) (const noop) =<< tryIO <~> handler file + +{- Called when there's an error with inotify. -} +onErr :: Handler +onErr = giveup + +{- Called when a new branch ref is written, or a branch ref is modified. + - + - At startup, synthetic add events fire, causing this to run, but that's + - ok; it ensures that any changes pushed since the last time the assistant + - ran are merged in. + -} +onChange :: Handler +onChange file + | ".lock" `isSuffixOf` file = noop + | isAnnexBranch file = do + branchChanged + diverged <- liftAnnex Annex.Branch.forceUpdate >>= return . \case + u@(Annex.Branch.UpdateMade {}) -> Annex.Branch.refsWereMerged u + (Annex.Branch.UpdateFailedPermissions {}) -> True + when diverged $ do + updateExportTreeFromLogAll + queueDeferredDownloads "retrying deferred download" Later + | otherwise = mergecurrent + where + changedbranch = fileToBranch file + + mergecurrent = + mergecurrent' =<< liftAnnex getCurrentBranch + mergecurrent' currbranch@(Just b, _) + | changedbranch `isRelatedTo` b = do + whenM (liftAnnex $ inRepo $ Git.Branch.changed b changedbranch) $ do + debug + [ "merging", Git.fromRef changedbranch + , "into", Git.fromRef b + ] + void $ liftAnnex $ do + cmode <- annexCommitMode <$> Annex.getGitConfig + -- Allow merging unrelated histories. + mc <- Command.Sync.mergeConfig True + Command.Sync.merge + currbranch + mc + def + cmode + [changedbranch] + recordCommit + | changedbranch == b = + -- Record commit so the pusher pushes it out. + -- This makes sure pushes happen when + -- annex.autocommit=false + recordCommit + mergecurrent' _ = noop + +{- Is the first branch a synced branch or remote tracking branch related + - to the second branch, which should be merged into it? -} +isRelatedTo :: Git.Ref -> Git.Ref -> Bool +isRelatedTo x y + | basex /= takeDirectory basex ++ "/" ++ basey = False + | "/synced/" `isInfixOf` Git.fromRef x = True + | "refs/remotes/" `isPrefixOf` Git.fromRef x = True + | otherwise = False + where + basex = Git.fromRef $ Git.Ref.base x + basey = Git.fromRef $ Git.Ref.base y + +isAnnexBranch :: FilePath -> Bool +isAnnexBranch f = n `isSuffixOf` f + where + n = '/' : Git.fromRef Annex.Branch.name + +fileToBranch :: FilePath -> Git.Ref +fileToBranch f = Git.Ref $ encodeBS $ "refs" base + where + base = Prelude.last $ split "/refs/" f diff --git a/Assistant/Threads/MountWatcher.hs b/Assistant/Threads/MountWatcher.hs new file mode 100644 index 0000000000..11997fbd71 --- /dev/null +++ b/Assistant/Threads/MountWatcher.hs @@ -0,0 +1,182 @@ +{- git-annex assistant mount watcher, using either dbus or mtab polling + - + - Copyright 2012 Joey Hess + - + - Licensed under the GNU AGPL version 3 or higher. + -} + +{-# LANGUAGE CPP #-} +{-# LANGUAGE OverloadedStrings #-} + +module Assistant.Threads.MountWatcher where + +import Assistant.Common +import Assistant.DaemonStatus +import Assistant.Sync +import qualified Annex +import qualified Git +import Utility.ThreadScheduler +import Utility.Mounts +import Remote.List +import qualified Types.Remote as Remote +import Assistant.Types.UrlRenderer +import Assistant.Fsck + +import qualified Data.Set as S + +#if WITH_DBUS +import Utility.DBus +import DBus.Client +import DBus +import Data.Word (Word32) +import Control.Concurrent +import qualified Control.Exception as E +#else +#ifdef linux_HOST_OS +#warning Building without dbus support; will use mtab polling +#endif +#endif + +mountWatcherThread :: UrlRenderer -> NamedThread +mountWatcherThread urlrenderer = namedThread "MountWatcher" $ +#if WITH_DBUS + dbusThread urlrenderer +#else + pollingThread urlrenderer +#endif + +#if WITH_DBUS + +dbusThread :: UrlRenderer -> Assistant () +dbusThread urlrenderer = do + runclient <- asIO1 go + r <- liftIO $ E.try $ runClient getSystemAddress runclient + either onerr (const noop) r + where + go client = ifM (checkMountMonitor client) + ( do + {- Store the current mount points in an MVar, to be + - compared later. We could in theory work out the + - mount point from the dbus message, but this is + - easier. -} + mvar <- liftIO $ newMVar =<< currentMountPoints + handleevent <- asIO1 $ \_event -> do + nowmounted <- liftIO $ currentMountPoints + wasmounted <- liftIO $ swapMVar mvar nowmounted + handleMounts urlrenderer wasmounted nowmounted + liftIO $ forM_ mountChanged $ \matcher -> + void $ addMatch client matcher handleevent + , do + liftAnnex $ + warning "No known volume monitor available through dbus; falling back to mtab polling" + pollingThread urlrenderer + ) + onerr :: E.SomeException -> Assistant () + onerr e = do + liftAnnex $ + warning $ UnquotedString $ "dbus failed; falling back to mtab polling (" ++ show e ++ ")" + pollingThread urlrenderer + +{- Examine the list of services connected to dbus, to see if there + - are any we can use to monitor mounts. If not, will attempt to start one. -} +checkMountMonitor :: Client -> Assistant Bool +checkMountMonitor client = do + running <- filter (`elem` usableservices) + <$> liftIO (listServiceNames client) + case running of + [] -> startOneService client startableservices + (service:_) -> do + debug [ "Using running DBUS service" + , service + , "to monitor mount events." + ] + return True + where + startableservices = [udisks2] + usableservices = startableservices + udisks2 = "org.freedesktop.UDisks2" + +startOneService :: Client -> [ServiceName] -> Assistant Bool +startOneService _ [] = return False +startOneService client (x:xs) = do + _ <- liftIO $ tryNonAsync $ callDBus client "StartServiceByName" + [toVariant x, toVariant (0 :: Word32)] + ifM (liftIO $ elem x <$> listServiceNames client) + ( do + debug + [ "Started DBUS service", x + , "to monitor mount events." + ] + return True + , startOneService client xs + ) + +{- Filter matching events received when drives are mounted and unmounted. -} +mountChanged :: [MatchRule] +mountChanged = [udisks2mount, udisks2umount] + where + udisks2mount = matchAny + { matchPath = Just "/org/freedesktop/UDisks2" + , matchInterface = Just "org.freedesktop.DBus.ObjectManager" + , matchMember = Just "InterfacesAdded" + } + udisks2umount = matchAny + { matchPath = Just "/org/freedesktop/UDisks2" + , matchInterface = Just "org.freedesktop.DBus.ObjectManager" + , matchMember = Just "InterfacesRemoved" + } +#endif + +pollingThread :: UrlRenderer -> Assistant () +pollingThread urlrenderer = go =<< liftIO currentMountPoints + where + go wasmounted = do + liftIO $ threadDelaySeconds (Seconds 10) + nowmounted <- liftIO currentMountPoints + handleMounts urlrenderer wasmounted nowmounted + go nowmounted + +handleMounts :: UrlRenderer -> MountPoints -> MountPoints -> Assistant () +handleMounts urlrenderer wasmounted nowmounted = + mapM_ (handleMount urlrenderer . mnt_dir) $ + S.toList $ newMountPoints wasmounted nowmounted + +handleMount :: UrlRenderer -> FilePath -> Assistant () +handleMount urlrenderer dir = do + debug ["detected mount of", dir] + rs <- filterM (Git.repoIsLocal <$$> liftAnnex . Remote.getRepo) + =<< remotesUnder dir + mapM_ (fsckNudge urlrenderer . Just) rs + reconnectRemotes rs + +{- Finds remotes located underneath the mount point. + - + - Updates state to include the remotes. + - + - The config of git remotes is re-read, as it may not have been available + - at startup time, or may have changed (it could even be a different + - repository at the same remote location..) + -} +remotesUnder :: FilePath -> Assistant [Remote] +remotesUnder dir = do + repotop <- liftAnnex $ fromRepo Git.repoPath + rs <- liftAnnex remoteList + pairs <- liftAnnex $ mapM (checkremote repotop) rs + let (waschanged, rs') = unzip pairs + when (or waschanged) $ do + liftAnnex $ Annex.changeState $ \s -> s { Annex.remotes = catMaybes rs' } + updateSyncRemotes + return $ mapMaybe snd $ filter fst pairs + where + checkremote repotop r = case Remote.localpath r of + Just p | dirContains (toRawFilePath dir) (absPathFrom repotop (toRawFilePath p)) -> + (,) <$> pure True <*> updateRemote r + _ -> return (False, Just r) + +type MountPoints = S.Set Mntent + +currentMountPoints :: IO MountPoints +currentMountPoints = S.fromList <$> getMounts + +newMountPoints :: MountPoints -> MountPoints -> MountPoints +newMountPoints old new = S.difference new old diff --git a/Assistant/Threads/NetWatcher.hs b/Assistant/Threads/NetWatcher.hs new file mode 100644 index 0000000000..f86872d74c --- /dev/null +++ b/Assistant/Threads/NetWatcher.hs @@ -0,0 +1,202 @@ +{- git-annex assistant network connection watcher, using dbus + - + - Copyright 2012 Joey Hess + - + - Licensed under the GNU AGPL version 3 or higher. + -} + +{-# LANGUAGE CPP #-} +{-# LANGUAGE OverloadedStrings #-} + +module Assistant.Threads.NetWatcher where + +import Assistant.Common +import Assistant.Sync +import Utility.ThreadScheduler +import qualified Types.Remote as Remote +import Assistant.DaemonStatus +import Utility.NotificationBroadcaster + +#if WITH_DBUS +import Assistant.RemoteControl +import Utility.DBus +import DBus.Client +import DBus +#else +#ifdef linux_HOST_OS +#warning Building without dbus support; will poll for network connection changes +#endif +#endif + +netWatcherThread :: NamedThread +#if WITH_DBUS +netWatcherThread = thread dbusThread +#else +netWatcherThread = thread noop +#endif + where + thread = namedThread "NetWatcher" + +{- This is a fallback for when dbus cannot be used to detect + - network connection changes, but it also ensures that + - any networked remotes that may have not been routable for a + - while (despite the local network staying up), are synced with + - periodically. + - + - Note that it does not signal the RemoteControl, because it doesn't + - know that the network has changed. + -} +netWatcherFallbackThread :: NamedThread +netWatcherFallbackThread = namedThread "NetWatcherFallback" $ + runEvery (Seconds 3600) <~> handleConnection + +#if WITH_DBUS + +dbusThread :: Assistant () +dbusThread = do + handleerr <- asIO2 onerr + runclient <- asIO1 go + liftIO $ persistentClient getSystemAddress () handleerr runclient + where + go client = ifM (checkNetMonitor client) + ( do + callback <- asIO1 connchange + liftIO $ do + listenNMConnections client callback + listenNDConnections client callback + listenWicdConnections client callback + , do + liftAnnex $ + warning "No known network monitor available through dbus; falling back to polling" + ) + connchange False = do + debug ["detected network disconnection"] + sendRemoteControl LOSTNET + connchange True = do + debug ["detected network connection"] + handleConnection + sendRemoteControl RESUME + onerr e _ = do + liftAnnex $ + warning $ UnquotedString $ "lost dbus connection; falling back to polling (" ++ show e ++ ")" + {- Wait, in hope that dbus will come back -} + liftIO $ threadDelaySeconds (Seconds 60) + +{- Examine the list of services connected to dbus, to see if there + - are any we can use to monitor network connections. -} +checkNetMonitor :: Client -> Assistant Bool +checkNetMonitor client = do + running <- liftIO $ filter (`elem` manager_addresses) + <$> listServiceNames client + case running of + [] -> return False + (service:_) -> do + debug [ "Using running DBUS service" + , service + , "to monitor network connection events." + ] + return True + where + manager_addresses = [networkmanager, networkd, wicd] + networkmanager = "org.freedesktop.NetworkManager" + networkd = "org.freedesktop.network1" + wicd = "org.wicd.daemon" + +{- Listens for systemd-networkd connections and diconnections. + - + - Connection example (once fully connected): + - [Variant {"OperationalState": Variant "routable"}] + - + - Disconnection example: + - [Variant {"OperationalState": Variant _}] + -} +listenNDConnections :: Client -> (Bool -> IO ()) -> IO () +listenNDConnections client setconnected = + void $ addMatch client matcher + $ \event -> mapM_ handleevent + (map dictionaryItems $ mapMaybe fromVariant $ signalBody event) + where + matcher = matchAny + { matchInterface = Just "org.freedesktop.DBus.Properties" + , matchMember = Just "PropertiesChanged" + } + operational_state_key = toVariant ("OperationalState" :: String) + routable = toVariant $ toVariant ("routable" :: String) + handleevent m = case lookup operational_state_key m of + Just state -> if state == routable + then setconnected True + else setconnected False + Nothing -> noop + +{- Listens for NetworkManager connections and diconnections. + - + - Connection example (once fully connected): + - [Variant {"ActivatingConnection": Variant (ObjectPath "/"), "PrimaryConnection": Variant (ObjectPath "/org/freedesktop/NetworkManager/ActiveConnection/34"), "State": Variant 70}] + - + - Disconnection example: + - [Variant {"ActiveConnections": Variant []}] + -} +listenNMConnections :: Client -> (Bool -> IO ()) -> IO () +listenNMConnections client setconnected = + void $ addMatch client matcher + $ \event -> mapM_ handleevent + (map dictionaryItems $ mapMaybe fromVariant $ signalBody event) + where + matcher = matchAny + { matchInterface = Just "org.freedesktop.NetworkManager" + , matchMember = Just "PropertiesChanged" + } + nm_active_connections_key = toVariant ("ActiveConnections" :: String) + nm_activatingconnection_key = toVariant ("ActivatingConnection" :: String) + noconnections = Just $ toVariant $ toVariant ([] :: [ObjectPath]) + rootconnection = Just $ toVariant $ toVariant $ objectPath_ "/" + handleevent m + | lookup nm_active_connections_key m == noconnections = + setconnected False + | lookup nm_activatingconnection_key m == rootconnection = + setconnected True + | otherwise = noop + +{- Listens for Wicd connections and disconnections. + - + - Connection example: + - ConnectResultsSent: + - Variant "success" + - + - Disconnection example: + - StatusChanged + - [Variant 0, Variant [Variant ""]] + -} +listenWicdConnections :: Client -> (Bool -> IO ()) -> IO () +listenWicdConnections client setconnected = do + match connmatcher $ \event -> + when (any (== wicd_success) (signalBody event)) $ + setconnected True + match statusmatcher $ \event -> handleevent (signalBody event) + where + connmatcher = matchAny + { matchInterface = Just "org.wicd.daemon" + , matchMember = Just "ConnectResultsSent" + } + statusmatcher = matchAny + { matchInterface = Just "org.wicd.daemon" + , matchMember = Just "StatusChanged" + } + wicd_success = toVariant ("success" :: String) + wicd_disconnected = toVariant [toVariant ("" :: String)] + handleevent status + | any (== wicd_disconnected) status = setconnected False + | otherwise = noop + match matcher a = + void $ addMatch client matcher a +#endif + +handleConnection :: Assistant () +handleConnection = do + liftIO . sendNotification . networkConnectedNotifier =<< getDaemonStatus + reconnectRemotes =<< networkRemotes + +{- Network remotes to sync with. -} +networkRemotes :: Assistant [Remote] +networkRemotes = filter (isNothing . Remote.localpath) . syncRemotes + <$> getDaemonStatus diff --git a/Assistant/Threads/PairListener.hs b/Assistant/Threads/PairListener.hs new file mode 100644 index 0000000000..0199b79f84 --- /dev/null +++ b/Assistant/Threads/PairListener.hs @@ -0,0 +1,156 @@ +{- git-annex assistant thread to listen for incoming pairing traffic + - + - Copyright 2012 Joey Hess + - + - Licensed under the GNU AGPL version 3 or higher. + -} + +{-# LANGUAGE OverloadedStrings #-} + +module Assistant.Threads.PairListener where + +import Assistant.Common +import Assistant.Pairing +import Assistant.Pairing.Network +import Assistant.Pairing.MakeRemote +import Assistant.WebApp (UrlRenderer) +import Assistant.WebApp.Types +import Assistant.Alert +import Assistant.DaemonStatus +import Utility.ThreadScheduler +import Git + +import Network.Multicast +import Network.Socket +import qualified Data.ByteString as B +import qualified Data.ByteString.UTF8 as BU8 +import qualified Network.Socket.ByteString as B +import qualified Data.Text as T + +pairListenerThread :: UrlRenderer -> NamedThread +pairListenerThread urlrenderer = namedThread "PairListener" $ do + listener <- asIO1 $ go [] [] + liftIO $ withSocketsDo $ + runEvery (Seconds 60) $ void $ tryIO $ + listener =<< getsock + where + {- Note this can crash if there's no network interface, + - or only one like lo that doesn't support multicast. -} + getsock = multicastReceiver (multicastAddress IPv4AddrClass) pairingPort + + go reqs cache sock = liftIO (getmsg sock B.empty) >>= \msg -> case readish (BU8.toString msg) of + Nothing -> go reqs cache sock + Just m -> do + debug ["received", show msg] + (pip, verified) <- verificationCheck m + =<< (pairingInProgress <$> getDaemonStatus) + let wrongstage = maybe False (\p -> pairMsgStage m <= inProgressPairStage p) pip + let fromus = maybe False (\p -> remoteSshPubKey (pairMsgData m) == remoteSshPubKey (inProgressPairData p)) pip + case (wrongstage, fromus, checkSane (pairMsgData m), pairMsgStage m) of + (_, True, _, _) -> do + debug ["ignoring message that looped back"] + go reqs cache sock + (_, _, False, _) -> do + liftAnnex $ warning $ UnquotedString $ + "illegal control characters in pairing message; ignoring (" ++ show (pairMsgData m) ++ ")" + go reqs cache sock + -- PairReq starts a pairing process, so a + -- new one is always heeded, even if + -- some other pairing is in process. + (_, _, _, PairReq) -> if m `elem` reqs + then go reqs (invalidateCache m cache) sock + else do + pairReqReceived verified urlrenderer m + go (m:take 10 reqs) (invalidateCache m cache) sock + (True, _, _, _) -> do + debug + ["ignoring out of order message" + , show (pairMsgStage m) + , "expected" + , show (succ . inProgressPairStage <$> pip) + ] + go reqs cache sock + (_, _, _, PairAck) -> do + cache' <- pairAckReceived verified pip m cache + go reqs cache' sock + (_,_ , _, PairDone) -> do + pairDoneReceived verified pip m + go reqs cache sock + + {- As well as verifying the message using the shared secret, + - check its UUID against the UUID we have stored. If + - they're the same, someone is sending bogus messages, + - which could be an attempt to brute force the shared secret. -} + verificationCheck _ Nothing = return (Nothing, False) + verificationCheck m (Just pip) + | not verified && sameuuid = do + liftAnnex $ warning + "detected possible pairing brute force attempt; disabled pairing" + stopSending pip + return (Nothing, False) + | otherwise = return (Just pip, verified && sameuuid) + where + verified = verifiedPairMsg m pip + sameuuid = pairUUID (inProgressPairData pip) == pairUUID (pairMsgData m) + + {- PairReqs invalidate the cache of recently finished pairings. + - This is so that, if a new pairing is started with the + - same secret used before, a bogus PairDone is not sent. -} + invalidateCache msg = filter (not . verifiedPairMsg msg) + + getmsg sock c = do + (msg, _) <- B.recvFrom sock chunksz + if B.length msg < chunksz + then return $ c <> msg + else getmsg sock $ c <> msg + where + chunksz = 1024 + +{- Show an alert when a PairReq is seen. -} +pairReqReceived :: Bool -> UrlRenderer -> PairMsg -> Assistant () +pairReqReceived True _ _ = noop -- ignore our own PairReq +pairReqReceived False urlrenderer msg = do + button <- mkAlertButton True (T.pack "Respond") urlrenderer (FinishLocalPairR msg) + void $ addAlert $ pairRequestReceivedAlert repo button + where + repo = pairRepo msg + +{- When a verified PairAck is seen, a host is ready to pair with us, and has + - already configured our ssh key. Stop sending PairReqs, finish the pairing, + - and send a single PairDone. -} +pairAckReceived :: Bool -> Maybe PairingInProgress -> PairMsg -> [PairingInProgress] -> Assistant [PairingInProgress] +pairAckReceived True (Just pip) msg cache = do + stopSending pip + repodir <- fromRawFilePath . repoPath <$> liftAnnex gitRepo + liftIO $ setupAuthorizedKeys msg repodir + finishedLocalPairing msg (inProgressSshKeyPair pip) + startSending pip PairDone $ multicastPairMsg + (Just 1) (inProgressSecret pip) (inProgressPairData pip) + return $ pip : take 10 cache +{- A stale PairAck might also be seen, after we've finished pairing. + - Perhaps our PairDone was not received. To handle this, we keep + - a cache of recently finished pairings, and re-send PairDone in + - response to stale PairAcks for them. -} +pairAckReceived _ _ msg cache = do + let pips = filter (verifiedPairMsg msg) cache + unless (null pips) $ + forM_ pips $ \pip -> + startSending pip PairDone $ multicastPairMsg + (Just 1) (inProgressSecret pip) (inProgressPairData pip) + return cache + +{- If we get a verified PairDone, the host has accepted our PairAck, and + - has paired with us. Stop sending PairAcks, and finish pairing with them. + - + - TODO: Should third-party hosts remove their pair request alert when they + - see a PairDone? + - Complication: The user could have already clicked on the alert and be + - entering the secret. Would be better to start a fresh pair request in this + - situation. + -} +pairDoneReceived :: Bool -> Maybe PairingInProgress -> PairMsg -> Assistant () +pairDoneReceived False _ _ = noop -- not verified +pairDoneReceived True Nothing _ = noop -- not in progress +pairDoneReceived True (Just pip) msg = do + stopSending pip + finishedLocalPairing msg (inProgressSshKeyPair pip) diff --git a/Assistant/Threads/ProblemFixer.hs b/Assistant/Threads/ProblemFixer.hs new file mode 100644 index 0000000000..2b5829037f --- /dev/null +++ b/Assistant/Threads/ProblemFixer.hs @@ -0,0 +1,73 @@ +{- git-annex assistant thread to handle fixing problems with repositories + - + - Copyright 2013 Joey Hess + - + - Licensed under the GNU AGPL version 3 or higher. + -} + +module Assistant.Threads.ProblemFixer ( + problemFixerThread +) where + +import Assistant.Common +import Assistant.Types.RepoProblem +import Assistant.RepoProblem +import Assistant.Types.UrlRenderer +import Assistant.Alert +import Remote +import qualified Types.Remote as Remote +import qualified Git.Fsck +import Assistant.Repair +import qualified Git +import Annex.UUID +import Utility.ThreadScheduler + +{- Waits for problems with a repo, and tries to fsck the repo and repair + - the problem. -} +problemFixerThread :: UrlRenderer -> NamedThread +problemFixerThread urlrenderer = namedThread "ProblemFixer" $ + go =<< getRepoProblems + where + go problems = do + mapM_ (handleProblem urlrenderer) problems + liftIO $ threadDelaySeconds (Seconds 60) + -- Problems may have been re-reported while they were being + -- fixed, so ignore those. If a new unique problem happened + -- 60 seconds after the last was fixed, we're unlikely + -- to do much good anyway. + go =<< filter (\p -> not (any (sameRepoProblem p) problems)) + <$> getRepoProblems + +handleProblem :: UrlRenderer -> RepoProblem -> Assistant () +handleProblem urlrenderer repoproblem = do + fixed <- ifM ((==) (problemUUID repoproblem) <$> liftAnnex getUUID) + ( handleLocalRepoProblem urlrenderer + , maybe (return False) (handleRemoteProblem urlrenderer) + =<< liftAnnex (remoteFromUUID $ problemUUID repoproblem) + ) + when fixed $ + liftIO $ afterFix repoproblem + +handleRemoteProblem :: UrlRenderer -> Remote -> Assistant Bool +handleRemoteProblem urlrenderer rmt = do + repo <- liftAnnex $ Remote.getRepo rmt + handleRemoteProblem' repo urlrenderer rmt + +handleRemoteProblem' :: Git.Repo -> UrlRenderer -> Remote -> Assistant Bool +handleRemoteProblem' repo urlrenderer rmt + | Git.repoIsLocal repo && not (Git.repoIsLocalUnknown repo) = + ifM (liftAnnex $ checkAvailable True rmt) + ( do + fixedlocks <- repairStaleGitLocks repo + fsckresults <- showFscking urlrenderer (Just rmt) $ tryNonAsync $ + Git.Fsck.findBroken True True repo + repaired <- repairWhenNecessary urlrenderer (Remote.uuid rmt) (Just rmt) fsckresults + return $ fixedlocks || repaired + , return False + ) + | otherwise = return False + +{- This is not yet used, and should probably do a fsck. -} +handleLocalRepoProblem :: UrlRenderer -> Assistant Bool +handleLocalRepoProblem _urlrenderer = do + repairStaleGitLocks =<< liftAnnex gitRepo diff --git a/Assistant/Threads/Pusher.hs b/Assistant/Threads/Pusher.hs new file mode 100644 index 0000000000..3d7b6345c0 --- /dev/null +++ b/Assistant/Threads/Pusher.hs @@ -0,0 +1,50 @@ +{- git-annex assistant git pushing thread + - + - Copyright 2012 Joey Hess + - + - Licensed under the GNU AGPL version 3 or higher. + -} + +module Assistant.Threads.Pusher where + +import Assistant.Common +import Assistant.Commits +import Assistant.Pushes +import Assistant.DaemonStatus +import Assistant.Sync +import Utility.ThreadScheduler +import qualified Remote +import qualified Types.Remote as Remote + +{- This thread retries pushes that failed before. -} +pushRetryThread :: NamedThread +pushRetryThread = namedThread "PushRetrier" $ runEvery (Seconds halfhour) <~> do + -- We already waited half an hour, now wait until there are failed + -- pushes to retry. + topush <- getFailedPushesBefore (fromIntegral halfhour) + =<< getAssistant failedPushMap + unless (null topush) $ do + debug ["retrying", show (length topush), "failed pushes"] + void $ pushToRemotes topush + where + halfhour = 1800 + +{- This thread pushes git commits out to remotes soon after they are made. -} +pushThread :: NamedThread +pushThread = namedThread "Pusher" $ runEvery (Seconds 2) <~> do + -- We already waited two seconds as a simple rate limiter. + -- Next, wait until at least one commit has been made + void getCommits + -- Now see if now's a good time to push. + void $ pushToRemotes =<< pushTargets + +{- We want to avoid pushing to remotes that are marked readonly. + - + - Also, avoid pushing to local remotes we can easily tell are not available, + - to avoid ugly messages when a removable drive is not attached. + -} +pushTargets :: Assistant [Remote] +pushTargets = liftAnnex . filterM (Remote.checkAvailable True) + =<< candidates <$> getDaemonStatus + where + candidates = filter (not . Remote.readonly) . syncGitRemotes diff --git a/Assistant/Threads/RemoteControl.hs b/Assistant/Threads/RemoteControl.hs new file mode 100644 index 0000000000..51f5e4b9b4 --- /dev/null +++ b/Assistant/Threads/RemoteControl.hs @@ -0,0 +1,128 @@ +{- git-annex assistant communication with remotedaemon + - + - Copyright 2014 Joey Hess + - + - Licensed under the GNU AGPL version 3 or higher. + -} + +module Assistant.Threads.RemoteControl where + +import Assistant.Common +import RemoteDaemon.Types +import Annex.Path +import Utility.Batch +import Utility.SimpleProtocol +import Assistant.Alert +import Assistant.Alert.Utility +import Assistant.DaemonStatus +import qualified Git +import qualified Git.Types as Git +import qualified Remote +import qualified Types.Remote as Remote + +import Control.Concurrent +import Control.Concurrent.Async +import Network.URI +import qualified Data.Map as M +import qualified Data.Set as S + +remoteControlThread :: NamedThread +remoteControlThread = namedThread "RemoteControl" $ do + program <- liftIO programPath + (cmd, params) <- liftIO $ toBatchCommand + (program, [Param "remotedaemon", Param "--foreground"]) + let p = proc cmd (toCommand params) + bracket (setup p) cleanup (go p) + where + setup p = liftIO $ createProcess $ p + { std_in = CreatePipe + , std_out = CreatePipe + } + cleanup = liftIO . cleanupProcess + + go p (Just toh, Just fromh, _, pid) = do + urimap <- liftIO . newMVar =<< liftAnnex getURIMap + + controller <- asIO $ remoteControllerThread toh + responder <- asIO $ remoteResponderThread fromh urimap + + -- run controller and responder until the remotedaemon dies + liftIO $ void $ tryNonAsync $ + controller `concurrently` responder + debug ["remotedaemon exited"] + liftIO $ forceSuccessProcess p pid + go _ _ = error "internal" + + +-- feed from the remoteControl channel into the remotedaemon +remoteControllerThread :: Handle -> Assistant () +remoteControllerThread toh = do + clicker <- getAssistant remoteControl + forever $ do + msg <- liftIO $ readChan clicker + debug [show msg] + liftIO $ do + hPutStrLn toh $ unwords $ formatMessage msg + hFlush toh + +-- read status messages emitted by the remotedaemon and handle them +remoteResponderThread :: Handle -> MVar (M.Map URI Remote) -> Assistant () +remoteResponderThread fromh urimap = go M.empty + where + go syncalerts = do + l <- liftIO $ hGetLine fromh + debug [l] + case parseMessage l of + Just (CONNECTED uri) -> changeconnected S.insert uri + Just (DISCONNECTED uri) -> changeconnected S.delete uri + Just (SYNCING uri) -> withr uri $ \r -> + if M.member (Remote.uuid r) syncalerts + then go syncalerts + else do + i <- addAlert $ syncAlert [r] + go (M.insert (Remote.uuid r) i syncalerts) + Just (DONESYNCING uri status) -> withr uri $ \r -> + case M.lookup (Remote.uuid r) syncalerts of + Nothing -> cont + Just i -> do + let (succeeded, failed) = if status + then ([r], []) + else ([], [r]) + updateAlertMap $ mergeAlert i $ + syncResultAlert succeeded failed + go (M.delete (Remote.uuid r) syncalerts) + Just (WARNING (RemoteURI uri) msg) -> do + void $ addAlert $ + warningAlert ("RemoteControl "++ show uri) msg + cont + Nothing -> do + debug ["protocol error from remotedaemon: ", l] + cont + where + cont = go syncalerts + withr uri = withRemote uri urimap cont + changeconnected sm uri = withr uri $ \r -> do + changeCurrentlyConnected $ sm $ Remote.uuid r + cont + +getURIMap :: Annex (M.Map URI Remote) +getURIMap = Remote.remoteMap' id (\r -> mkk . Git.location <$> Remote.getRepo r) + where + mkk (Git.Url u) = Just u + mkk _ = Nothing + +withRemote + :: RemoteURI + -> MVar (M.Map URI Remote) + -> Assistant a + -> (Remote -> Assistant a) + -> Assistant a +withRemote (RemoteURI uri) remotemap noremote a = do + m <- liftIO $ readMVar remotemap + case M.lookup uri m of + Just r -> a r + Nothing -> do + {- Reload map, in case a new remote has been added. -} + m' <- liftAnnex getURIMap + void $ liftIO $ swapMVar remotemap $ m' + maybe noremote a (M.lookup uri m') diff --git a/Assistant/Threads/SanityChecker.hs b/Assistant/Threads/SanityChecker.hs new file mode 100644 index 0000000000..563e038e78 --- /dev/null +++ b/Assistant/Threads/SanityChecker.hs @@ -0,0 +1,274 @@ +{- git-annex assistant sanity checker + - + - Copyright 2012, 2013 Joey Hess + - + - Licensed under the GNU AGPL version 3 or higher. + -} + +{-# LANGUAGE CPP #-} +{-# LANGUAGE OverloadedStrings #-} + +module Assistant.Threads.SanityChecker ( + sanityCheckerStartupThread, + sanityCheckerDailyThread, + sanityCheckerHourlyThread +) where + +import Assistant.Common +import Assistant.DaemonStatus +import Assistant.Alert +import Assistant.Repair +import Assistant.Drop +import Assistant.Ssh +import Assistant.TransferQueue +import Assistant.Types.UrlRenderer +import Assistant.Restart +import qualified Annex.Branch +import qualified Git +import qualified Git.LsFiles +import qualified Git.Command.Batch +import qualified Git.Config +import Utility.ThreadScheduler +import qualified Assistant.Threads.Watcher as Watcher +import Utility.Batch +import Utility.NotificationBroadcaster +import Utility.HumanTime +import Utility.Tense +import Git.Repair +import Git.Index +import Assistant.Unused +import Logs.Unused +import Types.Transfer +import Annex.Path +import Annex.Tmp +import qualified Annex +import qualified Utility.RawFilePath as R +#ifdef WITH_WEBAPP +import Assistant.WebApp.Types +#endif +#ifndef mingw32_HOST_OS +import Utility.LogFile +import Utility.DiskFree +#endif + +import Data.Time.Clock.POSIX +import qualified Data.Text as T +import System.PosixCompat.Files (statusChangeTime, isSymbolicLink) + +{- This thread runs once at startup, and most other threads wait for it + - to finish. (However, the webapp thread does not, to prevent the UI + - being nonresponsive.) -} +sanityCheckerStartupThread :: Maybe Duration -> NamedThread +sanityCheckerStartupThread startupdelay = namedThreadUnchecked "SanityCheckerStartup" $ do + {- Stale git locks can prevent commits from happening, etc. -} + void $ repairStaleGitLocks =<< liftAnnex gitRepo + + {- A corrupt index file can prevent the assistant from working at + - all, so detect and repair. -} + ifM (not <$> liftAnnex (inRepo checkIndexFast)) + ( do + debug ["corrupt index file found at startup; removing and restaging"] + liftAnnex $ inRepo $ removeWhenExistsWith R.removeLink . indexFile + {- Normally the startup scan avoids re-staging files, + - but with the index deleted, everything needs to be + - restaged. -} + modifyDaemonStatus_ $ \s -> s { forceRestage = True } + , whenM (liftAnnex $ inRepo missingIndex) $ do + debug ["no index file; restaging"] + modifyDaemonStatus_ $ \s -> s { forceRestage = True } + ) + {- If the git-annex index file is corrupt, it's ok to remove it; + - the data from the git-annex branch will be used, and the index + - will be automatically regenerated. -} + unlessM (liftAnnex $ Annex.Branch.withIndex $ inRepo $ Git.Repair.checkIndexFast) $ do + debug ["corrupt annex/index file found at startup; removing"] + liftAnnex $ liftIO . removeWhenExistsWith R.removeLink =<< fromRepo gitAnnexIndex + + {- Fix up ssh remotes set up by past versions of the assistant. -} + liftIO $ fixUpSshRemotes + + {- Clean up old temp files. -} + void $ liftAnnex $ tryNonAsync $ cleanupOtherTmp + + {- If there's a startup delay, it's done here. -} + liftIO $ maybe noop (threadDelaySeconds . Seconds . fromIntegral . durationSeconds) startupdelay + + {- Notify other threads that the startup sanity check is done. -} + status <- getDaemonStatus + liftIO $ sendNotification $ startupSanityCheckNotifier status + +{- This thread wakes up hourly for inxepensive frequent sanity checks. -} +sanityCheckerHourlyThread :: NamedThread +sanityCheckerHourlyThread = namedThread "SanityCheckerHourly" $ forever $ do + liftIO $ threadDelaySeconds $ Seconds oneHour + hourlyCheck + +{- This thread wakes up daily to make sure the tree is in good shape. -} +sanityCheckerDailyThread :: UrlRenderer -> NamedThread +sanityCheckerDailyThread urlrenderer = namedThread "SanityCheckerDaily" $ forever $ do + waitForNextCheck + + debug ["starting sanity check"] + void $ alertWhile sanityCheckAlert go + debug ["sanity check complete"] + where + go = do + modifyDaemonStatus_ $ \s -> s { sanityCheckRunning = True } + + now <- liftIO getPOSIXTime -- before check started + r <- either showerr return + =<< (tryIO . batch) <~> dailyCheck urlrenderer + + modifyDaemonStatus_ $ \s -> s + { sanityCheckRunning = False + , lastSanityCheck = Just now + } + + return r + + showerr e = do + liftAnnex $ warning $ UnquotedString $ show e + return False + +{- Only run one check per day, from the time of the last check. -} +waitForNextCheck :: Assistant () +waitForNextCheck = do + v <- lastSanityCheck <$> getDaemonStatus + now <- liftIO getPOSIXTime + liftIO $ threadDelaySeconds $ Seconds $ calcdelay now v + where + calcdelay _ Nothing = oneDay + calcdelay now (Just lastcheck) + | lastcheck < now = max oneDay $ + oneDay - truncate (now - lastcheck) + | otherwise = oneDay + +{- It's important to stay out of the Annex monad as much as possible while + - running potentially expensive parts of this check, since remaining in it + - will block the watcher. -} +dailyCheck :: UrlRenderer -> Assistant Bool +dailyCheck urlrenderer = do + checkRepoExists + + g <- liftAnnex gitRepo + batchmaker <- liftIO getBatchCommandMaker + + -- Find old unstaged symlinks, and add them to git. + (unstaged, cleanup) <- liftIO $ Git.LsFiles.notInRepo [] False ["."] g + now <- liftIO getPOSIXTime + forM_ unstaged $ \file -> do + ms <- liftIO $ catchMaybeIO $ R.getSymbolicLinkStatus file + case ms of + Just s | toonew (statusChangeTime s) now -> noop + | isSymbolicLink s -> addsymlink (fromRawFilePath file) ms + _ -> noop + liftIO $ void cleanup + + {- Allow git-gc to run once per day. More frequent gc is avoided + - by default to avoid slowing things down. Only run repacks when 100x + - the usual number of loose objects are present; we tend + - to have a lot of small objects and they should not be a + - significant size. -} + when (Git.Config.getMaybe "gc.auto" g == Just "0") $ + liftIO $ void $ Git.Command.Batch.run batchmaker + [ Param "-c", Param "gc.auto=670000" + , Param "gc" + , Param "--auto" + ] g + + {- Check if the unused files found last time have been dealt with. -} + checkOldUnused urlrenderer + + {- Run git-annex unused once per day. This is run as a separate + - process to stay out of the annex monad and so it can run as a + - batch job. -} + program <- liftIO programPath + let (program', params') = batchmaker (program, [Param "unused"]) + void $ liftIO $ boolSystem program' params' + {- Invalidate unused keys cache, and queue transfers of all unused + - keys, or if no transfers are called for, drop them. -} + unused <- liftAnnex unusedKeys' + void $ liftAnnex $ setUnusedKeys unused + forM_ unused $ \k -> do + unlessM (queueTransfers "unused" Later k (AssociatedFile Nothing) Upload) $ + handleDrops "unused" True k (AssociatedFile Nothing) [] + + return True + where + toonew timestamp now = now < (realToFrac (timestamp + slop) :: POSIXTime) + slop = fromIntegral tenMinutes + insanity msg = do + liftAnnex $ warning (UnquotedString msg) + void $ addAlert $ sanityCheckFixAlert msg + addsymlink file s = do + Watcher.runHandler Watcher.onAddSymlink file s + insanity $ "found unstaged symlink: " ++ file + +hourlyCheck :: Assistant () +hourlyCheck = do + checkRepoExists +#ifndef mingw32_HOST_OS + checkLogSize 0 +#else + noop +#endif + +#ifndef mingw32_HOST_OS +{- Rotate logs once when total log file size is > 2 mb. + - + - If total log size is larger than the amount of free disk space, + - continue rotating logs until size is < 2 mb, even if this + - results in immediately losing the just logged data. + -} +checkLogSize :: Int -> Assistant () +checkLogSize n = do + f <- liftAnnex $ fromRawFilePath <$> fromRepo gitAnnexDaemonLogFile + logs <- liftIO $ listLogs f + totalsize <- liftIO $ sum <$> mapM (getFileSize . toRawFilePath) logs + when (totalsize > 2 * oneMegabyte) $ do + debug ["Rotated logs due to size:", show totalsize] + liftIO $ openLog f >>= handleToFd >>= redirLog + when (n < maxLogs + 1) $ do + df <- liftIO $ getDiskFree $ takeDirectory f + case df of + Just free + | free < fromIntegral totalsize -> + checkLogSize (n + 1) + _ -> noop + where + oneMegabyte :: Integer + oneMegabyte = 1000000 +#endif + +oneHour :: Int +oneHour = 60 * 60 + +oneDay :: Int +oneDay = 24 * oneHour + +{- If annex.expireunused is set, find any keys that have lingered unused + - for the specified duration, and remove them. + - + - Otherwise, check to see if unused keys are piling up, and let the user + - know. -} +checkOldUnused :: UrlRenderer -> Assistant () +checkOldUnused urlrenderer = go =<< annexExpireUnused <$> liftAnnex Annex.getGitConfig + where + go (Just Nothing) = noop + go (Just (Just expireunused)) = expireUnused (Just expireunused) + go Nothing = maybe noop promptconfig =<< describeUnusedWhenBig + + promptconfig msg = +#ifdef WITH_WEBAPP + do + button <- mkAlertButton True (T.pack "Configure") urlrenderer ConfigUnusedR + void $ addAlert $ unusedFilesAlert [button] $ T.unpack $ renderTense Present msg +#else + debug [show $ renderTense Past msg] +#endif + +checkRepoExists :: Assistant () +checkRepoExists = do + g <- liftAnnex gitRepo + liftIO $ unlessM (doesDirectoryExist $ fromRawFilePath $ Git.repoPath g) $ + terminateSelf diff --git a/Assistant/Threads/TransferPoller.hs b/Assistant/Threads/TransferPoller.hs new file mode 100644 index 0000000000..067bd0b022 --- /dev/null +++ b/Assistant/Threads/TransferPoller.hs @@ -0,0 +1,56 @@ +{- git-annex assistant transfer polling thread + - + - Copyright 2012 Joey Hess + - + - Licensed under the GNU AGPL version 3 or higher. + -} + +module Assistant.Threads.TransferPoller where + +import Assistant.Common +import Assistant.DaemonStatus +import Types.Transfer +import Logs.Transfer +import Utility.NotificationBroadcaster +import qualified Assistant.Threads.TransferWatcher as TransferWatcher + +import Control.Concurrent +import qualified Data.Map as M + +{- This thread polls the status of ongoing transfers, determining how much + - of each transfer is complete. -} +transferPollerThread :: NamedThread +transferPollerThread = namedThread "TransferPoller" $ do + g <- liftAnnex gitRepo + tn <- liftIO . newNotificationHandle True =<< + transferNotifier <$> getDaemonStatus + forever $ do + liftIO $ threadDelay 500000 -- 0.5 seconds + ts <- currentTransfers <$> getDaemonStatus + if M.null ts + -- block until transfers running + then liftIO $ waitNotification tn + else mapM_ (poll g) $ M.toList ts + where + poll g (t, info) + {- Downloads are polled by checking the size of the + - temp file being used for the transfer. -} + | transferDirection t == Download = do + let f = gitAnnexTmpObjectLocation (transferKey t) g + sz <- liftIO $ catchMaybeIO $ getFileSize f + newsize t info sz + {- Uploads don't need to be polled for when the TransferWatcher + - thread can track file modifications. -} + | TransferWatcher.watchesTransferSize = noop + {- Otherwise, this code polls the upload progress + - by reading the transfer info file. -} + | otherwise = do + let (f, _, _) = transferFileAndLockFile t g + mi <- liftIO $ catchDefaultIO Nothing $ + readTransferInfoFile Nothing (fromRawFilePath f) + maybe noop (newsize t info . bytesComplete) mi + + newsize t info sz + | bytesComplete info /= sz && isJust sz = + alterTransferInfo t $ \i -> i { bytesComplete = sz } + | otherwise = noop diff --git a/Assistant/Threads/TransferScanner.hs b/Assistant/Threads/TransferScanner.hs new file mode 100644 index 0000000000..970516a380 --- /dev/null +++ b/Assistant/Threads/TransferScanner.hs @@ -0,0 +1,196 @@ +{- git-annex assistant thread to scan remotes to find needed transfers + - + - Copyright 2012 Joey Hess + - + - Licensed under the GNU AGPL version 3 or higher. + -} + +module Assistant.Threads.TransferScanner where + +import Assistant.Common +import Assistant.Types.ScanRemotes +import Assistant.ScanRemotes +import Assistant.TransferQueue +import Assistant.DaemonStatus +import Assistant.Drop +import Assistant.Sync +import Assistant.DeleteRemote +import Assistant.Types.UrlRenderer +import Types.Transfer +import Logs.Transfer +import Logs.Location +import Logs.Group +import qualified Remote +import qualified Types.Remote as Remote +import Utility.ThreadScheduler +import Utility.NotificationBroadcaster +import Utility.Batch +import qualified Git.LsFiles as LsFiles +import Annex.WorkTree +import Annex.Content +import Annex.Wanted +import CmdLine.Action +import Types.Command + +import qualified Data.Set as S +import Control.Concurrent + +{- This thread waits until a remote needs to be scanned, to find transfers + - that need to be made, to keep data in sync. + -} +transferScannerThread :: UrlRenderer -> NamedThread +transferScannerThread urlrenderer = namedThread "TransferScanner" $ do + startupScan + go S.empty + where + go scanned = do + scanrunning False + liftIO $ threadDelaySeconds (Seconds 2) + (rs, infos) <- unzip <$> getScanRemote + scanrunning True + if any fullScan infos || any (`S.notMember` scanned) rs + then do + expensiveScan urlrenderer rs + go $ scanned `S.union` S.fromList rs + else do + mapM_ failedTransferScan rs + go scanned + scanrunning b = do + ds <- modifyDaemonStatus $ \s -> + (s { transferScanRunning = b }, s) + liftIO $ sendNotification $ transferNotifier ds + + {- All git remotes are synced, all exports are updated, + - and all available remotes are scanned in full on startup, + - for multiple reasons, including: + - + - * This may be the first run, and there may be remotes + - already in place, that need to be synced. + - * Changes may have been made last time we run, but remotes were + - not available to be synced with. + - * Changes may have been made to remotes while we were down. + - * We may have run before, and scanned a remote, but + - only been in a subdirectory of the git remote, and so + - not synced it all. + - * We may have run before, and had transfers queued, + - and then the system (or us) crashed, and that info was + - lost. + - * A remote may be in the unwanted group, and this is a chance + - to determine if the remote has been emptied. + -} + startupScan = do + reconnectRemotes =<< syncGitRemotes <$> getDaemonStatus + addScanRemotes True =<< scannableRemotes + +{- This is a cheap scan for failed transfers involving a remote. -} +failedTransferScan :: Remote -> Assistant () +failedTransferScan r = do + failed <- liftAnnex $ clearFailedTransfers (Remote.uuid r) + mapM_ retry failed + where + retry (t, info) + | transferDirection t == Download = + {- Check if the remote still has the key. + - If not, relies on the expensiveScan to + - get it queued from some other remote. -} + whenM (liftAnnex $ remoteHas r $ transferKey t) $ + requeue t info + | otherwise = + {- The Transferrer checks when uploading + - that the remote doesn't already have the + - key, so it's not redundantly checked here. -} + requeue t info + requeue t info = queueTransferWhenSmall "retrying failed transfer" (associatedFile info) t r + +{- This is a expensive scan through the full git work tree, finding + - files to transfer. The scan is blocked when the transfer queue gets + - too large. + - + - This also finds files that are present either here or on a remote + - but that are not preferred content, and drops them. Searching for files + - to drop is done concurrently with the scan for transfers. + - + - TODO: It would be better to first drop as much as we can, before + - transferring much, to minimise disk use. + - + - During the scan, we'll also check if any unwanted repositories are empty, + - and can be removed. While unrelated, this is a cheap place to do it, + - since we need to look at the locations of all keys anyway. + -} +expensiveScan :: UrlRenderer -> [Remote] -> Assistant () +expensiveScan urlrenderer rs = batch <~> do + debug ["starting scan of", show visiblers] + + let us = map Remote.uuid rs + + mapM_ (liftAnnex . clearFailedTransfers) us + + unwantedrs <- liftAnnex $ S.fromList + <$> filterM inUnwantedGroup us + + g <- liftAnnex gitRepo + (files, cleanup) <- liftIO $ LsFiles.inRepo [] [] g + removablers <- scan unwantedrs files + void $ liftIO cleanup + + debug ["finished scan of", show visiblers] + + remove <- asIO1 $ removableRemote urlrenderer + liftIO $ mapM_ (void . tryNonAsync . remove) $ S.toList removablers + where + visiblers = let rs' = filter (not . Remote.readonly) rs + in if null rs' then rs else rs' + + scan unwanted [] = return unwanted + scan unwanted (f:fs) = do + (unwanted', ts) <- maybe + (return (unwanted, [])) + (findtransfers f unwanted) + =<< liftAnnex (lookupKey f) + mapM_ (enqueue f) ts + + {- Delay for a short time to avoid using too much CPU. -} + liftIO $ threadDelay $ fromIntegral $ oneSecond `div` 200 + + scan unwanted' fs + + enqueue f (r, t) = + queueTransferWhenSmall "expensive scan found missing object" + (AssociatedFile (Just f)) t r + findtransfers f unwanted key = do + let af = AssociatedFile (Just f) + locs <- liftAnnex $ loggedLocations key + present <- liftAnnex $ inAnnex key + let slocs = S.fromList locs + + {- The remotes may have changed since this scan began. -} + syncrs <- syncDataRemotes <$> getDaemonStatus + let use l a = mapMaybe (a key slocs) . l <$> getDaemonStatus + + liftAnnex $ handleDropsFrom locs syncrs + "expensive scan found too many copies of object" + present key af (SeekInput []) [] callCommandAction + ts <- if present + then liftAnnex . filterM (wantGetBy True (Just key) af . Remote.uuid . fst) + =<< use syncDataRemotes (genTransfer Upload False) + else ifM (liftAnnex $ wantGet True (Just key) af) + ( use downloadRemotes (genTransfer Download True) , return [] ) + let unwanted' = S.difference unwanted slocs + return (unwanted', ts) + +-- Both syncDataRemotes and exportRemotes can be scanned. +-- The downloadRemotes list contains both. +scannableRemotes :: Assistant [Remote] +scannableRemotes = downloadRemotes <$> getDaemonStatus + +genTransfer :: Direction -> Bool -> Key -> S.Set UUID -> Remote -> Maybe (Remote, Transfer) +genTransfer direction want key slocs r + | direction == Upload && Remote.readonly r = Nothing + | S.member (Remote.uuid r) slocs == want = Just + (r, Transfer direction (Remote.uuid r) (fromKey id key)) + | otherwise = Nothing + +remoteHas :: Remote -> Key -> Annex Bool +remoteHas r key = elem + <$> pure (Remote.uuid r) + <*> loggedLocations key diff --git a/Assistant/Threads/TransferWatcher.hs b/Assistant/Threads/TransferWatcher.hs new file mode 100644 index 0000000000..d692a3ffd0 --- /dev/null +++ b/Assistant/Threads/TransferWatcher.hs @@ -0,0 +1,108 @@ +{- git-annex assistant transfer watching thread + - + - Copyright 2012 Joey Hess + - + - Licensed under the GNU AGPL version 3 or higher. + -} + +module Assistant.Threads.TransferWatcher where + +import Assistant.Common +import Assistant.DaemonStatus +import Assistant.TransferSlots +import Types.Transfer +import Logs.Transfer +import Utility.DirWatcher +import Utility.DirWatcher.Types +import qualified Remote +import qualified Annex +import Annex.Perms + +import Control.Concurrent +import qualified Data.Map as M + +{- This thread watches for changes to the gitAnnexTransferDir, + - and updates the DaemonStatus's map of ongoing transfers. -} +transferWatcherThread :: NamedThread +transferWatcherThread = namedThread "TransferWatcher" $ do + dir <- liftAnnex $ gitAnnexTransferDir <$> gitRepo + liftAnnex $ createAnnexDirectory dir + let hook a = Just <$> asIO2 (runHandler a) + addhook <- hook onAdd + delhook <- hook onDel + modifyhook <- hook onModify + errhook <- hook onErr + let hooks = mkWatchHooks + { addHook = addhook + , delHook = delhook + , modifyHook = modifyhook + , errHook = errhook + } + void $ liftIO $ watchDir (fromRawFilePath dir) (const False) True hooks id + debug ["watching for transfers"] + +type Handler = FilePath -> Assistant () + +{- Runs an action handler. + - + - Exceptions are ignored, otherwise a whole thread could be crashed. + -} +runHandler :: Handler -> FilePath -> Maybe FileStatus -> Assistant () +runHandler handler file _filestatus = + either (liftIO . print) (const noop) =<< tryIO <~> handler file + +{- Called when there's an error with inotify. -} +onErr :: Handler +onErr = giveup + +{- Called when a new transfer information file is written. -} +onAdd :: Handler +onAdd file = case parseTransferFile file of + Nothing -> noop + Just t -> go t =<< liftAnnex (checkTransfer t) + where + go _ Nothing = noop -- transfer already finished + go t (Just info) = do + qp <- liftAnnex $ coreQuotePath <$> Annex.getGitConfig + debug [ "transfer starting:", describeTransfer qp t info ] + r <- liftAnnex $ Remote.remoteFromUUID $ transferUUID t + updateTransferInfo t info { transferRemote = r } + +{- Called when a transfer information file is updated. + - + - The only thing that should change in the transfer info is the + - bytesComplete, so that's the only thing updated in the DaemonStatus. -} +onModify :: Handler +onModify file = case parseTransferFile file of + Nothing -> noop + Just t -> go t =<< liftIO (readTransferInfoFile Nothing file) + where + go _ Nothing = noop + go t (Just newinfo) = alterTransferInfo t $ + \i -> i { bytesComplete = bytesComplete newinfo } + +{- This thread can only watch transfer sizes when the DirWatcher supports + - tracking modifications to files. -} +watchesTransferSize :: Bool +watchesTransferSize = modifyTracked + +{- Called when a transfer information file is removed. -} +onDel :: Handler +onDel file = case parseTransferFile file of + Nothing -> noop + Just t -> do + debug [ "transfer finishing:", show t] + minfo <- removeTransfer t + + -- Run transfer hook. + m <- transferHook <$> getDaemonStatus + maybe noop (\hook -> void $ liftIO $ forkIO $ hook t) + (M.lookup (transferKey t) m) + + finished <- asIO2 finishedTransfer + void $ liftIO $ forkIO $ do + {- XXX race workaround delay. The location + - log needs to be updated before finishedTransfer + - runs. -} + threadDelay 10000000 -- 10 seconds + finished t minfo diff --git a/Assistant/Threads/Transferrer.hs b/Assistant/Threads/Transferrer.hs new file mode 100644 index 0000000000..923479e7a1 --- /dev/null +++ b/Assistant/Threads/Transferrer.hs @@ -0,0 +1,27 @@ +{- git-annex assistant data transferrer thread + - + - Copyright 2012 Joey Hess + - + - Licensed under the GNU AGPL version 3 or higher. + -} + +module Assistant.Threads.Transferrer where + +import Assistant.Common +import Assistant.TransferQueue +import Assistant.TransferSlots +import Types.Transfer +import Annex.TransferrerPool +import Utility.Batch + +{- Dispatches transfers from the queue. -} +transfererThread :: NamedThread +transfererThread = namedThread "Transferrer" $ do + rt <- liftAnnex . mkRunTransferrer + =<< liftIO getBatchCommandMaker + forever $ inTransferSlot rt $ + maybe (return Nothing) (uncurry genTransfer) + =<< getNextTransfer notrunning + where + {- Skip transfers that are already running. -} + notrunning = isNothing . startedTime diff --git a/Assistant/Threads/UpgradeWatcher.hs b/Assistant/Threads/UpgradeWatcher.hs new file mode 100644 index 0000000000..5960a70c32 --- /dev/null +++ b/Assistant/Threads/UpgradeWatcher.hs @@ -0,0 +1,109 @@ +{- git-annex assistant thread to detect when git-annex is upgraded + - + - Copyright 2013 Joey Hess + - + - Licensed under the GNU AGPL version 3 or higher. + -} + +{-# LANGUAGE CPP #-} + +module Assistant.Threads.UpgradeWatcher ( + upgradeWatcherThread +) where + +import Assistant.Common +import Assistant.Upgrade +import Utility.DirWatcher +import Utility.DirWatcher.Types +import Utility.ThreadScheduler +import Assistant.Types.UrlRenderer +import Assistant.Alert +import Assistant.DaemonStatus +#ifdef WITH_WEBAPP +import Assistant.WebApp.Types +import qualified BuildInfo +#endif + +import Control.Concurrent.MVar +import qualified Data.Text as T + +data WatcherState = InStartupScan | Started | Upgrading + deriving (Eq) + +upgradeWatcherThread :: UrlRenderer -> NamedThread +upgradeWatcherThread urlrenderer = namedThread "UpgradeWatcher" $ do + whenM (liftIO checkSuccessfulUpgrade) $ + showSuccessfulUpgrade urlrenderer + go =<< liftIO upgradeFlagFile + where + go flagfile = do + mvar <- liftIO $ newMVar InStartupScan + changed <- Just <$> asIO2 (changedFile urlrenderer mvar flagfile) + let hooks = mkWatchHooks + { addHook = changed + , delHook = changed + , addSymlinkHook = changed + , modifyHook = changed + , delDirHook = changed + } + let dir = fromRawFilePath (parentDir (toRawFilePath flagfile)) + let depth = length (splitPath dir) + 1 + let nosubdirs f = length (splitPath f) == depth + void $ liftIO $ watchDir dir nosubdirs False hooks (startup mvar) + -- Ignore bogus events generated during the startup scan. + -- We ask the watcher to not generate them, but just to be safe.. + startup mvar scanner = do + r <- scanner + void $ swapMVar mvar Started + return r + +changedFile :: UrlRenderer -> MVar WatcherState -> FilePath -> FilePath -> Maybe FileStatus -> Assistant () +changedFile urlrenderer mvar flagfile file _status + | flagfile /= file = noop + | otherwise = do + state <- liftIO $ readMVar mvar + when (state == Started) $ do + setstate Upgrading + ifM (liftIO upgradeSanityCheck) + ( handleUpgrade urlrenderer + , do + debug ["new version failed sanity check; not using"] + setstate Started + ) + where + setstate = void . liftIO . swapMVar mvar + +handleUpgrade :: UrlRenderer -> Assistant () +handleUpgrade urlrenderer = do + -- Wait 2 minutes for any final upgrade changes to settle. + -- (For example, other associated files may be being put into + -- place.) Not needed when using a distribution bundle, because + -- in that case git-annex handles the upgrade in a non-racy way. + liftIO $ unlessM usingDistribution $ + threadDelaySeconds (Seconds 120) + ifM autoUpgradeEnabled + ( do + debug ["starting automatic upgrade"] + unattendedUpgrade +#ifdef WITH_WEBAPP + , do + button <- mkAlertButton True (T.pack "Finish Upgrade") urlrenderer ConfigFinishUpgradeR + void $ addAlert $ upgradeReadyAlert button +#else + , noop +#endif + ) + +showSuccessfulUpgrade :: UrlRenderer -> Assistant () +showSuccessfulUpgrade urlrenderer = do +#ifdef WITH_WEBAPP + button <- ifM autoUpgradeEnabled + ( pure Nothing + , Just <$> mkAlertButton True + (T.pack "Enable Automatic Upgrades") + urlrenderer ConfigEnableAutomaticUpgradeR + ) + void $ addAlert $ upgradeFinishedAlert button BuildInfo.packageversion +#else + noop +#endif diff --git a/Assistant/Threads/Upgrader.hs b/Assistant/Threads/Upgrader.hs new file mode 100644 index 0000000000..a0e39e4174 --- /dev/null +++ b/Assistant/Threads/Upgrader.hs @@ -0,0 +1,85 @@ +{- git-annex assistant thread to detect when upgrade is available + - + - Copyright 2013 Joey Hess + - + - Licensed under the GNU AGPL version 3 or higher. + -} + +{-# LANGUAGE CPP #-} + +module Assistant.Threads.Upgrader ( + upgraderThread +) where + +import Assistant.Common +import Assistant.Upgrade + +import Assistant.Types.UrlRenderer +import Assistant.DaemonStatus +import Assistant.Alert +import Utility.NotificationBroadcaster +import qualified Annex +import qualified BuildInfo +import qualified Utility.DottedVersion as DottedVersion +import Types.Distribution +#ifdef WITH_WEBAPP +import Assistant.WebApp.Types +#endif + +import Data.Time.Clock +import qualified Data.Text as T + +upgraderThread :: UrlRenderer -> NamedThread +upgraderThread urlrenderer = namedThread "Upgrader" $ + when upgradeSupported $ do + {- Check for upgrade on startup, unless it was just + - upgraded. -} + unlessM (liftIO checkSuccessfulUpgrade) $ + checkUpgrade urlrenderer + h <- liftIO . newNotificationHandle False . networkConnectedNotifier =<< getDaemonStatus + go h =<< liftIO getCurrentTime + where + {- Wait for a network connection event. Then see if it's been + - half a day since the last upgrade check. If so, proceed with + - check. -} + go h lastchecked = do + liftIO $ waitNotification h + autoupgrade <- liftAnnex $ annexAutoUpgrade <$> Annex.getGitConfig + if autoupgrade == NoAutoUpgrade + then go h lastchecked + else do + now <- liftIO getCurrentTime + if diffUTCTime now lastchecked > halfday + then do + checkUpgrade urlrenderer + go h =<< liftIO getCurrentTime + else go h lastchecked + halfday = 12 * 60 * 60 + +checkUpgrade :: UrlRenderer -> Assistant () +checkUpgrade urlrenderer = do + debug [ "Checking if an upgrade is available." ] + go =<< downloadDistributionInfo + where + go Nothing = debug [ "Failed to check if upgrade is available." ] + go (Just d) = do + let installed = DottedVersion.normalize BuildInfo.packageversion + let avail = DottedVersion.normalize $ distributionVersion d + let old = DottedVersion.normalize <$> distributionUrgentUpgrade d + if Just installed <= old + then canUpgrade High urlrenderer d + else if installed < avail + then canUpgrade Low urlrenderer d + else debug [ "No new version found." ] + +canUpgrade :: AlertPriority -> UrlRenderer -> GitAnnexDistribution -> Assistant () +canUpgrade urgency urlrenderer d = ifM autoUpgradeEnabled + ( startDistributionDownload d + , do +#ifdef WITH_WEBAPP + button <- mkAlertButton True (T.pack "Upgrade") urlrenderer (ConfigStartUpgradeR d) + void $ addAlert (canUpgradeAlert urgency (distributionVersion d) button) +#else + noop +#endif + ) diff --git a/Assistant/Threads/Watcher.hs b/Assistant/Threads/Watcher.hs new file mode 100644 index 0000000000..2df29ce76c --- /dev/null +++ b/Assistant/Threads/Watcher.hs @@ -0,0 +1,376 @@ +{- git-annex assistant tree watcher + - + - Copyright 2012-2015 Joey Hess + - + - Licensed under the GNU AGPL version 3 or higher. + -} + +{-# LANGUAGE DeriveDataTypeable, OverloadedStrings, CPP #-} + +module Assistant.Threads.Watcher ( + watchThread, + WatcherControl(..), + checkCanWatch, + needLsof, + onAddSymlink, + runHandler, +) where + +import Assistant.Common +import Assistant.DaemonStatus +import Assistant.Changes +import Assistant.Types.Changes +import Assistant.Alert +import Utility.DirWatcher +import Utility.DirWatcher.Types +import Utility.InodeCache +import qualified Utility.RawFilePath as R +import qualified Annex +import qualified Annex.Queue +import qualified Git +import qualified Git.UpdateIndex +import qualified Git.LsFiles as LsFiles +import Annex.WorkTree +import Annex.CatFile +import Annex.CheckIgnore +import Annex.Link +import Annex.Content +import Annex.ReplaceFile +import Annex.InodeSentinal +import Git.Types +import Git.FilePath +import Config.GitConfig +import Utility.ThreadScheduler +import Logs.Location +import qualified Database.Keys +#ifndef mingw32_HOST_OS +import qualified Utility.Lsof as Lsof +#endif + +import Data.Typeable +import qualified Data.ByteString.Lazy as L +import qualified Control.Exception as E +import Data.Time.Clock +import System.PosixCompat.Files (fileMode, statusChangeTime) + +checkCanWatch :: Annex () +checkCanWatch + | canWatch = do +#ifndef mingw32_HOST_OS + liftIO Lsof.setup + unlessM (liftIO (inSearchPath "lsof") <||> Annex.getRead Annex.force) + needLsof +#else + noop +#endif + | otherwise = giveup "watch mode is not available on this system" + +needLsof :: Annex () +needLsof = giveup $ unlines + [ "The lsof command is needed for watch mode to be safe, and is not in PATH." + , "To override lsof checks to ensure that files are not open for writing" + , "when added to the annex, you can use --force" + , "Be warned: This can corrupt data in the annex, and make fsck complain." + ] + +{- A special exception that can be thrown to pause or resume the watcher. -} +data WatcherControl = PauseWatcher | ResumeWatcher + deriving (Show, Eq, Typeable) + +instance E.Exception WatcherControl + +watchThread :: NamedThread +watchThread = namedThread "Watcher" $ + ifM (liftAnnex $ getGitConfigVal annexAutoCommit) + ( runWatcher + , waitFor ResumeWatcher runWatcher + ) + +runWatcher :: Assistant () +runWatcher = do + startup <- asIO1 startupScan + symlinkssupported <- liftAnnex $ coreSymlinks <$> Annex.getGitConfig + addhook <- hook $ onAddFile symlinkssupported + delhook <- hook onDel + addsymlinkhook <- hook onAddSymlink + deldirhook <- hook onDelDir + errhook <- hook onErr + let hooks = mkWatchHooks + { addHook = addhook + , delHook = delhook + , addSymlinkHook = addsymlinkhook + , delDirHook = deldirhook + , errHook = errhook + } + scanevents <- liftAnnex $ annexStartupScan <$> Annex.getGitConfig + h <- liftIO $ watchDir "." ignored scanevents hooks startup + debug [ "watching", "."] + + {- Let the DirWatcher thread run until signalled to pause it, + - then wait for a resume signal, and restart. -} + waitFor PauseWatcher $ do + liftIO $ stopWatchDir h + waitFor ResumeWatcher runWatcher + where + hook a = Just <$> asIO2 (runHandler a) + +waitFor :: WatcherControl -> Assistant () -> Assistant () +waitFor sig next = do + r <- liftIO (E.try pause :: IO (Either E.SomeException ())) + case r of + Left e -> case E.fromException e of + Just s + | s == sig -> next + _ -> noop + _ -> noop + where + pause = runEvery (Seconds 86400) noop + +{- Initial scartup scan. The action should return once the scan is complete. -} +startupScan :: IO a -> Assistant a +startupScan scanner = do + liftAnnex $ showAction "scanning" + alertWhile' startupScanAlert $ do + r <- liftIO scanner + + -- Notice any files that were deleted before + -- watching was started. + top <- liftAnnex $ fromRepo Git.repoPath + (fs, cleanup) <- liftAnnex $ inRepo $ LsFiles.deleted [] [top] + forM_ fs $ \f -> do + let f' = fromRawFilePath f + liftAnnex $ onDel' f' + maybe noop recordChange =<< madeChange f' RmChange + void $ liftIO cleanup + + liftAnnex $ showAction "started" + liftIO $ putStrLn "" + + modifyDaemonStatus_ $ \s -> s { scanComplete = True } + + -- Ensure that the Committer sees any changes + -- that it did not process, and acts on them now that + -- the scan is complete. + refillChanges =<< getAnyChanges + + return (True, r) + +{- Hardcoded ignores, passed to the DirWatcher so it can avoid looking + - at the entire .git directory. Does not include .gitignores. -} +ignored :: FilePath -> Bool +ignored = ig . takeFileName + where + ig ".git" = True + ig ".gitignore" = True + ig ".gitattributes" = True +#ifdef darwin_HOST_OS + ig ".DS_Store" = True +#endif + ig _ = False + +unlessIgnored :: FilePath -> Assistant (Maybe Change) -> Assistant (Maybe Change) +unlessIgnored file a = ifM (liftAnnex $ checkIgnored (CheckGitIgnore True) (toRawFilePath file)) + ( noChange + , a + ) + +type Handler = FilePath -> Maybe FileStatus -> Assistant (Maybe Change) + +{- Runs an action handler, and if there was a change, adds it to the ChangeChan. + - + - Exceptions are ignored, otherwise a whole watcher thread could be crashed. + -} +runHandler :: Handler -> FilePath -> Maybe FileStatus -> Assistant () +runHandler handler file filestatus = void $ do + r <- tryIO <~> handler (normalize file) filestatus + case r of + Left e -> liftAnnex $ warning $ UnquotedString $ show e + Right Nothing -> noop + Right (Just change) -> recordChange change + where + normalize f + | "./" `isPrefixOf` file = drop 2 f + | otherwise = f + +shouldRestage :: DaemonStatus -> Bool +shouldRestage ds = scanComplete ds || forceRestage ds + +onAddFile :: Bool -> Handler +onAddFile symlinkssupported f fs = do + mk <- liftIO $ isPointerFile $ toRawFilePath f + case mk of + Nothing -> onAddFile' contentchanged addassociatedfile addlink samefilestatus symlinkssupported f fs + Just k -> addlink f k + where + addassociatedfile key file = + Database.Keys.addAssociatedFile key + =<< inRepo (toTopFilePath (toRawFilePath file)) + samefilestatus key file status = do + cache <- Database.Keys.getInodeCaches key + curr <- withTSDelta $ \delta -> + liftIO $ toInodeCache delta (toRawFilePath file) status + case (cache, curr) of + (_, Just c) -> elemInodeCaches c cache + ([], Nothing) -> return True + _ -> return False + contentchanged oldkey file = do + Database.Keys.removeAssociatedFile oldkey + =<< inRepo (toTopFilePath (toRawFilePath file)) + unlessM (inAnnex oldkey) $ + logStatus oldkey InfoMissing + addlink file key = do + mode <- liftIO $ catchMaybeIO $ fileMode <$> R.getFileStatus (toRawFilePath file) + liftAnnex $ stagePointerFile (toRawFilePath file) mode =<< hashPointerFile key + madeChange file $ LinkChange (Just key) + +onAddFile' + :: (Key -> FilePath -> Annex ()) + -> (Key -> FilePath -> Annex ()) + -> (FilePath -> Key -> Assistant (Maybe Change)) + -> (Key -> FilePath -> FileStatus -> Annex Bool) + -> Bool + -> Handler +onAddFile' contentchanged addassociatedfile addlink samefilestatus symlinkssupported file fs = do + v <- liftAnnex $ catKeyFile (toRawFilePath file) + case (v, fs) of + (Just key, Just filestatus) -> + ifM (liftAnnex $ samefilestatus key file filestatus) + {- It's possible to get an add event for + - an existing file that is not + - really modified, but it might have + - just been deleted and been put back, + - so its annex link is restaged to make sure. -} + ( ifM (shouldRestage <$> getDaemonStatus) + ( addlink file key + , noChange + ) + , guardSymlinkStandin (Just key) $ do + debug ["changed", file] + liftAnnex $ contentchanged key file + pendingAddChange file + ) + _ -> unlessIgnored file $ + guardSymlinkStandin Nothing $ do + debug ["add", file] + pendingAddChange file + where + {- On a filesystem without symlinks, we'll get changes for regular + - files that git uses to stand-in for symlinks. Detect when + - this happens, and stage the symlink, rather than annexing the + - file. -} + guardSymlinkStandin mk a + | symlinkssupported = a + | otherwise = do + linktarget <- liftAnnex $ getAnnexLinkTarget $ + toRawFilePath file + case linktarget of + Nothing -> a + Just lt -> do + case parseLinkTargetOrPointer lt of + Nothing -> noop + Just key -> liftAnnex $ + addassociatedfile key file + onAddSymlink' (Just lt) mk file fs + +{- A symlink might be an arbitrary symlink, which is just added. + - Or, if it is a git-annex symlink, ensure it points to the content + - before adding it. + -} +onAddSymlink :: Handler +onAddSymlink file filestatus = unlessIgnored file $ do + linktarget <- liftIO (catchMaybeIO $ R.readSymbolicLink file') + kv <- liftAnnex (lookupKey file') + onAddSymlink' linktarget kv file filestatus + where + file' = toRawFilePath file + +onAddSymlink' :: Maybe LinkTarget -> Maybe Key -> Handler +onAddSymlink' linktarget mk file filestatus = go mk + where + go (Just key) = do + link <- liftAnnex $ calcRepo $ gitAnnexLink (toRawFilePath file) key + if linktarget == Just link + then ensurestaged (Just link) =<< getDaemonStatus + else do + liftAnnex $ replaceWorkTreeFile file $ + makeAnnexLink link + addLink file link (Just key) + -- other symlink, not git-annex + go Nothing = ensurestaged linktarget =<< getDaemonStatus + + {- This is often called on symlinks that are already + - staged correctly. A symlink may have been deleted + - and being re-added, or added when the watcher was + - not running. So they're normally restaged to make sure. + - + - As an optimisation, during the startup scan, avoid + - restaging everything. Only links that were created since + - the last time the daemon was running are staged. + - (If the daemon has never ran before, avoid staging + - links too.) + -} + ensurestaged (Just link) daemonstatus + | shouldRestage daemonstatus = addLink file link mk + | otherwise = case filestatus of + Just s + | not (afterLastDaemonRun (statusChangeTime s) daemonstatus) -> noChange + _ -> addLink file link mk + ensurestaged Nothing _ = noChange + +{- For speed, tries to reuse the existing blob for symlink target. -} +addLink :: FilePath -> LinkTarget -> Maybe Key -> Assistant (Maybe Change) +addLink file link mk = do + debug ["add symlink", file] + liftAnnex $ do + v <- catObjectDetails $ Ref $ encodeBS $ ':':file + case v of + Just (currlink, sha, _type) + | L.fromStrict link == currlink -> + stageSymlink (toRawFilePath file) sha + _ -> stageSymlink (toRawFilePath file) + =<< hashSymlink link + madeChange file $ LinkChange mk + +onDel :: Handler +onDel file _ = do + debug ["file deleted", file] + liftAnnex $ onDel' file + madeChange file RmChange + +onDel' :: FilePath -> Annex () +onDel' file = do + topfile <- inRepo (toTopFilePath (toRawFilePath file)) + withkey $ flip Database.Keys.removeAssociatedFile topfile + Annex.Queue.addUpdateIndex =<< + inRepo (Git.UpdateIndex.unstageFile (toRawFilePath file)) + where + withkey a = maybe noop a =<< catKeyFile (toRawFilePath file) + +{- A directory has been deleted, or moved, so tell git to remove anything + - that was inside it from its cache. Since it could reappear at any time, + - use --cached to only delete it from the index. + - + - This queues up a lot of RmChanges, which assists the Committer in + - pairing up renamed files when the directory was renamed. -} +onDelDir :: Handler +onDelDir dir _ = do + debug ["directory deleted", dir] + (fs, clean) <- liftAnnex $ inRepo $ LsFiles.deleted [] [toRawFilePath dir] + let fs' = map fromRawFilePath fs + + liftAnnex $ mapM_ onDel' fs' + + -- Get the events queued up as fast as possible, so the + -- committer sees them all in one block. + now <- liftIO getCurrentTime + recordChanges $ map (\f -> Change now f RmChange) fs' + + void $ liftIO clean + noChange + +{- Called when there's an error with inotify or kqueue. -} +onErr :: Handler +onErr msg _ = do + liftAnnex $ warning (UnquotedString msg) + void $ addAlert $ warningAlert "watcher" msg + noChange diff --git a/Assistant/Threads/WebApp.hs b/Assistant/Threads/WebApp.hs new file mode 100644 index 0000000000..3fdd12d05f --- /dev/null +++ b/Assistant/Threads/WebApp.hs @@ -0,0 +1,136 @@ +{- git-annex assistant webapp thread + - + - Copyright 2012-2014 Joey Hess + - + - Licensed under the GNU AGPL version 3 or higher. + -} + +{-# LANGUAGE TemplateHaskell, MultiParamTypeClasses #-} +{-# LANGUAGE ViewPatterns, OverloadedStrings #-} +{-# OPTIONS_GHC -fno-warn-orphans #-} + +module Assistant.Threads.WebApp where + +import Assistant.Common +import Assistant.WebApp +import Assistant.WebApp.Types +import Assistant.WebApp.DashBoard +import Assistant.WebApp.SideBar +import Assistant.WebApp.Notifications +import Assistant.WebApp.RepoList +import Assistant.WebApp.Configurators +import Assistant.WebApp.Configurators.Local +import Assistant.WebApp.Configurators.Ssh +import Assistant.WebApp.Configurators.Pairing +import Assistant.WebApp.Configurators.AWS +import Assistant.WebApp.Configurators.IA +import Assistant.WebApp.Configurators.WebDAV +import Assistant.WebApp.Configurators.Preferences +import Assistant.WebApp.Configurators.Unused +import Assistant.WebApp.Configurators.Edit +import Assistant.WebApp.Configurators.Delete +import Assistant.WebApp.Configurators.Fsck +import Assistant.WebApp.Configurators.Upgrade +import Assistant.WebApp.Documentation +import Assistant.WebApp.Control +import Assistant.WebApp.OtherRepos +import Assistant.WebApp.Repair +import Assistant.WebApp.Pairing +import Assistant.Types.ThreadedMonad +import Utility.WebApp +import Utility.AuthToken +import Utility.Tmp +import Utility.FileMode +import Git +import qualified Annex + +import Yesod +import Network.Socket (SockAddr, HostName, PortNumber) +import Data.Text (pack, unpack) +import qualified Network.Wai.Handler.WarpTLS as TLS +import Network.Wai.Middleware.RequestLogger + +mkYesodDispatch "WebApp" $(parseRoutesFile "Assistant/WebApp/routes") + +type Url = String + +webAppThread + :: AssistantData + -> UrlRenderer + -> Bool + -> Maybe String + -> Maybe (IO Url) + -> Maybe HostName + -> Maybe PortNumber + -> Maybe (Url -> FilePath -> IO ()) + -> NamedThread +webAppThread assistantdata urlrenderer noannex cannotrun postfirstrun listenhost listenport onstartup = thread $ liftIO $ do + listenhost' <- if isJust listenhost + then pure listenhost + else getAnnex $ annexListen <$> Annex.getGitConfig + listenport' <- if isJust listenport + then pure listenport + else getAnnex $ annexPort <$> Annex.getGitConfig + tlssettings <- getAnnex getTlsSettings + webapp <- WebApp + <$> pure assistantdata + <*> genAuthToken 128 + <*> getreldir + <*> pure staticRoutes + <*> pure postfirstrun + <*> pure cannotrun + <*> pure noannex + <*> pure listenhost' + <*> newWormholePairingState + setUrlRenderer urlrenderer $ yesodRender webapp (pack "") + app <- toWaiAppPlain webapp + app' <- ifM (fromMaybe False <$> (getAnnex $ Just . annexDebug <$> Annex.getGitConfig)) + ( return $ logStdout app + , return app + ) + runWebApp tlssettings listenhost' listenport' app' $ \addr -> if noannex + then withTmpFile "webapp.html" $ \tmpfile h -> do + hClose h + go tlssettings addr webapp tmpfile Nothing + else do + htmlshim <- getAnnex' $ fromRepo gitAnnexHtmlShim + urlfile <- getAnnex' $ fromRepo gitAnnexUrlFile + go tlssettings addr webapp + (fromRawFilePath htmlshim) + (Just urlfile) + where + -- The webapp thread does not wait for the startupSanityCheckThread + -- to finish, so that the user interface remains responsive while + -- that's going on. + thread = namedThreadUnchecked "WebApp" + getreldir + | noannex = return Nothing + | otherwise = Just <$> + (relHome . fromRawFilePath =<< absPath =<< getAnnex' (fromRepo repoPath)) + go tlssettings addr webapp htmlshim urlfile = do + let url = myUrl tlssettings webapp addr + maybe noop (`writeFileProtected` url) urlfile + writeHtmlShim "Starting webapp..." url htmlshim + maybe noop (\a -> a url htmlshim) onstartup + + getAnnex a + | noannex = pure Nothing + | otherwise = getAnnex' a + getAnnex' = runThreadState (threadState assistantdata) + +myUrl :: Maybe TLS.TLSSettings -> WebApp -> SockAddr -> Url +myUrl tlssettings webapp addr = unpack $ yesodRender webapp urlbase DashboardR [] + where + urlbase = pack $ proto ++ "://" ++ show addr + proto + | isJust tlssettings = "https" + | otherwise = "http" + +getTlsSettings :: Annex (Maybe TLS.TLSSettings) +getTlsSettings = do + cert <- fromRepo gitAnnexWebCertificate + privkey <- fromRepo gitAnnexWebPrivKey + ifM (liftIO $ allM doesFileExist [cert, privkey]) + ( return $ Just $ TLS.tlsSettings cert privkey + , return Nothing + ) diff --git a/Assistant/TransferQueue.hs b/Assistant/TransferQueue.hs new file mode 100644 index 0000000000..571899bb6d --- /dev/null +++ b/Assistant/TransferQueue.hs @@ -0,0 +1,236 @@ +{- git-annex assistant pending transfer queue + - + - Copyright 2012-2014 Joey Hess + - + - Licensed under the GNU AGPL version 3 or higher. + -} + +{-# LANGUAGE BangPatterns #-} + +module Assistant.TransferQueue ( + TransferQueue, + Schedule(..), + newTransferQueue, + getTransferQueue, + queueTransfers, + queueTransfersMatching, + queueDeferredDownloads, + queueTransfer, + queueTransferAt, + queueTransferWhenSmall, + getNextTransfer, + getMatchingTransfers, + dequeueTransfers, +) where + +import Assistant.Common +import Assistant.DaemonStatus +import Assistant.Types.TransferQueue +import Types.Transfer +import Logs.Transfer +import Types.Remote +import qualified Remote +import qualified Types.Remote as Remote +import qualified Annex +import Annex.Wanted +import Utility.TList + +import Control.Concurrent.STM +import qualified Data.Map.Strict as M +import qualified Data.Set as S + +type Reason = String + +{- Reads the queue's content without blocking or changing it. -} +getTransferQueue :: Assistant [(Transfer, TransferInfo)] +getTransferQueue = (atomically . readTList . queuelist) <<~ transferQueue + +stubInfo :: AssociatedFile -> Remote -> TransferInfo +stubInfo f r = stubTransferInfo + { transferRemote = Just r + , associatedFile = f + } + +{- Adds transfers to queue for some of the known remotes. + - Honors preferred content settings, only transferring wanted files. -} +queueTransfers :: Reason -> Schedule -> Key -> AssociatedFile -> Direction -> Assistant Bool +queueTransfers = queueTransfersMatching (const True) + +{- Adds transfers to queue for some of the known remotes, that match a + - condition. Honors preferred content settings. -} +queueTransfersMatching :: (UUID -> Bool) -> Reason -> Schedule -> Key -> AssociatedFile -> Direction -> Assistant Bool +queueTransfersMatching matching reason schedule k f direction + | direction == Download = ifM (liftAnnex $ wantGet True (Just k) f) + ( go + , return False + ) + | otherwise = go + where + go = do + rs <- liftAnnex . selectremotes =<< getDaemonStatus + let matchingrs = filter (matching . Remote.uuid) rs + if null matchingrs + then do + defer + return False + else do + forM_ matchingrs $ \r -> + enqueue reason schedule (gentransfer r) (stubInfo f r) + return True + selectremotes st + {- Queue downloads from all remotes that + - have the key. The list of remotes is ordered with + - cheapest first. More expensive ones will only be tried + - if downloading from a cheap one fails. -} + | direction == Download = do + s <- locs + return $ filter (inset s) (downloadRemotes st) + {- Upload to all remotes that want the content and don't + - already have it. -} + | otherwise = do + s <- locs + filterM (wantGetBy True (Just k) f . Remote.uuid) $ + filter (\r -> not (inset s r || Remote.readonly r)) + (syncDataRemotes st) + where + locs = S.fromList . map Remote.uuid <$> Remote.keyPossibilities (Remote.IncludeIgnored False) k + inset s r = S.member (Remote.uuid r) s + gentransfer r = Transfer + { transferDirection = direction + , transferKeyData = fromKey id k + , transferUUID = Remote.uuid r + } + defer + {- Defer this download, as no known remote has the key. -} + | direction == Download = do + q <- getAssistant transferQueue + void $ liftIO $ atomically $ + consTList (deferreddownloads q) (k, f) + | otherwise = noop + +{- Queues any deferred downloads that can now be accomplished, leaving + - any others in the list to try again later. -} +queueDeferredDownloads :: Reason -> Schedule -> Assistant () +queueDeferredDownloads reason schedule = do + q <- getAssistant transferQueue + l <- liftIO $ atomically $ readTList (deferreddownloads q) + rs <- downloadRemotes <$> getDaemonStatus + left <- filterM (queue rs) l + unless (null left) $ + liftIO $ atomically $ appendTList (deferreddownloads q) left + where + queue rs (k, f) = do + uuids <- liftAnnex $ Remote.keyLocations k + let sources = filter (\r -> uuid r `elem` uuids) rs + unless (null sources) $ + forM_ sources $ \r -> + enqueue reason schedule + (gentransfer r) (stubInfo f r) + return $ null sources + where + gentransfer r = Transfer + { transferDirection = Download + , transferKeyData = fromKey id k + , transferUUID = Remote.uuid r + } + +enqueue :: Reason -> Schedule -> Transfer -> TransferInfo -> Assistant () +enqueue reason schedule t info + | schedule == Next = go consTList + | otherwise = go snocTList + where + go modlist = whenM (add modlist) $ do + qp <- liftAnnex $ coreQuotePath <$> Annex.getGitConfig + debug [ "queued", describeTransfer qp t info, ": " ++ reason ] + notifyTransfer + add modlist = do + q <- getAssistant transferQueue + dstatus <- getAssistant daemonStatusHandle + liftIO $ atomically $ ifM (checkRunningTransferSTM dstatus t) + ( return False + , do + l <- readTList (queuelist q) + if (t `notElem` map fst l) + then do + void $ modifyTVar' (queuesize q) succ + void $ modlist (queuelist q) (t, info) + return True + else return False + ) + +{- Adds a transfer to the queue. -} +queueTransfer :: Reason -> Schedule -> AssociatedFile -> Transfer -> Remote -> Assistant () +queueTransfer reason schedule f t remote = + enqueue reason schedule t (stubInfo f remote) + +{- Blocks until the queue is no larger than a given size, and then adds a + - transfer to the queue. -} +queueTransferAt :: Int -> Reason -> Schedule -> AssociatedFile -> Transfer -> Remote -> Assistant () +queueTransferAt wantsz reason schedule f t remote = do + q <- getAssistant transferQueue + liftIO $ atomically $ do + sz <- readTVar (queuesize q) + unless (sz <= wantsz) $ + retry -- blocks until queuesize changes + enqueue reason schedule t (stubInfo f remote) + +queueTransferWhenSmall :: Reason -> AssociatedFile -> Transfer -> Remote -> Assistant () +queueTransferWhenSmall reason = queueTransferAt 10 reason Later + +{- Blocks until a pending transfer is available in the queue, + - and removes it. + - + - Checks that it's acceptable, before adding it to the + - currentTransfers map. If it's not acceptable, it's discarded. + - + - This is done in a single STM transaction, so there is no window + - where an observer sees an inconsistent status. -} +getNextTransfer :: (TransferInfo -> Bool) -> Assistant (Maybe (Transfer, TransferInfo)) +getNextTransfer acceptable = do + q <- getAssistant transferQueue + dstatus <- getAssistant daemonStatusHandle + liftIO $ atomically $ do + sz <- readTVar (queuesize q) + if sz < 1 + then retry -- blocks until queuesize changes + else readTList (queuelist q) >>= \case + [] -> retry -- blocks until something is queued + (r@(t,info):rest) -> do + void $ modifyTVar' (queuesize q) pred + setTList (queuelist q) rest + if acceptable info + then do + adjustTransfersSTM dstatus $ + M.insert t info + return $ Just r + else return Nothing + +{- Moves transfers matching a condition from the queue, to the + - currentTransfers map. -} +getMatchingTransfers :: (Transfer -> Bool) -> Assistant [(Transfer, TransferInfo)] +getMatchingTransfers c = do + q <- getAssistant transferQueue + dstatus <- getAssistant daemonStatusHandle + liftIO $ atomically $ do + ts <- dequeueTransfersSTM q c + unless (null ts) $ + adjustTransfersSTM dstatus $ \m -> M.union m $ M.fromList ts + return ts + +{- Removes transfers matching a condition from the queue, and returns the + - removed transfers. -} +dequeueTransfers :: (Transfer -> Bool) -> Assistant [(Transfer, TransferInfo)] +dequeueTransfers c = do + q <- getAssistant transferQueue + removed <- liftIO $ atomically $ dequeueTransfersSTM q c + unless (null removed) $ + notifyTransfer + return removed + +dequeueTransfersSTM :: TransferQueue -> (Transfer -> Bool) -> STM [(Transfer, TransferInfo)] +dequeueTransfersSTM q c = do + !(removed, ts) <- partition (c . fst) <$> readTList (queuelist q) + let !len = length ts + void $ writeTVar (queuesize q) len + setTList (queuelist q) ts + return removed diff --git a/Assistant/TransferSlots.hs b/Assistant/TransferSlots.hs new file mode 100644 index 0000000000..c16871f468 --- /dev/null +++ b/Assistant/TransferSlots.hs @@ -0,0 +1,321 @@ +{- git-annex assistant transfer slots + - + - Copyright 2012-2020 Joey Hess + - + - Licensed under the GNU AGPL version 3 or higher. + -} + +{-# LANGUAGE CPP #-} + +module Assistant.TransferSlots where + +import Control.Concurrent.STM + +import Assistant.Common +import Utility.ThreadScheduler +import Utility.NotificationBroadcaster +import Assistant.Types.TransferSlots +import Assistant.DaemonStatus +import Annex.TransferrerPool +import Types.TransferrerPool +import Assistant.Types.TransferQueue +import Assistant.TransferQueue +import Assistant.Alert +import Assistant.Alert.Utility +import Assistant.Commits +import Assistant.Drop +import Types.Transfer +import Logs.Transfer +import Logs.Location +import qualified Git +import qualified Annex +import qualified Remote +import qualified Types.Remote as Remote +import Annex.Content +import Annex.Wanted +import Annex.StallDetection +import Utility.Batch +import Types.NumCopies + +import Data.Either +import qualified Data.Map as M +import qualified Control.Exception as E +import Control.Concurrent +import qualified Control.Concurrent.MSemN as MSemN +#ifndef mingw32_HOST_OS +import System.Posix.Process (getProcessGroupIDOf) +import System.Posix.Signals (signalProcessGroup, sigTERM, sigKILL) +#else +import System.Win32.Process (terminateProcessById) +#endif + +type TransferGenerator = Assistant (Maybe (Transfer, TransferInfo, Transferrer -> Assistant ())) + +{- Waits until a transfer slot becomes available, then runs a + - TransferGenerator, and then runs the transfer action in its own thread. + -} +inTransferSlot :: RunTransferrer -> TransferGenerator -> Assistant () +inTransferSlot rt gen = do + flip MSemN.wait 1 <<~ transferSlots + runTransferThread rt =<< gen + +{- Runs a TransferGenerator, and its transfer action, + - without waiting for a slot to become available. -} +inImmediateTransferSlot :: RunTransferrer -> TransferGenerator -> Assistant () +inImmediateTransferSlot rt gen = do + flip MSemN.signal (-1) <<~ transferSlots + runTransferThread rt =<< gen + +{- Runs a transfer action, in an already allocated transfer slot. + - Once it finishes, frees the transfer slot. + - + - Note that the action is subject to being killed when the transfer + - is canceled or paused. + - + - A PauseTransfer exception is handled by letting the action be killed, + - then pausing the thread until a ResumeTransfer exception is raised, + - then rerunning the action. + -} +runTransferThread :: RunTransferrer -> Maybe (Transfer, TransferInfo, Transferrer -> Assistant ()) -> Assistant () +runTransferThread _ Nothing = flip MSemN.signal 1 <<~ transferSlots +runTransferThread rt (Just (t, info, a)) = do + d <- getAssistant id + mkcheck <- checkNetworkConnections + <$> getAssistant daemonStatusHandle + aio <- asIO1 a + tid <- liftIO $ forkIO $ runTransferThread' mkcheck rt d aio + updateTransferInfo t $ info { transferTid = Just tid } + +runTransferThread' :: MkCheckTransferrer -> RunTransferrer -> AssistantData -> (Transferrer -> IO ()) -> IO () +runTransferThread' mkcheck rt d run = go + where + go = catchPauseResume $ do + p <- runAssistant d $ liftAnnex $ + Annex.getRead Annex.transferrerpool + signalactonsvar <- runAssistant d $ liftAnnex $ + Annex.getRead Annex.signalactions + withTransferrer' True signalactonsvar mkcheck rt p run + pause = catchPauseResume $ + runEvery (Seconds 86400) noop + {- Note: This must use E.try, rather than E.catch. + - When E.catch is used, and has called go in its exception + - handler, Control.Concurrent.throwTo will block sometimes + - when signaling. Using E.try avoids the problem. -} + catchPauseResume a' = do + r <- E.try a' :: IO (Either E.SomeException ()) + case r of + Left e -> case E.fromException e of + Just PauseTransfer -> pause + Just ResumeTransfer -> go + _ -> done + _ -> done + done = runAssistant d $ + flip MSemN.signal 1 <<~ transferSlots + +{- By the time this is called, the daemonstatus's currentTransfers map should + - already have been updated to include the transfer. -} +genTransfer :: Transfer -> TransferInfo -> TransferGenerator +genTransfer t info = case transferRemote info of + Just remote -> ifM (unpluggedremovabledrive remote) + ( do + -- optimisation, since the transfer would fail + liftAnnex $ recordFailedTransfer t info + void $ removeTransfer t + return Nothing + , ifM (liftAnnex $ shouldTransfer t info) + ( do + qp <- liftAnnex $ coreQuotePath <$> Annex.getGitConfig + debug [ "Transferring:" , describeTransfer qp t info ] + notifyTransfer + let sd = getStallDetection (transferDirection t) remote + return $ Just (t, info, go remote sd) + , do + qp <- liftAnnex $ coreQuotePath <$> Annex.getGitConfig + debug [ "Skipping unnecessary transfer:", + describeTransfer qp t info ] + void $ removeTransfer t + finishedTransfer t (Just info) + return Nothing + ) + ) + _ -> return Nothing + where + direction = transferDirection t + isdownload = direction == Download + + unpluggedremovabledrive remote = Git.repoIsLocalUnknown + <$> liftAnnex (Remote.getRepo remote) + + {- Alerts are only shown for successful transfers. + - Transfers can temporarily fail for many reasons, + - so there's no point in bothering the user about + - those. The assistant should recover. + - + - After a successful upload, handle dropping it from + - here, if desired. In this case, the remote it was + - uploaded to is known to have it. + - + - Also, after a successful transfer, the location + - log has changed. Indicate that a commit has been + - made, in order to queue a push of the git-annex + - branch out to remotes that did not participate + - in the transfer. + - + - If the process failed, it could have crashed, + - so remove the transfer from the list of current + - transfers, just in case it didn't stop + - in a way that lets the TransferWatcher do its + - usual cleanup. However, first check if something else is + - running the transfer, to avoid removing active transfers. + -} + go remote sd transferrer = ifM (isRight <$> performTransfer sd AssistantLevel liftAnnex (transferRemote info) t info transferrer) + ( do + case associatedFile info of + AssociatedFile Nothing -> noop + AssociatedFile (Just af) -> void $ + addAlert $ makeAlertFiller True $ + transferFileAlert direction True (fromRawFilePath af) + unless isdownload $ + handleDrops + ("object uploaded to " ++ show remote) + True (transferKey t) + (associatedFile info) + [mkVerifiedCopy RecentlyVerifiedCopy remote] + void recordCommit + , whenM (liftAnnex $ isNothing <$> checkTransfer t) $ + void $ removeTransfer t + ) + +{- Called right before a transfer begins, this is a last chance to avoid + - unnecessary transfers. + - + - For downloads, we obviously don't need to download if the already + - have the object. + - + - Smilarly, for uploads, check if the remote is known to already have + - the object. + - + - Also, uploads get queued to all remotes, in order of cost. + - This may mean, for example, that an object is uploaded over the LAN + - to a locally paired client, and once that upload is done, a more + - expensive transfer remote no longer wants the object. (Since + - all the clients have it already.) So do one last check if this is still + - preferred content. + - + - We'll also do one last preferred content check for downloads. An + - example of a case where this could be needed is if a download is queued + - for a file that gets moved out of an archive directory -- but before + - that download can happen, the file is put back in the archive. + -} +shouldTransfer :: Transfer -> TransferInfo -> Annex Bool +shouldTransfer t info + | transferDirection t == Download = + (not <$> inAnnex key) <&&> wantGet True (Just key) file + | transferDirection t == Upload = case transferRemote info of + Nothing -> return False + Just r -> notinremote r + <&&> wantGetBy True (Just key) file (Remote.uuid r) + | otherwise = return False + where + key = transferKey t + file = associatedFile info + + {- Trust the location log to check if the remote already has + - the key. This avoids a roundtrip to the remote. -} + notinremote r = notElem (Remote.uuid r) <$> loggedLocations key + +{- Queue uploads of files downloaded to us, spreading them + - out to other reachable remotes. + - + - Downloading a file may have caused a remote to not want it; + - so check for drops from remotes. + - + - Uploading a file may cause the local repo, or some other remote to not + - want it; handle that too. + -} +finishedTransfer :: Transfer -> Maybe TransferInfo -> Assistant () +finishedTransfer t (Just info) + | transferDirection t == Download = + whenM (liftAnnex $ inAnnex $ transferKey t) $ do + dodrops False + void $ queueTransfersMatching (/= transferUUID t) + "newly received object" + Later (transferKey t) (associatedFile info) Upload + | otherwise = dodrops True + where + dodrops fromhere = do + qp <- liftAnnex $ coreQuotePath <$> Annex.getGitConfig + handleDrops + ("drop wanted after " ++ describeTransfer qp t info) + fromhere (transferKey t) (associatedFile info) [] +finishedTransfer _ _ = noop + +{- Pause a running transfer. -} +pauseTransfer :: Transfer -> Assistant () +pauseTransfer = cancelTransfer True + +{- Cancel a running transfer. -} +cancelTransfer :: Bool -> Transfer -> Assistant () +cancelTransfer pause t = do + m <- getCurrentTransfers + unless pause $ + {- remove queued transfer -} + void $ dequeueTransfers $ equivilantTransfer t + {- stop running transfer -} + maybe noop stop (M.lookup t m) + where + stop info = do + {- When there's a thread associated with the + - transfer, it's signaled first, to avoid it + - displaying any alert about the transfer having + - failed when the transfer process is killed. -} + liftIO $ maybe noop signalthread $ transferTid info + liftIO $ maybe noop killproc $ transferPid info + if pause + then void $ alterTransferInfo t $ + \i -> i { transferPaused = True } + else void $ removeTransfer t + signalthread tid + | pause = throwTo tid PauseTransfer + | otherwise = killThread tid + killproc pid = void $ tryIO $ do +#ifndef mingw32_HOST_OS + {- In order to stop helper processes like rsync, + - kill the whole process group of the process + - running the transfer. -} + g <- getProcessGroupIDOf pid + let signal sig = void $ tryIO $ signalProcessGroup sig g + signal sigTERM + threadDelay 50000 -- 0.05 second grace period + signal sigKILL +#else + terminateProcessById pid +#endif + +{- Start or resume a transfer. -} +startTransfer :: Transfer -> Assistant () +startTransfer t = do + m <- getCurrentTransfers + maybe startqueued go (M.lookup t m) + where + go info = maybe (start info) resume $ transferTid info + startqueued = do + is <- map snd <$> getMatchingTransfers (== t) + maybe noop start $ headMaybe is + resume tid = do + alterTransferInfo t $ \i -> i { transferPaused = False } + liftIO $ throwTo tid ResumeTransfer + start info = do + rt <- liftAnnex . mkRunTransferrer + =<< liftIO getBatchCommandMaker + inImmediateTransferSlot rt $ + genTransfer t info + +getCurrentTransfers :: Assistant TransferMap +getCurrentTransfers = currentTransfers <$> getDaemonStatus + +checkNetworkConnections :: DaemonStatusHandle -> MkCheckTransferrer +checkNetworkConnections dstatushandle = do + dstatus <- atomically $ readTVar dstatushandle + h <- newNotificationHandle False (networkConnectedNotifier dstatus) + return $ not <$> checkNotification h diff --git a/Assistant/Types/Alert.hs b/Assistant/Types/Alert.hs new file mode 100644 index 0000000000..e6dcdc9ce2 --- /dev/null +++ b/Assistant/Types/Alert.hs @@ -0,0 +1,79 @@ +{- git-annex assistant alert types + - + - Copyright 2013 Joey Hess + - + - Licensed under the GNU AGPL version 3 or higher. + -} + +module Assistant.Types.Alert where + +import Utility.Tense + +import Data.Text (Text) +import qualified Data.Map as M + +{- Different classes of alerts are displayed differently. -} +data AlertClass = Success | Message | Activity | Warning | Error + deriving (Eq, Ord) + +data AlertPriority = Filler | Low | Medium | High | Pinned + deriving (Eq, Ord) + +{- An alert can have an name, which is used to combine it with other similar + - alerts. -} +data AlertName + = FileAlert TenseChunk + | SanityCheckFixAlert + | WarningAlert String + | PairAlert String + | ConnectionNeededAlert + | RemoteRemovalAlert String + | CloudRepoNeededAlert + | SyncAlert + | NotFsckedAlert + | UpgradeAlert + | UnusedFilesAlert + deriving (Eq) + +{- The first alert is the new alert, the second is an old alert. + - Should return a modified version of the old alert. -} +type AlertCombiner = Alert -> Alert -> Maybe Alert + +data Alert = Alert + { alertClass :: AlertClass + , alertHeader :: Maybe TenseText + , alertMessageRender :: Alert -> TenseText + , alertData :: [TenseChunk] + , alertCounter :: Int + , alertBlockDisplay :: Bool + , alertClosable :: Bool + , alertPriority :: AlertPriority + , alertIcon :: Maybe AlertIcon + , alertCombiner :: Maybe AlertCombiner + , alertName :: Maybe AlertName + , alertButtons :: [AlertButton] + } + +data AlertIcon = ActivityIcon | SyncIcon | SuccessIcon | ErrorIcon | InfoIcon | UpgradeIcon | ConnectionIcon + +type AlertMap = M.Map AlertId Alert + +{- Higher AlertId indicates a more recent alert. -} +newtype AlertId = AlertId Integer + deriving (Read, Show, Eq, Ord) + +firstAlertId :: AlertId +firstAlertId = AlertId 0 + +nextAlertId :: AlertId -> AlertId +nextAlertId (AlertId i) = AlertId $ succ i + +{- When clicked, a button always redirects to a URL + - It may also run an IO action in the background, which is useful + - to make the button close or otherwise change the alert. -} +data AlertButton = AlertButton + { buttonLabel :: Text + , buttonUrl :: Text + , buttonAction :: Maybe (AlertId -> IO ()) + , buttonPrimary :: Bool + } diff --git a/Assistant/Types/BranchChange.hs b/Assistant/Types/BranchChange.hs new file mode 100644 index 0000000000..1f4128b754 --- /dev/null +++ b/Assistant/Types/BranchChange.hs @@ -0,0 +1,20 @@ +{- git-annex assistant git-annex branch change tracking + - + - Copyright 2012 Joey Hess + - + - Licensed under the GNU AGPL version 3 or higher. + -} + +module Assistant.Types.BranchChange where + +import Control.Concurrent.MSampleVar +import Control.Applicative +import Prelude + +newtype BranchChangeHandle = BranchChangeHandle (MSampleVar ()) + +newBranchChangeHandle :: IO BranchChangeHandle +newBranchChangeHandle = BranchChangeHandle <$> newEmptySV + +fromBranchChangeHandle :: BranchChangeHandle -> MSampleVar () +fromBranchChangeHandle (BranchChangeHandle v) = v diff --git a/Assistant/Types/Changes.hs b/Assistant/Types/Changes.hs new file mode 100644 index 0000000000..a08810ba54 --- /dev/null +++ b/Assistant/Types/Changes.hs @@ -0,0 +1,101 @@ +{- git-annex assistant change tracking + - + - Copyright 2012-2015 Joey Hess + - + - Licensed under the GNU AGPL version 3 or higher. + -} + +{-# LANGUAGE BangPatterns #-} + +module Assistant.Types.Changes where + +import Types.KeySource +import Types.Key +import Utility.TList +import Utility.FileSystemEncoding +import Annex.Ingest + +import Control.Concurrent.STM +import Data.Time.Clock +import qualified Data.Set as S + +{- An un-ordered pool of Changes that have been noticed and should be + - staged and committed. Changes will typically be in order, but ordering + - may be lost. In any case, order should not matter, as any given Change + - may later be reverted by a later Change (ie, a file is added and then + - deleted). Code that processes the changes needs to deal with such + - scenarios. + -} +type ChangePool = TList Change + +newChangePool :: IO ChangePool +newChangePool = atomically newTList + +data Change + = Change + { changeTime :: UTCTime + , _changeFile :: FilePath + , changeInfo :: ChangeInfo + } + | PendingAddChange + { changeTime ::UTCTime + , _changeFile :: FilePath + } + | InProcessAddChange + { changeTime ::UTCTime + , lockedDown :: LockedDown + } + deriving (Show) + +data ChangeInfo = AddKeyChange Key | AddFileChange | LinkChange (Maybe Key) | RmChange + deriving (Show, Eq, Ord) + +changeInfoKey :: ChangeInfo -> Maybe Key +changeInfoKey (AddKeyChange k) = Just k +changeInfoKey (LinkChange (Just k)) = Just k +changeInfoKey _ = Nothing + +changeFile :: Change -> FilePath +changeFile (Change _ f _) = f +changeFile (PendingAddChange _ f) = f +changeFile (InProcessAddChange _ ld) = fromRawFilePath $ keyFilename $ keySource ld + +isPendingAddChange :: Change -> Bool +isPendingAddChange (PendingAddChange {}) = True +isPendingAddChange _ = False + +isInProcessAddChange :: Change -> Bool +isInProcessAddChange (InProcessAddChange {}) = True +isInProcessAddChange _ = False + +retryChange :: Change -> Change +retryChange c@(InProcessAddChange time _) = + PendingAddChange time $ changeFile c +retryChange c = c + +finishedChange :: Change -> Key -> Change +finishedChange c@(InProcessAddChange {}) k = Change + { changeTime = changeTime c + , _changeFile = changeFile c + , changeInfo = AddKeyChange k + } +finishedChange c _ = c + +{- Combine PendingAddChanges that are for the same file. + - Multiple such often get noticed when eg, a file is opened and then + - closed in quick succession. -} +simplifyChanges :: [Change] -> [Change] +simplifyChanges [c] = [c] +simplifyChanges cl = go cl S.empty [] + where + go [] _ l = reverse l + go (c:cs) seen l + | isPendingAddChange c = + if S.member f seen + then go cs seen l + else + let !seen' = S.insert f seen + in go cs seen' (c:l) + | otherwise = go cs seen (c:l) + where + f = changeFile c diff --git a/Assistant/Types/Commits.hs b/Assistant/Types/Commits.hs new file mode 100644 index 0000000000..d7c13b027e --- /dev/null +++ b/Assistant/Types/Commits.hs @@ -0,0 +1,19 @@ +{- git-annex assistant commit tracking + - + - Copyright 2012 Joey Hess + - + - Licensed under the GNU AGPL version 3 or higher. + -} + +module Assistant.Types.Commits where + +import Utility.TList + +import Control.Concurrent.STM + +type CommitChan = TList Commit + +data Commit = Commit + +newCommitChan :: IO CommitChan +newCommitChan = atomically newTList diff --git a/Assistant/Types/CredPairCache.hs b/Assistant/Types/CredPairCache.hs new file mode 100644 index 0000000000..d70c47b943 --- /dev/null +++ b/Assistant/Types/CredPairCache.hs @@ -0,0 +1,18 @@ +{- git-annex assistant CredPair cache. + - + - Copyright 2014 Joey Hess + - + - Licensed under the GNU AGPL version 3 or higher. + -} + +module Assistant.Types.CredPairCache where + +import Types.Creds + +import Control.Concurrent +import qualified Data.Map as M + +type CredPairCache = MVar (M.Map Login Password) + +newCredPairCache :: IO CredPairCache +newCredPairCache = newMVar M.empty diff --git a/Assistant/Types/DaemonStatus.hs b/Assistant/Types/DaemonStatus.hs new file mode 100644 index 0000000000..9c547aa10a --- /dev/null +++ b/Assistant/Types/DaemonStatus.hs @@ -0,0 +1,119 @@ +{- git-annex assistant daemon status + - + - Copyright 2012 Joey Hess + - + - Licensed under the GNU AGPL version 3 or higher. + -} + +module Assistant.Types.DaemonStatus where + +import Annex.Common +import Assistant.Pairing +import Utility.NotificationBroadcaster +import Types.Transfer +import Assistant.Types.ThreadName +import Assistant.Types.Alert +import Utility.Url + +import Control.Concurrent.STM +import Control.Concurrent.MVar +import Control.Concurrent.Async +import Data.Time.Clock.POSIX +import qualified Data.Map as M +import qualified Data.Set as S + +data DaemonStatus = DaemonStatus + -- All the named threads that comprise the daemon, + -- and actions to run to restart them. + { startedThreads :: M.Map ThreadName (Async (), IO ()) + -- False when the daemon is performing its startup scan + , scanComplete :: Bool + -- True when all files should be restaged. + , forceRestage :: Bool + -- Time when a previous process of the daemon was running ok + , lastRunning :: Maybe POSIXTime + -- True when the daily sanity checker is running + , sanityCheckRunning :: Bool + -- Last time the daily sanity checker ran + , lastSanityCheck :: Maybe POSIXTime + -- True when a scan for file transfers is running + , transferScanRunning :: Bool + -- Currently running file content transfers + , currentTransfers :: TransferMap + -- Messages to display to the user. + , alertMap :: AlertMap + , lastAlertId :: AlertId + -- Ordered list of all remotes that can be synced with + , syncRemotes :: [Remote] + -- Ordered list of remotes to sync git with + , syncGitRemotes :: [Remote] + -- Ordered list of remotes to sync data with + , syncDataRemotes :: [Remote] + -- Ordered list of remotes to export to + , exportRemotes :: [Remote] + -- Ordered list of remotes that data can be downloaded from + , downloadRemotes :: [Remote] + -- Are we syncing to any cloud remotes? + , syncingToCloudRemote :: Bool + -- Set of uuids of remotes that are currently connected. + , currentlyConnectedRemotes :: S.Set UUID + -- Pairing request that is in progress. + , pairingInProgress :: Maybe PairingInProgress + -- Broadcasts notifications about all changes to the DaemonStatus. + , changeNotifier :: NotificationBroadcaster + -- Broadcasts notifications when queued or current transfers change. + , transferNotifier :: NotificationBroadcaster + -- Broadcasts notifications when there's a change to the alerts. + , alertNotifier :: NotificationBroadcaster + -- Broadcasts notifications when the syncRemotes change. + , syncRemotesNotifier :: NotificationBroadcaster + -- Broadcasts notifications when the scheduleLog changes. + , scheduleLogNotifier :: NotificationBroadcaster + -- Broadcasts a notification once the startup sanity check has run. + , startupSanityCheckNotifier :: NotificationBroadcaster + -- Broadcasts notifications when the network is connected. + , networkConnectedNotifier :: NotificationBroadcaster + -- Broadcasts notifications when a global redirect is needed. + , globalRedirNotifier :: NotificationBroadcaster + , globalRedirUrl :: Maybe URLString + -- Actions to run after a Key is transferred. + , transferHook :: M.Map Key (Transfer -> IO ()) + -- MVars to signal when a remote gets connected. + , connectRemoteNotifiers :: M.Map UUID [MVar ()] + } + +type TransferMap = M.Map Transfer TransferInfo + +type DaemonStatusHandle = TVar DaemonStatus + +newDaemonStatus :: IO DaemonStatus +newDaemonStatus = DaemonStatus + <$> pure M.empty + <*> pure False + <*> pure False + <*> pure Nothing + <*> pure False + <*> pure Nothing + <*> pure False + <*> pure M.empty + <*> pure M.empty + <*> pure firstAlertId + <*> pure [] + <*> pure [] + <*> pure [] + <*> pure [] + <*> pure [] + <*> pure False + <*> pure S.empty + <*> pure Nothing + <*> newNotificationBroadcaster + <*> newNotificationBroadcaster + <*> newNotificationBroadcaster + <*> newNotificationBroadcaster + <*> newNotificationBroadcaster + <*> newNotificationBroadcaster + <*> newNotificationBroadcaster + <*> newNotificationBroadcaster + <*> pure Nothing + <*> pure M.empty + <*> pure M.empty diff --git a/Assistant/Types/NamedThread.hs b/Assistant/Types/NamedThread.hs new file mode 100644 index 0000000000..866affc90c --- /dev/null +++ b/Assistant/Types/NamedThread.hs @@ -0,0 +1,21 @@ +{- named threads + - + - Copyright 2012 Joey Hess + - + - Licensed under the GNU AGPL version 3 or higher. + -} + +module Assistant.Types.NamedThread where + +import Assistant.Monad +import Assistant.Types.ThreadName + +{- Information about a named thread that can be run. -} +data NamedThread = NamedThread Bool ThreadName (Assistant ()) + +namedThread :: String -> Assistant () -> NamedThread +namedThread = NamedThread True . ThreadName + +{- A named thread that can start running before the startup sanity check. -} +namedThreadUnchecked :: String -> Assistant () -> NamedThread +namedThreadUnchecked = NamedThread False . ThreadName diff --git a/Assistant/Types/Pushes.hs b/Assistant/Types/Pushes.hs new file mode 100644 index 0000000000..57cafb4fae --- /dev/null +++ b/Assistant/Types/Pushes.hs @@ -0,0 +1,24 @@ +{- git-annex assistant push tracking + - + - Copyright 2012 Joey Hess + - + - Licensed under the GNU AGPL version 3 or higher. + -} + +module Assistant.Types.Pushes where + +import Annex.Common + +import Control.Concurrent.STM +import Data.Time.Clock +import qualified Data.Map as M + +{- Track the most recent push failure for each remote. -} +type PushMap = M.Map Remote UTCTime +type FailedPushMap = TMVar PushMap + +{- The TMVar starts empty, and is left empty when there are no + - failed pushes. This way we can block until there are some failed pushes. + -} +newFailedPushMap :: IO FailedPushMap +newFailedPushMap = atomically newEmptyTMVar diff --git a/Assistant/Types/RemoteControl.hs b/Assistant/Types/RemoteControl.hs new file mode 100644 index 0000000000..433a37bd9b --- /dev/null +++ b/Assistant/Types/RemoteControl.hs @@ -0,0 +1,16 @@ +{- git-annex assistant RemoteDaemon control + - + - Copyright 2014 Joey Hess + - + - Licensed under the GNU AGPL version 3 or higher. + -} + +module Assistant.Types.RemoteControl where + +import qualified RemoteDaemon.Types as RemoteDaemon +import Control.Concurrent + +type RemoteControl = Chan RemoteDaemon.Consumed + +newRemoteControl :: IO RemoteControl +newRemoteControl = newChan diff --git a/Assistant/Types/RepoProblem.hs b/Assistant/Types/RepoProblem.hs new file mode 100644 index 0000000000..afc7e4b2f3 --- /dev/null +++ b/Assistant/Types/RepoProblem.hs @@ -0,0 +1,28 @@ +{- git-annex assistant repository problem tracking + - + - Copyright 2013 Joey Hess + - + - Licensed under the GNU AGPL version 3 or higher. + -} + +module Assistant.Types.RepoProblem where + +import Types +import Utility.TList + +import Control.Concurrent.STM +import Data.Function + +data RepoProblem = RepoProblem + { problemUUID :: UUID + , afterFix :: IO () + } + +{- The afterFix actions are assumed to all be equivalent. -} +sameRepoProblem :: RepoProblem -> RepoProblem -> Bool +sameRepoProblem = (==) `on` problemUUID + +type RepoProblemChan = TList RepoProblem + +newRepoProblemChan :: IO RepoProblemChan +newRepoProblemChan = atomically newTList diff --git a/Assistant/Types/ScanRemotes.hs b/Assistant/Types/ScanRemotes.hs new file mode 100644 index 0000000000..09fa75a877 --- /dev/null +++ b/Assistant/Types/ScanRemotes.hs @@ -0,0 +1,25 @@ +{- git-annex assistant remotes needing scanning + - + - Copyright 2012 Joey Hess + - + - Licensed under the GNU AGPL version 3 or higher. + -} + +module Assistant.Types.ScanRemotes where + +import Annex.Common + +import Control.Concurrent.STM +import qualified Data.Map as M + +data ScanInfo = ScanInfo + { scanPriority :: Float + , fullScan :: Bool + } + +type ScanRemoteMap = TMVar (M.Map Remote ScanInfo) + +{- The TMVar starts empty, and is left empty when there are no remotes + - to scan. -} +newScanRemoteMap :: IO ScanRemoteMap +newScanRemoteMap = atomically newEmptyTMVar diff --git a/Assistant/Types/ThreadName.hs b/Assistant/Types/ThreadName.hs new file mode 100644 index 0000000000..06435f474f --- /dev/null +++ b/Assistant/Types/ThreadName.hs @@ -0,0 +1,14 @@ +{- name of a thread + - + - Copyright 2012 Joey Hess + - + - Licensed under the GNU AGPL version 3 or higher. + -} + +module Assistant.Types.ThreadName where + +newtype ThreadName = ThreadName String + deriving (Eq, Read, Show, Ord) + +fromThreadName :: ThreadName -> String +fromThreadName (ThreadName n) = n diff --git a/Assistant/Types/ThreadedMonad.hs b/Assistant/Types/ThreadedMonad.hs new file mode 100644 index 0000000000..4c07317807 --- /dev/null +++ b/Assistant/Types/ThreadedMonad.hs @@ -0,0 +1,40 @@ +{- making the Annex monad available across threads + - + - Copyright 2012 Joey Hess + - + - Licensed under the GNU AGPL version 3 or higher. + -} + +module Assistant.Types.ThreadedMonad where + +import Annex.Common +import qualified Annex + +import Control.Concurrent +import Data.Tuple + +{- The Annex state is stored in a MVar, so that threaded actions can access + - it. -} +type ThreadState = MVar (Annex.AnnexState, Annex.AnnexRead) + +{- Stores the Annex state in a MVar. + - + - Once the action is finished, retrieves the state from the MVar. + -} +withThreadState :: (ThreadState -> Annex a) -> Annex a +withThreadState a = do + state <- Annex.getState id + rd <- Annex.getRead id + mvar <- liftIO $ newMVar (state, rd) + r <- a mvar + newstate <- liftIO $ fst <$> takeMVar mvar + Annex.changeState (const newstate) + return r + +{- Runs an Annex action, using the state from the MVar. + - + - This serializes calls by threads; only one thread can run in Annex at a + - time. -} +runThreadState :: ThreadState -> Annex a -> IO a +runThreadState mvar a = modifyMVar mvar $ \v -> swap <$> Annex.run v a + diff --git a/Assistant/Types/TransferQueue.hs b/Assistant/Types/TransferQueue.hs new file mode 100644 index 0000000000..f15a43200c --- /dev/null +++ b/Assistant/Types/TransferQueue.hs @@ -0,0 +1,29 @@ +{- git-annex assistant pending transfer queue + - + - Copyright 2012 Joey Hess + - + - Licensed under the GNU AGPL version 3 or higher. + -} + +module Assistant.Types.TransferQueue where + +import Annex.Common +import Types.Transfer + +import Control.Concurrent.STM +import Utility.TList + +data TransferQueue = TransferQueue + { queuesize :: TVar Int + , queuelist :: TList (Transfer, TransferInfo) + , deferreddownloads :: TList (Key, AssociatedFile) + } + +data Schedule = Next | Later + deriving (Eq) + +newTransferQueue :: IO TransferQueue +newTransferQueue = atomically $ TransferQueue + <$> newTVar 0 + <*> newTList + <*> newTList diff --git a/Assistant/Types/TransferSlots.hs b/Assistant/Types/TransferSlots.hs new file mode 100644 index 0000000000..bbcc84fb4b --- /dev/null +++ b/Assistant/Types/TransferSlots.hs @@ -0,0 +1,34 @@ +{- git-annex assistant transfer slots + - + - Copyright 2012 Joey Hess + - + - Licensed under the GNU AGPL version 3 or higher. + -} + +{-# LANGUAGE DeriveDataTypeable #-} + +module Assistant.Types.TransferSlots where + +import qualified Control.Exception as E +import qualified Control.Concurrent.MSemN as MSemN +import Data.Typeable + +type TransferSlots = MSemN.MSemN Int + +{- A special exception that can be thrown to pause or resume a transfer, while + - keeping its slot in use. -} +data TransferException = PauseTransfer | ResumeTransfer + deriving (Show, Eq, Typeable) + +instance E.Exception TransferException + +{- Number of concurrent transfers allowed to be run from the assistant. + - + - Transfers launched by other means, including by remote assistants, + - do not currently take up slots. + -} +numSlots :: Int +numSlots = 1 + +newTransferSlots :: IO TransferSlots +newTransferSlots = MSemN.new numSlots diff --git a/Assistant/Types/UrlRenderer.hs b/Assistant/Types/UrlRenderer.hs new file mode 100644 index 0000000000..f0ffb10acd --- /dev/null +++ b/Assistant/Types/UrlRenderer.hs @@ -0,0 +1,26 @@ +{- webapp url renderer access from the assistant + - + - Copyright 2013 Joey Hess + - + - Licensed under the GNU AGPL version 3 or higher. + -} + +{-# LANGUAGE CPP #-} + +module Assistant.Types.UrlRenderer ( + UrlRenderer, + newUrlRenderer +) where + +#ifdef WITH_WEBAPP + +import Assistant.WebApp (UrlRenderer, newUrlRenderer) + +#else + +data UrlRenderer = UrlRenderer -- dummy type + +newUrlRenderer :: IO UrlRenderer +newUrlRenderer = return UrlRenderer + +#endif diff --git a/Assistant/Unused.hs b/Assistant/Unused.hs new file mode 100644 index 0000000000..8af61527d2 --- /dev/null +++ b/Assistant/Unused.hs @@ -0,0 +1,85 @@ +{- git-annex assistant unused files + - + - Copyright 2014 Joey Hess + - + - Licensed under the GNU AGPL version 3 or higher. + -} + +{-# LANGUAGE OverloadedStrings #-} + +module Assistant.Unused where + +import qualified Data.Map as M + +import Assistant.Common +import qualified Git +import Logs.Unused +import Logs.Location +import Annex.Content +import Utility.DataUnits +import Utility.DiskFree +import Utility.HumanTime +import Utility.Tense + +import Data.Time.Clock.POSIX +import qualified Data.Text as T + +describeUnused :: Assistant (Maybe TenseText) +describeUnused = describeUnused' False + +describeUnusedWhenBig :: Assistant (Maybe TenseText) +describeUnusedWhenBig = describeUnused' True + +{- This uses heuristics: 1000 unused keys, or more unused keys + - than the remaining free disk space, or more than 1/10th the total + - disk space being unused keys all suggest a problem. -} +describeUnused' :: Bool -> Assistant (Maybe TenseText) +describeUnused' whenbig = liftAnnex $ go =<< readUnusedLog "" + where + go m = do + let num = M.size m + let diskused = foldl' sumkeysize 0 (M.keys m) + df <- forpath getDiskFree + disksize <- forpath getDiskSize + return $ if num == 0 + then Nothing + else if not whenbig || moreused df diskused || tenthused disksize diskused + then Just $ tenseWords + [ UnTensed $ T.pack $ roughSize storageUnits False diskused + , Tensed "are" "were" + , "taken up by unused files" + ] + else if num > 1000 + then Just $ tenseWords + [ UnTensed $ T.pack $ show num ++ " unused files" + , Tensed "exist" "existed" + ] + else Nothing + + moreused Nothing _ = False + moreused (Just df) used = df <= used + + tenthused Nothing _ = False + tenthused (Just disksize) used = used >= disksize `div` 10 + + sumkeysize s k = s + fromMaybe 0 (fromKey keySize k) + + forpath a = inRepo $ liftIO . a . fromRawFilePath . Git.repoPath + +{- With a duration, expires all unused files that are older. + - With Nothing, expires *all* unused files. -} +expireUnused :: Maybe Duration -> Assistant () +expireUnused duration = do + m <- liftAnnex $ readUnusedLog "" + now <- liftIO getPOSIXTime + let oldkeys = M.keys $ M.filter (tooold now) m + forM_ oldkeys $ \k -> do + debug ["removing old unused key", serializeKey k] + liftAnnex $ tryNonAsync $ do + lockContentForRemoval k noop removeAnnex + logStatus k InfoMissing + where + boundary = durationToPOSIXTime <$> duration + tooold now (_, mt) = case boundary of + Nothing -> True + Just b -> maybe False (\t -> now - t >= b) mt diff --git a/Assistant/Upgrade.hs b/Assistant/Upgrade.hs new file mode 100644 index 0000000000..419c133a62 --- /dev/null +++ b/Assistant/Upgrade.hs @@ -0,0 +1,377 @@ +{- git-annex assistant upgrading + - + - Copyright 2013 Joey Hess + - + - Licensed under the GNU AGPL version 3 or higher. + -} + +{-# LANGUAGE CPP #-} + +module Assistant.Upgrade where + +import Assistant.Common +import Assistant.Restart +import qualified Annex +import Assistant.Alert +import Assistant.DaemonStatus +import Utility.Env +import Utility.Env.Set +import Types.Distribution +import Types.Transfer +import Logs.Web +import Logs.Presence +import Logs.Location +import Annex.Content +import Annex.UUID +import qualified Backend +import qualified Types.Backend +import Assistant.TransferQueue +import Assistant.TransferSlots +import Remote (remoteFromUUID) +import Annex.Path +import Config.Files +import Utility.ThreadScheduler +import Utility.Tmp.Dir +import Utility.UserInfo +import Utility.Gpg +import Utility.FileMode +import Utility.Metered +import qualified Utility.Lsof as Lsof +import qualified BuildInfo +import qualified Utility.Url as Url +import qualified Annex.Url as Url hiding (download) +import Utility.Tuple +import qualified Utility.RawFilePath as R + +import Data.Either +import qualified Data.Map as M + +{- Upgrade without interaction in the webapp. -} +unattendedUpgrade :: Assistant () +unattendedUpgrade = do + prepUpgrade + url <- runRestart + postUpgrade url + +prepUpgrade :: Assistant () +prepUpgrade = do + void $ addAlert upgradingAlert + liftIO $ setEnv upgradedEnv "1" True + prepRestart + +postUpgrade :: URLString -> Assistant () +postUpgrade = postRestart + +autoUpgradeEnabled :: Assistant Bool +autoUpgradeEnabled = liftAnnex $ (==) AutoUpgrade . annexAutoUpgrade <$> Annex.getGitConfig + +checkSuccessfulUpgrade :: IO Bool +checkSuccessfulUpgrade = isJust <$> getEnv upgradedEnv + +upgradedEnv :: String +upgradedEnv = "GIT_ANNEX_UPGRADED" + +{- Start downloading the distribution key from the web. + - Install a hook that will be run once the download is complete, + - and finishes the upgrade. + - + - Creates the destination directory where the upgrade will be installed + - early, in order to check if another upgrade has happened (or is + - happending). On failure, the directory is removed. + -} +startDistributionDownload :: GitAnnexDistribution -> Assistant () +startDistributionDownload d = go =<< liftIO . newVersionLocation d =<< liftIO oldVersionLocation + where + go Nothing = debug ["Skipping redundant upgrade"] + go (Just dest) = do + liftAnnex $ setUrlPresent k u + hook <- asIO1 $ distributionDownloadComplete d dest cleanup + modifyDaemonStatus_ $ \s -> s + { transferHook = M.insert k hook (transferHook s) } + maybe noop (queueTransfer "upgrade" Next (AssociatedFile (Just (toRawFilePath f))) t) + =<< liftAnnex (remoteFromUUID webUUID) + startTransfer t + k = mkKey $ const $ distributionKey d + u = distributionUrl d + f = takeFileName u ++ " (for upgrade)" + t = Transfer + { transferDirection = Download + , transferUUID = webUUID + , transferKeyData = fromKey id k + } + cleanup = liftAnnex $ do + lockContentForRemoval k noop removeAnnex + setUrlMissing k u + logStatus k InfoMissing + +{- Called once the download is done. + - Passed an action that can be used to clean up the downloaded file. + - + - Verifies the content of the downloaded key. + -} +distributionDownloadComplete :: GitAnnexDistribution -> FilePath -> Assistant () -> Transfer -> Assistant () +distributionDownloadComplete d dest cleanup t + | transferDirection t == Download = do + debug ["finished downloading git-annex distribution"] + maybe (failedupgrade "bad download") go + =<< liftAnnex (withObjectLoc k fsckit) + | otherwise = cleanup + where + k = mkKey $ const $ distributionKey d + fsckit f = Backend.maybeLookupBackendVariety (fromKey keyVariety k) >>= \case + Nothing -> return $ Just (fromRawFilePath f) + Just b -> case Types.Backend.verifyKeyContent b of + Nothing -> return $ Just (fromRawFilePath f) + Just verifier -> ifM (verifier k f) + ( return $ Just (fromRawFilePath f) + , return Nothing + ) + go f = do + ua <- asIO $ upgradeToDistribution dest cleanup f + fa <- asIO1 failedupgrade + liftIO $ ua `catchNonAsync` (fa . show) + failedupgrade msg = do + void $ addAlert $ upgradeFailedAlert msg + cleanup + liftIO $ void $ tryIO $ removeDirectoryRecursive dest + +{- The upgrade method varies by OS. + - + - In general, find where the distribution was installed before, + - and unpack the new distribution next to it (in a versioned directory). + - Then update the programFile to point to the new version. + -} +upgradeToDistribution :: FilePath -> Assistant () -> FilePath -> Assistant () +upgradeToDistribution newdir cleanup distributionfile = do + liftIO $ createDirectoryIfMissing True newdir + (program, deleteold) <- unpack + changeprogram program + cleanup + prepUpgrade + url <- runRestart + {- At this point, the new assistant is fully running, so + - it's safe to delete the old version. -} + liftIO $ void $ tryIO deleteold + postUpgrade url + where + changeprogram program = liftIO $ do + unlessM (boolSystem program [Param "version"]) $ + giveup "New git-annex program failed to run! Not using." + pf <- programFile + liftIO $ writeFile pf program + +#ifdef darwin_HOST_OS + {- OS X uses a dmg, so mount it, and copy the contents into place. -} + unpack = liftIO $ do + olddir <- oldVersionLocation + withTmpDirIn (fromRawFilePath (parentDir (toRawFilePath newdir))) "git-annex.upgrade" $ \tmpdir -> do + void $ boolSystem "hdiutil" + [ Param "attach", File distributionfile + , Param "-mountpoint", File tmpdir + ] + void $ boolSystem "cp" + [ Param "-R" + , File $ tmpdir installBase "Contents" + , File $ newdir + ] + void $ boolSystem "hdiutil" + [ Param "eject" + , File tmpdir + ] + sanitycheck newdir + let deleteold = do + deleteFromManifest $ olddir "Contents" "MacOS" + makeorigsymlink olddir + return (newdir "Contents" "MacOS" "git-annex", deleteold) +#else + {- Linux uses a tarball (so could other POSIX systems), so + - untar it (into a temp directory) and move the directory + - into place. -} + unpack = liftIO $ do + olddir <- oldVersionLocation + withTmpDirIn (fromRawFilePath $ parentDir $ toRawFilePath newdir) "git-annex.upgrade" $ \tmpdir -> do + let tarball = tmpdir "tar" + -- Cannot rely on filename extension, and this also + -- avoids problems if tar doesn't support transparent + -- decompression. + void $ boolSystem "sh" + [ Param "-c" + , Param $ "zcat < " ++ shellEscape distributionfile ++ + " > " ++ shellEscape tarball + ] + tarok <- boolSystem "tar" + [ Param "xf" + , Param tarball + , Param "--directory", File tmpdir + ] + unless tarok $ + giveup $ "failed to untar " ++ distributionfile + sanitycheck $ tmpdir installBase + installby R.rename newdir (tmpdir installBase) + let deleteold = do + deleteFromManifest olddir + makeorigsymlink olddir + return (newdir "git-annex", deleteold) + installby a dstdir srcdir = + mapM_ (\x -> a (toRawFilePath x) (toRawFilePath (dstdir takeFileName x))) + =<< dirContents srcdir +#endif + sanitycheck dir = + unlessM (doesDirectoryExist dir) $ + giveup $ "did not find " ++ dir ++ " in " ++ distributionfile + makeorigsymlink olddir = do + let origdir = fromRawFilePath (parentDir (toRawFilePath olddir)) installBase + removeWhenExistsWith R.removeLink (toRawFilePath origdir) + R.createSymbolicLink (toRawFilePath newdir) (toRawFilePath origdir) + +{- Finds where the old version was installed. -} +oldVersionLocation :: IO FilePath +oldVersionLocation = readProgramFile >>= \case + Nothing -> giveup "Cannot find old distribution bundle; not upgrading." + Just pf -> do + let pdir = fromRawFilePath $ parentDir $ toRawFilePath pf +#ifdef darwin_HOST_OS + let dirs = splitDirectories pdir + {- It will probably be deep inside a git-annex.app directory. -} + let olddir = case findIndex ("git-annex.app" `isPrefixOf`) dirs of + Nothing -> pdir + Just i -> joinPath (take (i + 1) dirs) +#else + let olddir = pdir +#endif + when (null olddir) $ + giveup $ "Cannot find old distribution bundle; not upgrading. (Looked in " ++ pdir ++ ")" + return olddir + +{- Finds a place to install the new version. + - Generally, put it in the parent directory of where the old version was + - installed, and use a version number in the directory name. + - If unable to write to there, instead put it in the home directory. + - + - The directory is created. If it already exists, returns Nothing. + -} +newVersionLocation :: GitAnnexDistribution -> FilePath -> IO (Maybe FilePath) +newVersionLocation d olddir = + trymkdir newloc $ do + home <- myHomeDir + trymkdir (home s) $ + return Nothing + where + s = installBase ++ "." ++ distributionVersion d + topdir = fromRawFilePath $ parentDir $ toRawFilePath olddir + newloc = topdir s + trymkdir dir fallback = + (createDirectory dir >> return (Just dir)) + `catchIO` const fallback + +installBase :: String +installBase = "git-annex." ++ +#ifdef linux_HOST_OS + "linux" +#else +#ifdef darwin_HOST_OS + "app" +#else + "dir" +#endif +#endif + +deleteFromManifest :: FilePath -> IO () +deleteFromManifest dir = do + fs <- map (dir ) . lines <$> catchDefaultIO "" (readFile manifest) + mapM_ (removeWhenExistsWith R.removeLink . toRawFilePath) fs + removeWhenExistsWith R.removeLink (toRawFilePath manifest) + removeEmptyRecursive dir + where + manifest = dir "git-annex.MANIFEST" + +removeEmptyRecursive :: FilePath -> IO () +removeEmptyRecursive dir = do + mapM_ removeEmptyRecursive =<< dirContents dir + void $ tryIO $ removeDirectory dir + +{- This is a file that the UpgradeWatcher can watch for modifications to + - detect when git-annex has been upgraded. + -} +upgradeFlagFile :: IO FilePath +upgradeFlagFile = programPath + +{- Sanity check to see if an upgrade is complete and the program is ready + - to be run. -} +upgradeSanityCheck :: IO Bool +upgradeSanityCheck = ifM usingDistribution + ( doesFileExist =<< programFile + , do + -- Ensure that the program is present, and has no writers, + -- and can be run. This should handle distribution + -- upgrades, manual upgrades, etc. + program <- programPath + untilM (doesFileExist program <&&> nowriter program) $ + threadDelaySeconds (Seconds 60) + boolSystem program [Param "version"] + ) + where + nowriter f = null + . filter (`elem` [Lsof.OpenReadWrite, Lsof.OpenWriteOnly]) + . map snd3 + <$> Lsof.query [f] + +usingDistribution :: IO Bool +usingDistribution = isJust <$> getEnv "GIT_ANNEX_STANDLONE_ENV" + +downloadDistributionInfo :: Assistant (Maybe GitAnnexDistribution) +downloadDistributionInfo = do + uo <- liftAnnex Url.getUrlOptions + gpgcmd <- liftAnnex $ gpgCmd <$> Annex.getGitConfig + liftIO $ withTmpDir "git-annex.tmp" $ \tmpdir -> do + let infof = tmpdir "info" + let sigf = infof ++ ".sig" + ifM (isRight <$> Url.download nullMeterUpdate Nothing distributionInfoUrl infof uo + <&&> (isRight <$> Url.download nullMeterUpdate Nothing distributionInfoSigUrl sigf uo) + <&&> verifyDistributionSig gpgcmd sigf) + ( parseInfoFile <$> readFileStrict infof + , return Nothing + ) + +distributionInfoUrl :: String +distributionInfoUrl = fromJust BuildInfo.upgradelocation ++ ".info" + +distributionInfoSigUrl :: String +distributionInfoSigUrl = distributionInfoUrl ++ ".sig" + +{- Upgrade only supported on linux and OSX. -} +upgradeSupported :: Bool +#ifdef linux_HOST_OS +upgradeSupported = isJust BuildInfo.upgradelocation +#else +#ifdef darwin_HOST_OS +upgradeSupported = isJust BuildInfo.upgradelocation +#else +upgradeSupported = False +#endif +#endif + +{- Verifies that a file from the git-annex distribution has a valid + - signature. Pass the detached .sig file; the file to be verified should + - be located next to it. + - + - The gpg keyring used to verify the signature is located in + - trustedkeys.gpg, next to the git-annex program. + -} +verifyDistributionSig :: GpgCmd -> FilePath -> IO Bool +verifyDistributionSig gpgcmd sig = readProgramFile >>= \case + Just p | isAbsolute p -> + withUmask 0o0077 $ withTmpDir "git-annex-gpg.tmp" $ \gpgtmp -> do + let trustedkeys = takeDirectory p "trustedkeys.gpg" + boolGpgCmd gpgcmd + [ Param "--no-default-keyring" + , Param "--no-auto-check-trustdb" + , Param "--no-options" + , Param "--homedir" + , File gpgtmp + , Param "--keyring" + , File trustedkeys + , Param "--verify" + , File sig + ] + _ -> return False diff --git a/Assistant/WebApp.hs b/Assistant/WebApp.hs new file mode 100644 index 0000000000..3d0b632717 --- /dev/null +++ b/Assistant/WebApp.hs @@ -0,0 +1,74 @@ +{- git-annex assistant webapp core + - + - Copyright 2012, 2013 Joey Hess + - + - Licensed under the GNU AGPL version 3 or higher. + -} + +{-# LANGUAGE TypeFamilies, QuasiQuotes, MultiParamTypeClasses #-} +{-# LANGUAGE TemplateHaskell, OverloadedStrings, RankNTypes #-} + +module Assistant.WebApp where + +import Assistant.WebApp.Types +import Assistant.Common +import Utility.NotificationBroadcaster +import Utility.Yesod +import Utility.AuthToken + +import Data.Text (Text) +import Control.Concurrent +import qualified Network.Wai as W +import qualified Data.ByteString.Char8 as S8 +import qualified Data.Text as T + +waitNotifier :: Assistant NotificationBroadcaster -> NotificationId -> Handler () +waitNotifier getbroadcaster nid = liftAssistant $ do + b <- getbroadcaster + liftIO $ waitNotification $ notificationHandleFromId b nid + +newNotifier :: Assistant NotificationBroadcaster -> Handler NotificationId +newNotifier getbroadcaster = liftAssistant $ do + b <- getbroadcaster + liftIO $ notificationHandleToId <$> newNotificationHandle True b + +{- Adds the auth parameter as a hidden field on a form. Must be put into + - every form. -} +webAppFormAuthToken :: Widget +webAppFormAuthToken = do + webapp <- liftH getYesod + [whamlet||] + +{- A button with an icon, and maybe label or tooltip, that can be + - clicked to perform some action. + - With javascript, clicking it POSTs the Route, and remains on the same + - page. + - With noscript, clicking it GETs the Route. -} +actionButton :: Route WebApp -> (Maybe String) -> (Maybe String) -> String -> String -> Widget +actionButton route label tooltip buttonclass iconclass = $(widgetFile "actionbutton") + +type UrlRenderFunc = Route WebApp -> [(Text, Text)] -> Text +type UrlRenderer = MVar (UrlRenderFunc) + +newUrlRenderer :: IO UrlRenderer +newUrlRenderer = newEmptyMVar + +setUrlRenderer :: UrlRenderer -> (UrlRenderFunc) -> IO () +setUrlRenderer = putMVar + +inFirstRun :: Handler Bool +inFirstRun = isNothing . relDir <$> getYesod + +{- Blocks until the webapp is running and has called setUrlRenderer. -} +renderUrl :: UrlRenderer -> Route WebApp -> [(Text, Text)] -> IO Text +renderUrl urlrenderer route params = do + r <- readMVar urlrenderer + return $ r route params + +{- Redirects back to the referring page, or if there's none, DashboardR -} +redirectBack :: Handler () +redirectBack = do + mr <- lookup "referer" . W.requestHeaders <$> waiRequest + case mr of + Nothing -> redirect DashboardR + Just r -> redirect $ T.pack $ S8.unpack r diff --git a/Assistant/WebApp/Common.hs b/Assistant/WebApp/Common.hs new file mode 100644 index 0000000000..a148dcabdb --- /dev/null +++ b/Assistant/WebApp/Common.hs @@ -0,0 +1,17 @@ +{- git-annex assistant webapp, common imports + - + - Copyright 2012 Joey Hess + - + - Licensed under the GNU AGPL version 3 or higher. + -} + +module Assistant.WebApp.Common (module X) where + +import Assistant.Common as X +import Assistant.WebApp as X +import Assistant.WebApp.Page as X +import Assistant.WebApp.Form as X +import Assistant.WebApp.Types as X +import Assistant.WebApp.RepoId as X +import Utility.Yesod as X hiding (textField, passwordField, insertBy, replace, joinPath, deleteBy, delete, insert, Key, Option, PermissionDenied) +import Data.Text as X (Text) diff --git a/Assistant/WebApp/Configurators.hs b/Assistant/WebApp/Configurators.hs new file mode 100644 index 0000000000..0042638b15 --- /dev/null +++ b/Assistant/WebApp/Configurators.hs @@ -0,0 +1,44 @@ +{- git-annex assistant webapp configurators + - + - Copyright 2012 Joey Hess + - + - Licensed under the GNU AGPL version 3 or higher. + -} + +{-# LANGUAGE QuasiQuotes, TemplateHaskell, OverloadedStrings #-} + +module Assistant.WebApp.Configurators where + +import Assistant.WebApp.Common +import Assistant.WebApp.RepoList + +{- The main configuration screen. -} +getConfigurationR :: Handler Html +getConfigurationR = ifM inFirstRun + ( redirect FirstRepositoryR + , page "Configuration" (Just Configuration) $ do + $(widgetFile "configurators/main") + ) + +getAddRepositoryR :: Handler Html +getAddRepositoryR = page "Add Repository" (Just Configuration) $ do + let repolist = repoListDisplay mainRepoSelector + $(widgetFile "configurators/addrepository") + +makeMiscRepositories :: Widget +makeMiscRepositories = $(widgetFile "configurators/addrepository/misc") + +makeCloudRepositories :: Widget +makeCloudRepositories = $(widgetFile "configurators/addrepository/cloud") + +makeWormholePairing :: Widget +makeWormholePairing = $(widgetFile "configurators/addrepository/wormholepairing") + +makeSshRepository :: Widget +makeSshRepository = $(widgetFile "configurators/addrepository/ssh") + +makeConnectionRepositories :: Widget +makeConnectionRepositories = $(widgetFile "configurators/addrepository/connection") + +makeArchiveRepositories :: Widget +makeArchiveRepositories = $(widgetFile "configurators/addrepository/archive") diff --git a/Assistant/WebApp/Configurators/AWS.hs b/Assistant/WebApp/Configurators/AWS.hs new file mode 100644 index 0000000000..fb9f92b0dd --- /dev/null +++ b/Assistant/WebApp/Configurators/AWS.hs @@ -0,0 +1,213 @@ +{- git-annex assistant webapp configurators for Amazon AWS services + - + - Copyright 2012 Joey Hess + - + - Licensed under the GNU AGPL version 3 or higher. + -} + +{-# LANGUAGE QuasiQuotes, TemplateHaskell, OverloadedStrings #-} + +module Assistant.WebApp.Configurators.AWS where + +import Assistant.WebApp.Common +import Assistant.WebApp.MakeRemote +import qualified Remote.S3 as S3 +import Logs.Remote +import qualified Remote +import qualified Types.Remote as Remote +import qualified Remote.Glacier as Glacier +import qualified Remote.Helper.AWS as AWS +import Types.Remote (RemoteConfig) +import Types.StandardGroups +import Creds +import Assistant.Gpg +import Git.Types (RemoteName) +import Annex.SpecialRemote.Config +import Types.ProposedAccepted + +import qualified Data.Text as T +import qualified Data.Map as M +import Data.Char + +awsConfigurator :: Widget -> Handler Html +awsConfigurator = page "Add an Amazon repository" (Just Configuration) + +glacierConfigurator :: Widget -> Handler Html +glacierConfigurator a = do + ifM (liftIO $ inSearchPath "glacier") + ( awsConfigurator a + , awsConfigurator needglaciercli + ) + where + needglaciercli = $(widgetFile "configurators/needglaciercli") + +data StorageClass + = StandardRedundancy + | StandardInfrequentAccess + deriving (Eq, Enum, Bounded) + +instance Show StorageClass where + show StandardRedundancy = "STANDARD" + show StandardInfrequentAccess = "STANDARD_IA" + +data AWSInput = AWSInput + { accessKeyID :: Text + , secretAccessKey :: Text + , datacenter :: Text + -- Only used for S3, not Glacier. + , storageClass :: StorageClass + , repoName :: Text + , enableEncryption :: EnableEncryption + } + +data AWSCreds = AWSCreds Text Text + +extractCreds :: AWSInput -> AWSCreds +extractCreds i = AWSCreds (accessKeyID i) (secretAccessKey i) + +s3InputAForm :: Maybe CredPair -> MkAForm AWSInput +s3InputAForm defcreds = AWSInput + <$> accessKeyIDFieldWithHelp (T.pack . fst <$> defcreds) + <*> secretAccessKeyField (T.pack . snd <$> defcreds) + <*> datacenterField AWS.S3 + <*> areq (selectFieldList storageclasses) (bfs "Storage class") (Just StandardRedundancy) + <*> areq textField (bfs "Repository name") (Just "S3") + <*> enableEncryptionField + where + storageclasses :: [(Text, StorageClass)] + storageclasses = + [ ("Standard redundancy", StandardRedundancy) + , ("Infrequent access (cheaper for backups and archives)", StandardInfrequentAccess) + ] + +glacierInputAForm :: Maybe CredPair -> MkAForm AWSInput +glacierInputAForm defcreds = AWSInput + <$> accessKeyIDFieldWithHelp (T.pack . fst <$> defcreds) + <*> secretAccessKeyField (T.pack . snd <$> defcreds) + <*> datacenterField AWS.Glacier + <*> pure StandardRedundancy + <*> areq textField (bfs "Repository name") (Just "glacier") + <*> enableEncryptionField + +awsCredsAForm :: Maybe CredPair -> MkAForm AWSCreds +awsCredsAForm defcreds = AWSCreds + <$> accessKeyIDFieldWithHelp (T.pack . fst <$> defcreds) + <*> secretAccessKeyField (T.pack . snd <$> defcreds) + +accessKeyIDField :: Widget -> Maybe Text -> MkAForm Text +accessKeyIDField help = areq (textField `withNote` help) (bfs "Access Key ID") + +accessKeyIDFieldWithHelp :: Maybe Text -> MkAForm Text +accessKeyIDFieldWithHelp = accessKeyIDField help + where + help = [whamlet| + + Get Amazon access keys +|] + +secretAccessKeyField :: Maybe Text -> MkAForm Text +secretAccessKeyField = areq passwordField (bfs "Secret Access Key") + +datacenterField :: AWS.Service -> MkAForm Text +datacenterField service = areq (selectFieldList list) (bfs "Datacenter") defregion + where + list = M.toList $ AWS.regionMap service + defregion = Just $ AWS.defaultRegion service + +getAddS3R :: Handler Html +getAddS3R = postAddS3R + +postAddS3R :: Handler Html +postAddS3R = awsConfigurator $ do + defcreds <- liftAnnex previouslyUsedAWSCreds + ((result, form), enctype) <- liftH $ + runFormPostNoToken $ renderBootstrap3 bootstrapFormLayout $ s3InputAForm defcreds + case result of + FormSuccess input -> liftH $ do + let name = T.unpack $ repoName input + makeAWSRemote initSpecialRemote S3.remote TransferGroup (extractCreds input) name $ M.fromList + [ configureEncryption $ enableEncryption input + , (typeField, Proposed "S3") + , (Proposed "datacenter", Proposed $ T.unpack $ datacenter input) + , (Proposed "storageclass", Proposed $ show $ storageClass input) + , (Proposed "chunk", Proposed "1MiB") + ] + _ -> $(widgetFile "configurators/adds3") + +getAddGlacierR :: Handler Html +getAddGlacierR = postAddGlacierR + +postAddGlacierR :: Handler Html +postAddGlacierR = glacierConfigurator $ do + defcreds <- liftAnnex previouslyUsedAWSCreds + ((result, form), enctype) <- liftH $ + runFormPostNoToken $ renderBootstrap3 bootstrapFormLayout $ glacierInputAForm defcreds + case result of + FormSuccess input -> liftH $ do + let name = T.unpack $ repoName input + makeAWSRemote initSpecialRemote Glacier.remote SmallArchiveGroup (extractCreds input) name $ M.fromList + [ configureEncryption $ enableEncryption input + , (typeField, Proposed "glacier") + , (Proposed "datacenter", Proposed $ T.unpack $ datacenter input) + ] + _ -> $(widgetFile "configurators/addglacier") + +getEnableS3R :: UUID -> Handler Html +getEnableS3R uuid = do + m <- liftAnnex remoteConfigMap + isia <- case M.lookup uuid m of + Just c -> liftAnnex $ do + pc <- parsedRemoteConfig S3.remote c + return $ S3.configIA pc + Nothing -> return False + if isia + then redirect $ EnableIAR uuid + else postEnableS3R uuid + +postEnableS3R :: UUID -> Handler Html +postEnableS3R uuid = awsConfigurator $ enableAWSRemote S3.remote uuid + +getEnableGlacierR :: UUID -> Handler Html +getEnableGlacierR = postEnableGlacierR + +postEnableGlacierR :: UUID -> Handler Html +postEnableGlacierR = glacierConfigurator . enableAWSRemote Glacier.remote + +enableAWSRemote :: RemoteType -> UUID -> Widget +enableAWSRemote remotetype uuid = do + defcreds <- liftAnnex previouslyUsedAWSCreds + ((result, form), enctype) <- liftH $ + runFormPostNoToken $ renderBootstrap3 bootstrapFormLayout $ awsCredsAForm defcreds + case result of + FormSuccess creds -> liftH $ do + m <- liftAnnex remoteConfigMap + let name = fromJust $ lookupName $ + fromJust $ M.lookup uuid m + makeAWSRemote enableSpecialRemote remotetype SmallArchiveGroup creds name M.empty + _ -> do + description <- liftAnnex $ + T.pack <$> Remote.prettyUUID uuid + $(widgetFile "configurators/enableaws") + +makeAWSRemote :: SpecialRemoteMaker -> RemoteType -> StandardGroup -> AWSCreds -> RemoteName -> RemoteConfig -> Handler () +makeAWSRemote maker remotetype defaultgroup (AWSCreds ak sk) name config = + setupCloudRemote defaultgroup Nothing $ + maker hostname remotetype (Just creds) config + where + creds = (T.unpack ak, T.unpack sk) + {- AWS services use the remote name as the basis for a host + - name, so filter it to contain valid characters. -} + hostname = case filter isAlphaNum name of + [] -> "aws" + n -> n + +getRepoInfo :: RemoteConfig -> Widget +getRepoInfo c = [whamlet|S3 remote using bucket: #{bucket}|] + where + bucket = maybe "" fromProposedAccepted $ M.lookup (Accepted "bucket") c + +previouslyUsedAWSCreds :: Annex (Maybe CredPair) +previouslyUsedAWSCreds = getM gettype [S3.remote, Glacier.remote] + where + gettype t = previouslyUsedCredPair AWS.creds t $ + not . S3.configIA . Remote.config diff --git a/Assistant/WebApp/Configurators/Delete.hs b/Assistant/WebApp/Configurators/Delete.hs new file mode 100644 index 0000000000..333e13656a --- /dev/null +++ b/Assistant/WebApp/Configurators/Delete.hs @@ -0,0 +1,121 @@ +{- git-annex assistant webapp repository deletion + - + - Copyright 2013 Joey Hess + - + - Licensed under the GNU AGPL version 3 or higher. + -} + +{-# LANGUAGE QuasiQuotes, TemplateHaskell, OverloadedStrings #-} + +module Assistant.WebApp.Configurators.Delete where + +import Assistant.WebApp.Common +import Assistant.DeleteRemote +import Assistant.DaemonStatus +import Assistant.ScanRemotes +import Assistant.Sync +import qualified Remote +import qualified Git +import Config.Files.AutoStart +import Logs.Trust +import Logs.Remote +import Logs.PreferredContent +import Types.StandardGroups +import Annex.UUID +import Command.Uninit (prepareRemoveAnnexDir) + +import qualified Data.Text as T +import qualified Data.Map as M + +notCurrentRepo :: UUID -> Handler Html -> Handler Html +notCurrentRepo uuid a = do + u <- liftAnnex getUUID + if u == uuid + then redirect DeleteCurrentRepositoryR + else go =<< liftAnnex (Remote.remoteFromUUID uuid) + where + go Nothing = giveup "Unknown UUID" + go (Just _) = a + +getDeleteRepositoryR :: UUID -> Handler Html +getDeleteRepositoryR uuid = notCurrentRepo uuid $ do + deletionPage $ do + reponame <- liftAnnex $ Remote.prettyUUID uuid + $(widgetFile "configurators/delete/start") + +getStartDeleteRepositoryR :: UUID -> Handler Html +getStartDeleteRepositoryR uuid = do + remote <- fromMaybe (giveup "unknown remote") + <$> liftAnnex (Remote.remoteFromUUID uuid) + liftAnnex $ do + trustSet uuid UnTrusted + setStandardGroup uuid UnwantedGroup + liftAssistant $ addScanRemotes True [remote] + redirect DashboardR + +getFinishDeleteRepositoryR :: UUID -> Handler Html +getFinishDeleteRepositoryR uuid = deletionPage $ do + void $ liftAssistant $ removeRemote uuid + + reponame <- liftAnnex $ Remote.prettyUUID uuid + {- If it's not listed in the remote log, it must be a git repo. -} + gitrepo <- liftAnnex $ M.notMember uuid <$> remoteConfigMap + $(widgetFile "configurators/delete/finished") + +getDeleteCurrentRepositoryR :: Handler Html +getDeleteCurrentRepositoryR = deleteCurrentRepository + +postDeleteCurrentRepositoryR :: Handler Html +postDeleteCurrentRepositoryR = deleteCurrentRepository + +deleteCurrentRepository :: Handler Html +deleteCurrentRepository = dangerPage $ do + reldir <- fromJust . relDir <$> liftH getYesod + havegitremotes <- haveremotes syncGitRemotes + havedataremotes <- haveremotes downloadRemotes + ((result, form), enctype) <- liftH $ + runFormPostNoToken $ renderBootstrap3 bootstrapFormLayout $ + sanityVerifierAForm $ SanityVerifier magicphrase + case result of + FormSuccess _ -> liftH $ do + dir <- liftAnnex $ fromRawFilePath <$> fromRepo Git.repoPath + liftIO $ removeAutoStartFile dir + + {- Disable syncing to this repository, and all + - remotes. This stops all transfers, and all + - file watching. -} + liftAssistant $ do + changeSyncable Nothing False + rs <- syncRemotes <$> getDaemonStatus + mapM_ (\r -> changeSyncable (Just r) False) rs + + liftAnnex $ prepareRemoveAnnexDir dir + liftIO $ removeDirectoryRecursive . fromRawFilePath + =<< absPath (toRawFilePath dir) + + redirect ShutdownConfirmedR + _ -> $(widgetFile "configurators/delete/currentrepository") + where + haveremotes selector = not . null . selector + <$> liftAssistant getDaemonStatus + +data SanityVerifier = SanityVerifier T.Text + deriving (Eq) + +sanityVerifierAForm :: SanityVerifier -> MkAForm SanityVerifier +sanityVerifierAForm template = SanityVerifier + <$> areq checksanity (bfs "Confirm deletion?") Nothing + where + checksanity = checkBool (\input -> SanityVerifier input == template) + insane textField + + insane = "Maybe this is not a good idea..." :: Text + +deletionPage :: Widget -> Handler Html +deletionPage = page "Delete repository" (Just Configuration) + +dangerPage :: Widget -> Handler Html +dangerPage = page "Danger danger danger" (Just Configuration) + +magicphrase :: Text +magicphrase = "Yes, please do as I say!" diff --git a/Assistant/WebApp/Configurators/Edit.hs b/Assistant/WebApp/Configurators/Edit.hs new file mode 100644 index 0000000000..65da2d588e --- /dev/null +++ b/Assistant/WebApp/Configurators/Edit.hs @@ -0,0 +1,329 @@ +{- git-annex assistant webapp configurator for editing existing repos + - + - Copyright 2012 Joey Hess + - + - Licensed under the GNU AGPL version 3 or higher. + -} + +{-# LANGUAGE QuasiQuotes, TemplateHaskell, OverloadedStrings #-} +{-# LANGUAGE FlexibleContexts #-} + +module Assistant.WebApp.Configurators.Edit where + +import Assistant.WebApp.Common +import Assistant.WebApp.Gpg +import Assistant.WebApp.Configurators +import Assistant.DaemonStatus +import Assistant.WebApp.MakeRemote (uniqueRemoteName) +import Assistant.ScanRemotes +import Assistant.Sync +import Assistant.Alert +import qualified Assistant.WebApp.Configurators.AWS as AWS +import qualified Assistant.WebApp.Configurators.IA as IA +import qualified Remote.S3 as S3 +import qualified Remote +import qualified Types.Remote as Remote +import Remote.List.Util +import Logs.UUID +import Logs.Group +import Logs.PreferredContent +import Logs.Remote +import Types.StandardGroups +import qualified Git +import qualified Git.Types as Git +import qualified Git.Command +import qualified Git.Config +import qualified Annex +import Git.Remote +import Remote.Helper.Encryptable (extractCipher, parseEncryptionConfig) +import Types.Crypto +import Utility.Gpg +import Annex.UUID +import Annex.Perms +import Assistant.Ssh +import Config +import Config.GitConfig +import Config.DynamicConfig +import Types.Group +import Types.ProposedAccepted +import Annex.SpecialRemote.Config + +import qualified Data.Text as T +import qualified Data.Map as M +import qualified Data.Set as S + +data RepoGroup = RepoGroupCustom String | RepoGroupStandard StandardGroup + deriving (Show, Eq) + +data RepoConfig = RepoConfig + { repoName :: Text + , repoDescription :: Maybe Text + , repoGroup :: RepoGroup + , repoAssociatedDirectory :: Maybe Text + , repoSyncable :: Bool + } + deriving (Show) + +getRepoConfig :: UUID -> Maybe Remote -> Annex RepoConfig +getRepoConfig uuid mremote = do + -- Ensure we're editing current data by discarding caches. + void groupMapLoad + void uuidDescMapLoad + + groups <- lookupGroups uuid + remoteconfig <- M.lookup uuid <$> remoteConfigMap + let (repogroup, associateddirectory) = case getStandardGroup groups of + Nothing -> (RepoGroupCustom $ unwords $ map fromGroup $ S.toList groups, Nothing) + Just g -> (RepoGroupStandard g, associatedDirectory remoteconfig g) + + description <- fmap (T.pack . fromUUIDDesc) . M.lookup uuid <$> uuidDescMap + + syncable <- case mremote of + Just r -> liftIO $ getDynamicConfig $ remoteAnnexSync $ Remote.gitconfig r + Nothing -> getGitConfigVal annexAutoCommit + + return $ RepoConfig + (T.pack $ maybe "here" Remote.name mremote) + description + repogroup + (T.pack <$> associateddirectory) + syncable + +setRepoConfig :: UUID -> Maybe Remote -> RepoConfig -> RepoConfig -> Handler () +setRepoConfig uuid mremote oldc newc = do + when descriptionChanged $ liftAnnex $ do + maybe noop (describeUUID uuid . toUUIDDesc . T.unpack) (repoDescription newc) + void uuidDescMapLoad + when nameChanged $ do + liftAnnex $ do + name <- uniqueRemoteName (legalName newc) 0 <$> Annex.getGitRemotes + {- git remote rename expects there to be a + - remote..fetch, and exits nonzero if + - there's not. Special remotes don't normally + - have that, and don't use it. Temporarily add + - it if it's missing. -} + let remotefetch = Git.ConfigKey $ encodeBS $ + "remote." ++ T.unpack (repoName oldc) ++ ".fetch" + needfetch <- isNothing <$> fromRepo (Git.Config.getMaybe remotefetch) + when needfetch $ + inRepo $ Git.Command.run + [Param "config", Param (Git.fromConfigKey remotefetch), Param ""] + inRepo $ Git.Command.run + [ Param "remote" + , Param "rename" + , Param $ T.unpack $ repoName oldc + , Param name + ] + remotesChanged + liftAssistant updateSyncRemotes + when associatedDirectoryChanged $ case repoAssociatedDirectory newc of + Nothing -> noop + Just t + | T.null t -> noop + | otherwise -> liftAnnex $ do + let dir = takeBaseName $ T.unpack t + m <- remoteConfigMap + case M.lookup uuid m of + Nothing -> noop + Just remoteconfig -> configSet uuid $ + M.insert (Proposed "preferreddir") (Proposed dir) remoteconfig + when groupChanged $ do + liftAnnex $ case repoGroup newc of + RepoGroupStandard g -> setStandardGroup uuid g + RepoGroupCustom s -> groupSet uuid $ S.fromList $ map toGroup $ words s + {- Enabling syncing will cause a scan, + - so avoid queueing a duplicate scan. -} + when (repoSyncable newc && not syncableChanged) $ liftAssistant $ + case mremote of + Just remote -> addScanRemotes True [remote] + Nothing -> addScanRemotes True + =<< syncDataRemotes <$> getDaemonStatus + when syncableChanged $ + liftAssistant $ changeSyncable mremote (repoSyncable newc) + where + syncableChanged = repoSyncable oldc /= repoSyncable newc + associatedDirectoryChanged = repoAssociatedDirectory oldc /= repoAssociatedDirectory newc + groupChanged = repoGroup oldc /= repoGroup newc + nameChanged = isJust mremote && legalName oldc /= legalName newc + descriptionChanged = repoDescription oldc /= repoDescription newc + + legalName = makeLegalName . T.unpack . repoName + +editRepositoryAForm :: Maybe Git.Repo -> Maybe Remote -> RepoConfig -> MkAForm RepoConfig +editRepositoryAForm mrepo mremote d = RepoConfig + <$> areq (if ishere then readonlyTextField else textField) + (bfs "Name") (Just $ repoName d) + <*> aopt textField (bfs "Description") (Just $ repoDescription d) + <*> areq (selectFieldList groups `withNote` help) (bfs "Repository group") (Just $ repoGroup d) + <*> associateddirectory + <*> areq checkBoxField "Syncing enabled" (Just $ repoSyncable d) + where + ishere = isNothing mremote + isspecial = maybe False ((== Git.Unknown) . Git.location) mrepo + groups = customgroups ++ standardgroups + standardgroups :: [(Text, RepoGroup)] + standardgroups = map (\g -> (T.pack $ descStandardGroup g , RepoGroupStandard g)) $ + filter sanegroup [minBound..maxBound] + sanegroup + | isspecial = const True + | otherwise = not . specialRemoteOnly + customgroups :: [(Text, RepoGroup)] + customgroups = case repoGroup d of + RepoGroupCustom s -> [(T.pack s, RepoGroupCustom s)] + _ -> [] + help = [whamlet|What's this?|] + + associateddirectory = case repoAssociatedDirectory d of + Nothing -> aopt hiddenField "" Nothing + Just dir -> aopt textField (bfs "Associated directory") (Just $ Just dir) + +getEditRepositoryR :: RepoId -> Handler Html +getEditRepositoryR = postEditRepositoryR + +postEditRepositoryR :: RepoId -> Handler Html +postEditRepositoryR = editForm False + +getEditNewRepositoryR :: UUID -> Handler Html +getEditNewRepositoryR = postEditNewRepositoryR + +postEditNewRepositoryR :: UUID -> Handler Html +postEditNewRepositoryR = editForm True . RepoUUID + +getEditNewCloudRepositoryR :: UUID -> Handler Html +getEditNewCloudRepositoryR = postEditNewCloudRepositoryR + +postEditNewCloudRepositoryR :: UUID -> Handler Html +postEditNewCloudRepositoryR uuid = connectionNeeded >> editForm True (RepoUUID uuid) + +editForm :: Bool -> RepoId -> Handler Html +editForm new (RepoUUID uuid) + | uuid == webUUID || uuid == bitTorrentUUID = page "The web" (Just Configuration) $ do + $(widgetFile "configurators/edit/webrepository") + | otherwise = page "Edit repository" (Just Configuration) $ do + mremote <- liftAnnex $ Remote.remoteFromUUID uuid + when (mremote == Nothing) $ + whenM ((/=) uuid <$> liftAnnex getUUID) $ + giveup "unknown remote" + curr <- liftAnnex $ getRepoConfig uuid mremote + liftAnnex $ checkAssociatedDirectory curr mremote + mrepo <- liftAnnex $ + maybe (pure Nothing) (Just <$$> Remote.getRepo) mremote + ((result, form), enctype) <- liftH $ + runFormPostNoToken $ renderBootstrap3 bootstrapFormLayout $ + editRepositoryAForm mrepo mremote curr + case result of + FormSuccess input -> liftH $ do + setRepoConfig uuid mremote curr input + liftAnnex $ checkAssociatedDirectory input mremote + redirect DashboardR + _ -> do + let istransfer = repoGroup curr == RepoGroupStandard TransferGroup + config <- liftAnnex $ fromMaybe mempty + . M.lookup uuid + <$> remoteConfigMap + let repoInfo = getRepoInfo mremote config + let repoEncryption = getRepoEncryption mremote (Just config) + $(widgetFile "configurators/edit/repository") +editForm _new r@(RepoName _) = page "Edit repository" (Just Configuration) $ do + mr <- liftAnnex (repoIdRemote r) + let repoInfo = case mr of + Just rmt -> do + config <- liftAnnex $ fromMaybe mempty + . M.lookup (Remote.uuid rmt) + <$> remoteConfigMap + getRepoInfo mr config + Nothing -> getRepoInfo Nothing mempty + g <- liftAnnex gitRepo + mrepo <- liftAnnex $ maybe (pure Nothing) (Just <$$> Remote.getRepo) mr + let sshrepo = maybe False (\repo -> remoteLocationIsSshUrl (parseRemoteLocation (Git.repoLocation repo) False g)) mrepo + $(widgetFile "configurators/edit/nonannexremote") + +{- Makes any directory associated with the repository. -} +checkAssociatedDirectory :: RepoConfig -> Maybe Remote -> Annex () +checkAssociatedDirectory _ Nothing = noop +checkAssociatedDirectory cfg (Just r) = do + repoconfig <- M.lookup (Remote.uuid r) <$> remoteConfigMap + case repoGroup cfg of + RepoGroupStandard gr -> case associatedDirectory repoconfig gr of + Just d -> do + top <- fromRawFilePath <$> fromRepo Git.repoPath + createWorkTreeDirectory (toRawFilePath (top d)) + Nothing -> noop + _ -> noop + +getRepoInfo :: Maybe Remote.Remote -> Remote.RemoteConfig -> Widget +getRepoInfo (Just r) c = case fromProposedAccepted <$> M.lookup typeField c of + Just "S3" -> do + pc <- liftAnnex $ parsedRemoteConfig S3.remote c + if S3.configIA pc + then IA.getRepoInfo c + else AWS.getRepoInfo c + Just t + | t /= "git" -> [whamlet|#{t} remote|] + _ -> getGitRepoInfo =<< liftAnnex (Remote.getRepo r) +getRepoInfo _ _ = [whamlet|git repository|] + +getGitRepoInfo :: Git.Repo -> Widget +getGitRepoInfo r = do + let loc = Git.repoLocation r + [whamlet|git repository located at #{loc}|] + +getRepoEncryption :: Maybe Remote.Remote -> Maybe Remote.RemoteConfig -> Widget +getRepoEncryption (Just _) (Just c) = case extractCipher pc of + Nothing -> + [whamlet|not encrypted|] + (Just (SharedCipher _)) -> + [whamlet|encrypted: encryption key stored in git repository|] + (Just (EncryptedCipher _ _ ks)) -> desckeys ks + (Just (SharedPubKeyCipher _ ks)) -> desckeys ks + where + pc = either (const (Remote.ParsedRemoteConfig mempty mempty)) id $ + parseEncryptionConfig c + desckeys (KeyIds { keyIds = ks }) = do + cmd <- liftAnnex $ gpgCmd <$> Annex.getGitConfig + knownkeys <- liftIO (secretKeys cmd) + [whamlet| +encrypted using gpg key: +